Перевод: Алексей Федорчук
Здесь представлены те фрагменты перевода старой версии, которые сохранили актуальность. И могут быть полезны при первом знакомстве с ZFS. Оригинал современной версии ZFS on Linux FAQ здесь.
Содержание
1.1 В чём проблема лицензирования ZFS?
1.4 Как монтировать файловую систему?
1.5 Почему я должен использовать 64-битную систему?
1.7 Какие имена устройств следует использовать при создании пула?
1.8 Как изменить имена устройств существующего пула?
1.10 Какова производительность ZFS?
1.11 Как создать файл /etc/zfs/zpool.cache
1.13 Возможна ли загрузка с ZFS?
1.15 Как настроить ZFS on Linux для работы с дисками Advanced Format?
2.1 Как я могу помочь?
1.1 В чём проблема лицензирования ZFS?
Проблема в том, что лицензия GPL, под которой распространяется ядро Linux, несовместим с лицензией CDDL, под которой распространяется ZFS. Хотя и GPL, и CDDL — открытые, их условия таковы, что невозможно одновременно удовлетворить требования обеих. Это означает, что распространение системы, включающей и ядро Linux, и ZFS, будет незаконным.
Один из способов решения этой проблемы — реализация ZFS в пользовательском пространстве (FUSE), где она не будет частью ядра ядра. Такой подход решает вопросы лицензирования, но имеет некоторые технические недостатки.
Однако существует и другой вариант. Лицензия CDDL не ограничивает изменение и распространение исходников ZFS, которые являются общедоступными в рамках OpenSolaris. Код ZFS может быть изменен так, чтобы собрать модуль ядра, лицензированныый под CDDL и не распространяемый в составе ядра Linux. Это делает возможной реализацию в Linux нативной ZFS, если вы готовы скачать и собрать такой модуль самостоятельно.
1.4 Как монтировать файловую систему?
Монтируемый набор данных будет создан и автоматически смонтирован при создании пула посредством zpool create
. Дополнительные наборы данных могут быть созданы с помощью zfs create
, и они также будут смонтированы автоматически.
1.5 Почему я должен использовать 64-битную систему?
В ядре Solaris интенсивное использование адресов виртуальной памяти — обычная практика. Однако в ядре Linux большая часть памяти обращается к физическим адресам, и использование виртуального адресного пространства настоятельно не рекомендуется. Это особенно верно в 32-разрядных архитектурах, где объём виртуального адресного пространства ограничен. Использование виртуального адресного пространства на 64-битных Linux-ядрах также не рекомендуется. Но в этом случае адресное пространство настолько больше физической памяти, что это не столь большая проблема.
Если вы сталкиваетесь с лимитом виртуальной памяти, то увидите сообщения в системных логах. И тогда можно увеличить размер виртуальной адресации опциями загрузки.
1.7 Какие имена устройств следует использовать при создании пула?
Есть разные системы именования устройств, которые могут быть использованы при создании ZFS пула. Каждый вариант имеет свои преимущества и недостатки, правильный выбор для данного пула ZFS действительно зависит от требований. Для разработки и тестирования легче и быстрее использовать имена вида /dev/sdX
. Для типичного домашнего сервера, возможно, предпочтительней имена /dev/disk/by-id
из-за простоты и удобства чтения. А для очень больших конфигураций с несколькими контроллерами, скорее всего, лучше имена вида /dev/disk/zpool
для максимального контроля. Но в конце концов, выбор идентификации ваших дисков зависит от вас.
/dev/sdX, /dev/hdX
: лучший выбор для разработки и тестирования
Резюме: Верхний уровень имён устройств по умолчанию обеспечивает совместимость с другими реализациями. Они доступны во всех дистрибутивах Linux и могут использоваться совместно. Однако они не являются постоянными, и должны использоваться только с пулами разрабатываемыми или тестируемыми
Преимущества: Этот метод прост для быстрой проверки, имена короткие, и они будут доступны для всех дистрибутивов.
Недостатки: эти имена не являются постоянными, и могут изменяться в зависимости от того, в каком порядке подключены диски. Добавление или удаление носителей в системе может легко привести к изменению имён. И тогда придётся удалять файл zpool.chache
и реимпортировать пул, использующий новые имена
Пример:
$ sudo zpool create tank sda sdb
/dev/disk/by-id/
: лучший выбор для маленьких пулов (меньше 10 дисков)
Резюме: Этот каталог содержит идентификаторы дисков с более человекочитаемыми именами. Они обычно состоят из типа интерфейса, имени вендора, номера модели, серийного номера устройства, и номера раздела.
Преимущества: Хорошо для небольших систем с одним дисковым контроллером. Поскольку имена постоянные и гарантированно не поменяются, не имеет значения, как диски подключены к системе. Диски можно отключить, случайно смешать и подключить опять произвольным образом — и пул будет по прежнему корректно импортирован.
Недостатки: конфигурирование групп с избыточностью становится трудным и может повлечь ошибки.
Пример:
$ sudo zpool create tank scsi-SATA_Hitachi_HTS7220071201DP1D10DGG6HMRP
/dev/disk/by-path/
: хороший выбор для больших пулов (больше 10 дисков)
Резюме: конкретный диск привязан определённому номеру шины PCI.
Преимущества: передача топологии устройств хранения в имени помогает не только для локализации диска в больших системах. Но она позволяет также избежать избыточности при многих адаптерах.
Недостатки: имена длинные, громоздкие и трудно воспринимаемые человеком.
Пример:
$ sudo zpool create tank pci-0000:00:1f.2-scsi-0:0:0:0 pci-0000:00:1f.2-scsi-1:0:0:0
/dev/disk/zpool/
: лучший выбор для больших пулов (больше 10 дисков)
Резюме: По сути, это изменение модели /dev/disk/by-path/
, позволяющее выбрать свои собственные уникальные и осмысленные имена для дисков. Эти имена будут отображаться всеми утилитами ZFS, что может способствовать точному администрированию большого пула.
Преимущества: Этот подход имеет все преимущества метода /dev/disk/by-path/
и плюс позволяет выбрать значимые человекочитаемые имена.
Недостатки: Этот метод основан на наличии файла /etc/zfs/zdev.conf
, который должен быть правильно настроен для вашей системы.
Пример:
$ sudo zpool create tank mirror A1 B1 mirror A2 B2
1.8 Как изменить имена устройств существующего пула?
Изменить имена устройств существующего пула можно, просто экспортировав пул, а затем ре-импортировать его с опцией -d
, в которой указываются новые имена, которые должны быть использованы. Например, чтобы использовать заказные имена в /dev/disk/zpool
:
$ sudo zpool export tank $ sudo zpool import -d /dev/disk/zpool tank
1.10 Какова производительность ZFS?
Для достижения хорошей производительности вашего пула вы должны следовать нескольким простым практическим рецептам.
Равномерное распределения нагрузки на дисковые контроллеры: Часто фактором, ограничивающим производительность, является не диск, а контроллер. Равномерное распределение нагрузки на последние часто увеличивает пропускную способность.
Создание пула на целых дисках: При запуске zpool create
указывать имена целых дисков (а не дисковых разделов — А.Ф.). Это позволит ZFS автоматически разметить диск, обеспечив правильное выравнивание, а также улучшит совместимость с другими реализациями ZFS, которые используют диски целиком.
Наличие достаточного объёма памяти: для использования ZFS рекомендуется не менее 2 ГБ. При включении функций сжатия и дедупликации настоятельно рекомендуется как можно больше памяти.
Повышение производительности путем установки ashift = 12: эта опция устанавливается только при первичном создании пула, и приводит к снижению нагрузки. Детали об установке этой опции при использовании Advanced Format дисков — см. в разделе 1.15.
1.11 Как создать файл /etc/zfs/zpool.cache?
При каждом импорте пула в систему создаётся файл /etc/zfs/zpool.cache
. Он содержит информацию о конфигурации пула, такую, как имена входящих в него устройств и активность состояния. Если этот файл существует при загрузке модулей ZFS, то любой пул, перечисленный в кэш-файле, будет загружен автоматически. Если пул в кэш-файле не указан, он должен быть импортирован явным образом.
1.13 Возможна ли загрузка с ZFS?
Да, многие успешно это делают. Однако этот способ требует последней версии GRUB и дистрибутив-специфичен, поэтому не рекомендуем его. Вместо этого предлагается использовать ZFS в качестве корневой файловой системы.
1.15 Как настроить ZFS on Linux для работы с дисками Advanced Format?
Advanced Format (AF) представляет собой новый формат дисков, в которым изначально используется размер сектора 4096 байт вместо 512 байт. Для обеспечения совместимости со старыми системами AF диски эмулируют сектора размером 512 байт. По умолчанию ZFS автоматически определяет размер сектора на диске. Однако в случае AF это может привести к плохому согласованию доступа к диску и значительно ухудшить производительность пула.
Начиная с версии 0.6.0-rc5 команде zpool
была добавлена опция ashift
— для явного указания назначить размера сектора создаваемого пула. Значения ashift
возможны в диапазоне от 9 до 16, со значением по умолчанию 0, что означает автоматическое определение размера сектора. Это значение и определяет смещение: ashift
для 512-байтного сектора составляет 9 (29 = 512), а ashift
для сектора в 4096 байт — 12 (212 = 4096). Чтобы заставить пул использовать сектора по 4096 байт, мы должны задать это во время создания пула:
$ sudo zpool create -o ashift=12 tank mirror sda sdb
2.1 Как я могу помочь?
Самое полезное, что вы можете сделать, это опробовать ZFS на Linux-системе и сообщать о любых проблемах. Если вы таковые увидите захотите внести свой вклад в проект, пожалуйста, пишите мне по электронной почте. Есть немало открытых вопросов в треккере, которые требуют внимания, или если у вас есть своя идея — это тоже хорошо.