Поиск по сайту:

Введение в терминологию и концепции хранения в Linux


Введение

В Linux есть надежные системы и инструменты для управления аппаратными устройствами, включая накопители. В этой статье мы подробно рассмотрим, как Linux представляет эти устройства и как необработанное хранилище превращается в полезное пространство на сервере.

Что такое блочное хранилище?

Блочное хранилище — это другое название того, что ядро Linux называет блочным устройством. Блочное устройство — это аппаратное обеспечение, которое можно использовать для хранения данных, например традиционный вращающийся жесткий диск (HDD), твердотельный накопитель (SSD), флэш-накопитель и т. д. Оно называется блочным устройством, потому что ядро взаимодействует с оборудованием, ссылаясь на блоки фиксированного размера или фрагменты пространства.

Другими словами, блочное хранилище — это то, что вы считаете обычным дисковым хранилищем на компьютере. После того, как он настроен, он действует как расширение текущего дерева файловой системы, и вы должны иметь возможность записывать или читать информацию с каждого диска взаимозаменяемо.

Что такое разделы диска?

Разделы диска — это способ разбить накопитель на более мелкие пригодные для использования единицы. Раздел — это часть накопителя, с которой можно обращаться почти так же, как с самим диском.

Разделение позволяет вам сегментировать доступное пространство и использовать каждый раздел для разных целей. Это дает пользователю больше гибкости, позволяя ему потенциально сегментировать один диск для нескольких операционных систем, пространства подкачки или специализированных файловых систем.

Хотя диски можно форматировать и использовать без разбиения на разделы, операционные системы обычно ожидают найти таблицу разделов, даже если на диск записан только один раздел. Обычно рекомендуется разбивать новые диски на разделы для большей гибкости.

MBR против GPT

При разбиении диска важно знать, какой формат разбиения будет использоваться. Обычно это сводится к выбору между MBR (основная загрузочная запись) и GPT (таблица разделов GUID).

МБР более 30 лет. Из-за своего возраста он имеет некоторые серьезные ограничения. Например, его нельзя использовать для дисков размером более 2 ТБ, и он может иметь не более четырех основных разделов.

GPT — это более современная схема разбиения, которая решает некоторые проблемы, присущие MBR. Системы, использующие GPT, могут иметь гораздо больше разделов на диск. Обычно это ограничивается только ограничениями, налагаемыми самой операционной системой. Кроме того, в GPT не существует ограничения на размер диска, а информация о таблице разделов доступна в нескольких местах для защиты от повреждения. GPT также может записывать «защитную MBR» для совместимости с инструментами только для MBR.

В большинстве случаев GPT — лучший выбор, если ваша операционная система не запрещает вам его использовать.

Форматирование и файловые системы

Хотя ядро Linux может распознавать необработанный диск, для использования его необходимо отформатировать. Форматирование — это процесс записи файловой системы на диск и подготовки его к файловым операциям. Файловая система — это система, которая структурирует данные и управляет тем, как информация записывается и извлекается с базового диска. Без файловой системы вы не могли бы использовать устройство хранения для каких-либо стандартных операций с файловой системой.

Существует множество различных форматов файловых систем, каждый из которых имеет свои недостатки, включая поддержку операционной системы. Все они представляют пользователю похожее представление диска, но функции и платформы, которые они поддерживают, могут сильно различаться.

Некоторые из наиболее популярных файловых систем для Linux:

  • Ext4: самая популярная файловая система по умолчанию — Ext4, преемница Ext2 и Ext3. Файловая система Ext4 журналируется, обратно совместима с устаревшими системами, стабильна и имеет развитую поддержку и инструменты. Это хороший выбор, если у вас нет особых потребностей.
  • XFS: XFS специализируется на производительности и больших файлах данных. Он быстро форматирует и имеет хорошие пропускные характеристики при работе с большими файлами и при работе с большими дисками. Он также имеет функции создания снимков в реальном времени. XFS использует ведение журнала метаданных, а не ведение журнала как метаданных, так и данных. Это обеспечивает высокую производительность, но потенциально может привести к повреждению данных в случае резкого отключения питания.
  • Btrfs: Btrfs — это современная, многофункциональная файловая система с возможностью копирования при записи. Эта архитектура позволяет интегрировать некоторые функции управления томами на уровне файловой системы, включая моментальные снимки и клонирование. Он используется по умолчанию на некоторых потребительских и коммерческих устройствах NAS (сетевых хранилищах) и популярен для выделенных многодисковых массивов.
  • ZFS: ZFS — это еще одна файловая система с возможностью копирования при записи и менеджер томов с надежным и зрелым набором функций. Он напрямую конкурирует с Btrfs, имеет функции обеспечения целостности данных, может работать с большими размерами файловой системы, имеет типичные функции томов, такие как моментальные снимки и клонирование, и может организовывать тома в массивы RAID и RAID-подобные массивы для обеспечения избыточности и производительности. ZFS имеет неоднозначную историю из-за проблем с лицензированием, но с точки зрения коммерческой поддержки она не намного популярнее и не менее популярна, чем Btrfs.

