Терминология хранения данных в Linux: введение

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

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

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

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

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

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

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

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

MBR против GPT

При разбивке диска важно знать, какой формат будет использоваться. Как правило, выбор лежит между MBR (Master Boot Record) и GPT (GUID Partition Table).

Так как МBR уже больше 30 лет, его функционал серьезно ограничен. Например, MBR нельзя использовать для дисков размером более 2 ТБ и он может поддерживать не более четырех основных разделов.

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

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

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

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

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

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

  • Ext4: самая популярная файловая система по умолчанию (преемница Ext2 и Ext3). Ext4 журналируется, совместима с предыдущими системами, стабильна и имеет развитую поддержку и инструменты. В общем Ext4 – хороший выбор, если у вас нет особых потребностей.
  • XFS: высокопроизводительная система, быстро форматируется и у неё хорошие пропускные характеристики при работе с большими файлами и с большими дисками. Также в XFS есть функции создания снапшотов в реальном времени. XFS обеспечивает ведение журнала метаданных файловой системы, а не ведение журнала данных и метаданных. Это гарантирует высокую производительность, но может привести к повреждению данных в случае резкого отключения питания.
  • Btrfs: это современная многофункциональная файловая система, основанная на технике копирование при записи (copy-on-write). Такая архитектура позволяет интегрировать некоторые функции управления томами на уровне файловой системы, включая моментальные снапшоты и клонирование. Btrfs используется по умолчанию на некоторых потребительских и коммерческих устройствах NAS (сервер для хранения данных на файловом уровне) и популярна для выделенных многодисковых массивов.
  • ZFS: еще одна файловая система с механизмом копирования при записи (copy-on-write), а также с функциональным менеджером томов. 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-label: Большинство файловых систем имеют механизм маркировки, который позволяет назначать имена, указанные пользователем, для диска или раздела. Этот каталог состоит из ссылок, которые названы метками (их указывает пользователь).
  • by-uuid: UUID, или универсальный уникальный идентификатор представляют собой длинную уникальную строку из букв и цифр, которую можно использовать в качестве идентификатора ресурса хранилища. Как правило, они не совсем читабельны, но чаще всего уникальны, даже в разных системах. Рекомендуем использовать UUID для ссылки на хранилище, которое может мигрировать между системами, поскольку при этом менее вероятны конфликты имен.
  • by-partlabel и by-partuuid: таблицы GPT предлагают собственный набор меток и UUID, которые также можно использовать для идентификации. Он работает почти так же, как и два предыдущих каталога, но использует идентификаторы, специфичные для GPT.
  • by-id: Этот каталог содержит ссылки, сгенерированные собственными серийными номерами оборудования и оборудованием, к которому они подключены. Этот каталог не совсем постоянен, потому что способ подключения устройства к системе может изменить его имя по идентификатору.
  • by-path: Как и by-id, этот каталог зависит от подключения устройства хранения к самой системе. Ссылки здесь построены с помощью системной интерпретации аппаратного обеспечения, используемого для доступа к устройству. Он имеет те же недостатки, что и by-id, поскольку подключение устройства к другому порту может изменить его значение.

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

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

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

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

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

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

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

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

Продвинутое управление хранилищем

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

Что такое RAID?

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

Характеристики массива RAID зависят от его уровня RAID. Именно уровень определяет, как диски в массиве соотносятся друг с другом. Вот основные технологии виртуализации:

  • RAID 0: этот тип указывает на чередование дисков. Когда данные записываются в массив, они разбиваются и линейно распределяются между дисками. Это повышает производительность, поскольку позволяет одновременно записывать или считывать данные с нескольких дисков. Недостатком данного уровня является то, что сбой одного диска может привести к потере данных во всем массиве, так как ни один диск не содержит достаточно информации для восстановления. Из-за этого RAID 0 редко используется.
  • RAID 1: эта технология указывает на зеркальное (“mirroring”)  отображение дисков. Все, что записывается в массив RAID 1, также записывается на несколько дисков. Его основным преимуществом является избыточность данных, которая позволяет данным пережить потерю жесткого диска по обе стороны данного “зеркала”. Но при этом половина объема дисков отводится на резервирование данных.
  • RAID 5: распределяет данные по нескольким дискам, аналогично RAID 0. На этом уровне реализуется “чередование с четностью” по дискам. То есть, в случае сбоя одного диска оставшиеся диски могут восстановить массив, используя общую для них информацию о четности. Этот подход позволяет спасти данные при повреждении одного из накопителей, а это значит, что массив может пережить потерю одного диска. Уровень RAID 5 уменьшает доступное пространство в массиве на емкость одного диска.
  • RAID 6: технология виртуализации 6-го уровня похожа на RAID 5, но обеспечивает двойную четность (“чередование с двойной четностью”). Благодаря принципу двойной чётности, система может перенести отказ сразу двух жестких дисков без потерь информации.  Емкость массива снова зависит от суммы четности, что означает, что полезная емкость уменьшается на два диска.
  • RAID 10: представляет собой гибрид уровней 1 и 0 . Сначала создается два набора зеркальных массивов. Затем данные чередуются по ним. Это создает массив, который имеет некоторые характеристики избыточности, обеспечивая при этом хорошую производительность. Однако для этого требуется довольно много дисков, а общая емкость по-прежнему составляет менее половины объединенного дискового пространства.

Читайте также:

Tags: , ,

Добавить комментарий