Опубликован: 04.07.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 8:

Концепция, устройство и администрирование файловой системы ZFS

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >

ZFS в работе

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

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

Основными понятиями ZFS, с которыми мы имеем дело, являются:

  • пул (пул памяти) – набор виртуальных устройств для размещения на них данных;
  • данные – информация, хранимая в файлах, каждый из которых имеет имя; в отличие от метаданных, которые хранятся в выделенных блоках и не имеют имен;
  • метаданные – служебная информация, описывающая объект; например, если объект – это файл, то метаданные включают набор прав доступа к файлу (access control list), тип файла, размер файла, время модификации файла, информацию о виртуальных блоках, в которых размещен файл и т.п.;
  • RAID-Z – массив дисков, на которые записываются данные и соответствующие им избыточные блоки четности; в ZFS реализованы одинарная и двойная избыточность, позволяющие исправлять однократные и двукратные ошибки в данных соответственно;
  • снимок – зафиксированное на определенный момент времени состояние файловой системы – всех данных и метаданных;
  • клон файловой системы – ее снимок, в который разрешена запись;
  • набор данных (dataset) – файловая система, снимок, клон файловой системы.

ZFS обеспечивает непротиворечивый формат хранения данных – посредством транзакционной модели копирования при записи. Эта модель гарантирует, что данные на диске никогда не перезаписываются, а все операции записи являются атомарными1Если вы не поняли этот абзац, – это нормально, читайте дальше. Данные на диск в ZFS пишутся так, чтобы любая запись либо успешно завершалась, либо не учитывалась вообще, потому что вначале пишутся данные, а затем – метаданные, и если происходит сбой, препятствующий завершению записи, на самом верхнем уровне метаданных об этой операции ничего не будет известно, и все место, куда происходила неудавшаяся запись, будет считаться пустым. А запись верхнего уровня метаданных – это как раз атомарная операция (т.е. неделимая на части), и она представляет собой запись одного блока на диск..

Программное обеспечение ZFS состоит из семи частей:

  1. SPA (Storage Pool Allocator)
  2. DSL (Dataset and Snapshot Layer)
  3. DMU (Data Management Layer2В в оригинале документации – так, но логичнее предположить, что DMU – это Data Management Unit, а не Layer. Был бы Layer, было бы DML. )
  4. ZAP (ZFS Attribute Processor)
  5. ZPL (ZFS POSIX Layer)
  6. ZIL (ZFS Intent Log)
  7. ZVOL (ZFS Volume)

Структуры, располагающиеся на диске, ассоциированы с этими семью частями. Чтобы не вдаваться в излишние подробности, здесь мы рассматриваем только одну из этих частей – SPA. Для более глубокого изучения можно порекомендовать документ "ZFS on-disk specification"[ [ 8.2 ] ] со страницы разработчиков ZFS http://opensolaris.org/os/community/zfs/docs.

Виртуальные устройства (vdev), метки виртуальных устройств и загрузочный блок
Виртуальные устройства

Пул ZFS3ZFS storage pool здесь и далее называется просто "пул" или "пул ZFS", потому что каждый раз писать "пул хранения" довольно глупо: никаких других пулов на горизонте не наблюдается. собирается из нескольких виртуальных устройств. Виртуальные устройства (vdev) бывают физическими (их иногда называют leaf vdev, т.е. "устройства нижнего уровня", листья в дереве устройств) и логическими (их иногда называют interior vdev, "внутренними устройствами", потому что они находятся внутри дерева устройств). Физические виртуальные устройства – это пригодные для записи блочные устройства, например, жесткие диски. Логические виртуальные устройства – это логические группы физических устройств.

Виртуальные устройства образуют древовидную структуру, листьями которой являются физические устройства. Каждый пул имеет специальное логическое виртуальное устройство, которое считается корневым (root). Все прямые потомки корневого устройства называются виртуальными устройствами верхнего уровня. Рисунок 8.2 показывает дерево виртуальных устройств некоего пула, содержащего два зеркала. Первое зеркало, M1, содержит два диска, A и B. Второе зеркало, M2, содержит другие два диска, С и D. Виртуальные устройства A, B, C, D – это физические виртуальные устройства. M1 и M2 – логические виртуальные устройства, которые являются виртуальными устройвами верхнего уровня, так как они находятся непосредственно под корневым виртуальным устройством.

Пример дерева виртуальных устройств

увеличить изображение
Рис. 8.2. Пример дерева виртуальных устройств
Метки виртуальных устройств

На каждом физическом виртуальном устройстве в пуле записывается структура размером 256 Кб, которая называется меткой виртуального устройства. Эта метка описывает то устройство, на котором она записана и, кроме того, все устройства, которые в этом пуле имеют предком то же самое виртуальное устройство верхнего уровня (да-да, самого верхнего, под корневым!). Например, метка виртуального устройства С на рисунке 8.2 будет описывать следующие виртуальные устройства: С, D и M2. Содержание метки виртуального устройства детально разобрано ниже.