Кроме того, Windows в основном использует *NTFS и ExFAT, а macOS в основном использует HFS+ и APFS. Обычно можно читать и иногда записывать эти форматы файловой системы на разных платформах, но могут потребоваться дополнительные инструменты совместимости.

Как Linux управляет устройствами хранения

Файлы устройств в /dev

В Linux почти все представлено файлом где-то в иерархии файловой системы. Это включает в себя оборудование, такое как накопители, которые представлены в системе в виде файлов в каталоге /dev. Обычно файлы, представляющие устройства хранения, начинаются с sd или hd, за которыми следует буква. Например, первый диск на сервере обычно имеет вид /dev/sda.

Разделы на этих дисках также содержат файлы в /dev, представленные добавлением номера раздела в конец имени диска. Например, первым разделом на диске из предыдущего примера будет /dev/sda1.

Хотя файлы устройств /dev/sd* и /dev/hd* представляют собой традиционный способ обозначения дисков и разделов, использование только этих значений имеет существенный недостаток. . Ядро Linux решает, какое имя устройства получает при каждой загрузке, поэтому это может привести к запутанным сценариям, когда ваши устройства меняют узлы устройств.

Чтобы обойти эту проблему, каталог /dev/disk содержит подкаталоги, соответствующие другим, более постоянным способам идентификации дисков и разделов в системе. Они содержат символические ссылки, которые создаются при загрузке на правильные файлы /dev/[sh]da*. Ссылки именуются в соответствии с идентифицирующим признаком каталога (например, по метке раздела для каталога /dev/disk/by-partlabel). Эти ссылки всегда будут указывать на правильные устройства, поэтому их можно использовать в качестве статических идентификаторов для дисковых пространств.

Некоторые или все из следующих подкаталогов могут существовать в /dev/disk:

  • по метке: большинство файловых систем имеют механизм маркировки, который позволяет назначать произвольные имена, указанные пользователем, для диска или раздела. Этот каталог состоит из ссылок, названных в соответствии с указанными пользователем ярлыками.
  • by-uuid: UUID или универсальные уникальные идентификаторы представляют собой длинную уникальную строку букв и цифр, которую можно использовать в качестве идентификатора ресурса хранилища. Как правило, они не очень удобочитаемы, но почти всегда уникальны, даже в разных системах. Таким образом, было бы неплохо использовать UUID для ссылки на хранилище, которое может переноситься между системами, поскольку конфликты имен менее вероятны.
  • by-partlabel и by-partuuid: таблицы GPT предлагают собственный набор меток и UUID, которые также можно использовать для идентификации. Он работает почти так же, как и два предыдущих каталога, но использует идентификаторы, специфичные для GPT.
  • by-id: этот каталог содержит ссылки, сгенерированные собственными серийными номерами оборудования и оборудованием, к которому они подключены. Это не совсем постоянно, поскольку способ подключения устройства к системе может изменить его имя by-id.
  • by-path: как и by-id, этот каталог зависит от подключения устройства хранения к самой системе. Ссылки здесь построены с использованием системной интерпретации аппаратного обеспечения, используемого для доступа к устройству. Это имеет те же недостатки, что и by-id, так как подключение устройства к другому порту может изменить это значение.

Обычно by-label или by-uuid являются лучшими вариантами для постоянной идентификации конкретных устройств.

Примечание. Тома блочного хранилища DigitalOcean управляют серийными номерами устройств, сообщаемыми операционной системе. Это позволяет надежно сохранять категоризацию by-id на этой платформе. Это предпочтительный метод обращения к томам DigitalOcean, поскольку он является постоянным и предсказуемым при первой загрузке.

Монтажные блочные устройства

