Введение
Linux имеет надежные системы и инструменты для управления аппаратными устройствами, включая накопители. В этой статье мы рассмотрим, на высоком уровне, как Linux представляет эти устройства и как сырое хранилище превращается в использоваемое пространство на сервере.
Что такое блочное хранилище?
Блочное хранилище – это другое название того, что ядро Linux называет блочным устройством. Блочное устройство – это аппаратное устройство, которое можно использовать для хранения данных, такое как традиционный вращающийся жесткий диск (HDD), твердотельный накопитель (SSD), флэш-накопитель и т. д. Оно называется блочным устройством, потому что ядро взаимодействует с аппаратным обеспечением, обращаясь к блокам фиксированного размера или кускам пространства.
Другими словами, блочное хранилище – это то, что вы думаете о регулярном дисковом хранилище на компьютере. После его настройки оно действует как расширение текущего дерева файловой системы, и вы должны иметь возможность писать на него или читать информацию с каждого диска взаимозаменяемо.
Что такое разделы диска?
Дисковые разделы являются способом разбиения накопителя на более мелкие используемые блоки. Раздел – это секция накопителя, которую можно использовать так же, как и сам накопитель.
Разделение позволяет разделить доступное пространство и использовать каждый раздел для разных целей. Это дает пользователю большую гибкость, позволяя ему разделить один диск на несколько операционных систем, пространства подкачки или специализированных файловых систем.
Хотя диски могут быть отформатированы и использованы без разделения, операционные системы обычно ожидают наличия таблицы разделов, даже если на диске записан только один раздел. Обычно рекомендуется разделить новые накопители для большей гибкости.
MBR против GPT
При разделении диска важно знать, какая схема разделов будет использоваться. Обычно выбирают между MBR (Master Boot Record) и GPT (GUID Partition Table).
MBR более 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-label
: У большинства файловых систем есть механизм маркировки, который позволяет назначать произвольные имена, заданные пользователем, для диска или раздела. Этот каталог состоит из ссылок, названных по этим меткам, предоставленным пользователем.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.