Метка виртуального устройства служит двум целям: предоставлению доступа к пулу в целом и проверке его целостности и доступности устройств в нем. Чтобы метка всегда содержала актуальную информацию и могла быть прочтена, используются принципы избыточности и поэтапного изменения: на каждом физическом виртуальном устройстве хранится четыре копии метки устройства (избыточность), и (для гарантии актуальности) эти копии изменяются поэтапно.

Избыточность

На каждом физическом виртуальном устройстве в пуле хранится четыре копии метки устройства. За исключением короткого времени во время изменения метки, все четыре копии идентичны и любая из них может быть использована для доступа к пулу и проверки его содержимого. Когда устройство добавляется в пул, ZFS помещает две метки в начало устройства и две – в конец. Рисунок 8.3 показывает метки, размещенные на диске размера N: L0 и L1 – метки в начале диска, метки L2 и L3 – в конце.

Четыре копии метки виртуального устройства, размещенные на устройстве (диске) размера N

увеличить изображение
Рис. 8.3. Четыре копии метки виртуального устройства, размещенные на устройстве (диске) размера N

Если отталкиваться от предположения, что повреждения на диске случаются, как правило, в последовательных его частях, размещение меток в максимально удаленных друг от друга зонах (в начале и в конце) дает ZFS большую вероятность сохранения "живой" метки в случае сбоя диска или его случайной перезаписи (например, использования диска в качестве устройства для свопа в то время, как он еще не перестал быть частью пула).

Транзакционное двухэтапное обновление меток

Местоположение меток фиксируется в момент добавления устройства в пул, и, стало быть, метки – это единственный объект в ZFS, который оказался вне концепции копирования при записи. Когда метка изменяется, ее содержимое перезаписывается. Каждый раз, когда перезаписывается содержимое диска, возникает потенциальная опасность сбоя. Чтобы гарантировать доступность метки в любой момент, используется поэтапное изменение: на первом этапе на диск записываются четные копии меток (L0 и L2). Если в любой момент этой записи произойдет сбой, останутся верные метки с нечетными номерами. Как только четные метки записаны на диск, начинается запись нечетных меток – L1 и L3. Эта процедура была специально разработана для того, чтобы на диске в любой момент времени присутствовала правильная копия метки устройства.

Содержание метки виртуального устройства

Метка виртуального устройства делится на 4 части: 8 Кб свободного пространства, 8Кб для заголовка загрузочного блока, 112 Кб для содержимого в виде пар "имя/значение" и 128Кб для ста двадцати восьми однокилобайтных структур типа uber-блок. На рисунке 8.4 показано, из чего состоит метка, и следующие четыре раздела рассказывают об этом подробнее.

Элементы метки виртуального устройства (свободное место, заголовок загрузочного блока, пары имя/значение, массив uber-блоков)

увеличить изображение
Рис. 8.4. Элементы метки виртуального устройства (свободное место, заголовок загрузочного блока, пары имя/значение, массив uber-блоков)

ZFS поддерживает и метки диска VTOC, и метки EFI в качестве допустимых описателей разметки диска. Метки EFI пишутся в отдельную область диска, а метки VTOC – в первые 8Кб первого раздела диска. Поэтому из сообржений совместимости первые 8 Кб метки виртуального устройства оставлены пустыми.

Заголовок загрузочного блока

Заголовок загрузочного блока размером 8 Кб зарезервирован на будущее и будет описан в будущем приложении к этому документу.

Список пар имя/значение

Следующие 112 Кб метки виртуального устройства заняты набором пар имя/значение, которые описывают это виртуальное устройство и все связанные с ним виртуальные устройства; так, метка на устройстве "А" (рисунок 8.2) будет содержать информацию об устройствах "А","В" и "M1".

Uber-блок

Сразу за списком имен/значений в метке виртуального устройства идет массив uber-блоков. Uber-блок – это часть метки, необходимая для того, чтобы иметь доступ к содержимому пула4Uber-блок по смыслу похож на суперблок в UFS (прим. авт.).. В каждый момент времени всего один uber-блок в пуле считается активным, а именно тот, который имеет самый большой номер группы транзакций и корректную контрольную сумму, рассчитанную по алгоритму SHA-256.

Массив uber-блоков; содержимое uber-блоков

увеличить изображение
Рис. 8.5. Массив uber-блоков; содержимое uber-блоков

Чтобы гарантировать постоянный доступ к активному uber-блоку, он никогда не перезаписывается. Все изменения в uber-блоке записываются в какой-нибудь другой элемент массива uber-блоков. При записи нового uber-блока номер группы транзакций и метка времени увеличиваются, делая его таким образом новым активным uber-блоком за одну атомарную операцию. Uber-блок из массива для записи при очередной транзакции выбирается на основе алгоритма кругового выбора. На рисунке 8.5 два uber-блока из массива показаны в развернутом виде.

< Лекция 7 || Лекция 8: 123456 || Лекция 9 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Гордеев
Александр Гордеев
Казахстан, Алматы, ТУРАН
Александр Даниленко
Александр Даниленко
Россия, Москва, 797, 1993