В Linux и других Unix-подобных операционных системах вся система, независимо от того, сколько задействовано физических устройств, представлена единым унифицированным файловым деревом. Когда предполагается использовать файловую систему на диске или разделе, она должна быть подключена к существующему дереву. Монтирование — это процесс присоединения отформатированного раздела или диска к каталогу в файловой системе Linux. Затем содержимое диска может быть доступно из этого каталога.

Диски почти всегда монтируются в выделенные пустые каталоги — монтирование в непустой каталог означает, что обычное содержимое каталога будет недоступно, пока диск не будет размонтирован). Существует множество различных параметров монтажа, которые можно настроить для изменения поведения подключенного устройства. Например, диск можно смонтировать в режиме только для чтения, чтобы гарантировать, что его содержимое не будет изменено.

Стандарт иерархии файловой системы рекомендует использовать /mnt или подкаталог под ним для временно смонтированных файловых систем. Он не дает рекомендаций о том, где установить дополнительное постоянное хранилище, поэтому вы можете выбрать любую схему, которую хотите. Во многих случаях подкаталоги /mnt или /mnt также используются для более постоянного хранения.

Делаем монтирования постоянными с помощью /etc/fstab

Системы Linux используют файл с именем /etc/fstab (таблица файловой системы), чтобы определить, какие файловые системы монтировать в процессе загрузки. Файловые системы, для которых нет записи в этом файле, не будут монтироваться автоматически, если только они не будут созданы каким-либо другим программным обеспечением.

Каждая строка файла /etc/fstab представляет отдельную файловую систему, которую необходимо смонтировать. В этой строке указывается блочное устройство, точка монтирования, к которой его нужно подключить, формат диска и параметры монтирования, а также несколько других сведений.

Более сложное управление хранилищем

Несмотря на то, что многие варианты использования будут реализованы с помощью этих основных функций, существуют более сложные парадигмы управления, доступные для объединения нескольких дисков, в частности, RAID.

Что такое RAID?

RAID означает избыточный массив независимых дисков. RAID — это технология управления хранением и виртуализации, позволяющая группировать диски и управлять ими как единым блоком с дополнительными возможностями.

Характеристики массива RAID зависят от его уровня RAID, который определяет, как диски в массиве соотносятся друг с другом. Некоторые из наиболее распространенных уровней:

  • RAID 0: этот уровень указывает на чередование дисков. Это означает, что когда данные записываются в массив, они разбиваются и линейно распределяются между дисками в наборе. Это обеспечивает повышение производительности, поскольку можно одновременно записывать или считывать данные с нескольких дисков. Недостатком является то, что сбой одного диска может привести к потере всех данных во всем массиве, поскольку ни один диск не содержит достаточно информации о содержимом для восстановления. По этой причине RAID 0 обычно никогда не используется в рабочей среде, хотя он может быть полезен в качестве точки сравнения.
  • RAID 1: RAID 1 указывает на зеркальное отображение дисков. Все, что записывается в массив RAID 1, записывается на несколько дисков. Его основным преимуществом является избыточность данных, которая позволяет данным пережить потерю жесткого диска по обе стороны от зеркала. Поскольку на нескольких дисках будут содержаться одни и те же данные, полезная емкость уменьшится как минимум вдвое.
  • RAID 5: RAID 5 распределяет данные по нескольким дискам, как и RAID 0. Однако на этом уровне также реализуется распределенная четность по дискам. Это означает, что в случае сбоя диска оставшиеся диски могут восстановить массив, используя общую для них информацию о четности. Обычно этого достаточно для перестроения одного диска, а это означает, что массив может пережить любую потерю одного диска. RAID 5 уменьшает доступное пространство в массиве на емкость одного диска.
  • RAID 6: RAID 6 имеет те же свойства, что и RAID 5, но обеспечивает двойную четность. Это означает, что массивы RAID 6 могут выдержать потерю любых двух дисков. На емкость массива снова влияет значение четности, а это означает, что полезная емкость уменьшается на два диска.
  • RAID 10: RAID 10 представляет собой комбинацию уровней 1 и 0. Сначала создается два набора зеркальных массивов. Затем данные чередуются по ним. Это создает массив, который имеет некоторые характеристики избыточности, обеспечивая при этом хорошую производительность. Однако для этого требуется довольно много дисков, а общая емкость по-прежнему составляет менее половины общего дискового пространства.

Куда идти дальше?

Если у вас есть новое устройство хранения, которое вы хотите использовать в своей системе Linux, см. Как выполнить основные задачи администрирования для устройств хранения в Linux.