ZFS на Debian/Wheezy

Это перевод заметки от Russell Coker опубликованной в его блоге.
Буду благодарен за замечания. Так как в некоторых местах не въехал в суть того о чем он пишет.
Сама статья рассказывает о том как он помучался чтобы получить работающую ZFS для своего сервера на Debian/Wheezy

С уважением — mirivlad.

При росте объема систем хранения данных увеличивается время требуемое для проверки традиционной файловой системы с помощью fsck при нарушении в их работе. Так же скорость роста объема хранилищ данных обгоняет смежные системы ввода-вывода, что влечет за собой увеличение времени перестройки RAID массива, например мой первый диск был размером 70M и его скорость передачи данных была 500K/с что означает, что весь его объем мог быть прочитан за 140 секунд! В прошлый раз я тестировал свежий 1TB SATA диск и получил скорость передачи данных от 112MB/s до 52MB/s что означает что чтение всего объема этого диска заняло 3 часа и 10 минут, и эта проблема углубляется при увеличении объема дисков. Отсюда следует что избыточность более желательна при современных объемах данных.

BTRFS vs ZFS

Обе файловых системы BTRFS и ZFS проверяют контрольные суммы данных и сразу засекают момент когда данные повреждаются, они не нуждаются в программе fsck, и комбинирование проверки контрольных сумм с RAID позволяют уменьшить риск потери данных при ребилде рейд-массива. ZFS поддерживает RAID-Z, который по сути является RAID-5 с проверкой контрольных сумм всех блоков и может отслеживать случаи повреждения данных, и RAID-Z2 который является эквивалентом RAID-6. RAID-Z очень важен если вы не хотите отдавать половину ваших дисков для контроля целостности данных или если вы хотите чтобы ваши данные пережили потерю одного и более дисков, так что пока BTRFS имеет эквивалентные ZFS возможности, но отсутствует поддержка RAID-Z. Так же BTRFS более новая файловая система и пока не готова для критически важных областей применения.

Я устанавливаю систему для работы файлового сервера и сервера Xenкоторый не будет слишком часто обновляться следующие несколько лет. Будет 4 диска с ZFS и RAID-Z которые предлагают значительные преимущества по наращиванию объема в сравнении с  BTRFS и их использование позволит использовать RAID-Z2 для контроля целостности данных. Не хочется обновлять систему довольно часто, а это придется сделать, так как в скором времени выйдет  релиз Debian/Wheezy , и придется обновляться до него со Squeeze на котором будут доступны только обновления безопасности.

ZFS на Wheezy

Получить ZFS в основном не особо сложно, the ZFSonLinux.org сайт с достаточно толковыми инструкциями как это сделать. Код zfsonlinux не собирается изкоробки под Wheezy хотя отлично работает на Squeeze. Самым легким путем было получить пакет для Ubuntu с рабочим ZFS который я потом пересобрал для работы в Debian/Wheezy. Это было не особо трудно, однако жаль, что сайт zfsonlinux не поддерживает последние ядра.

Корневая ФС на ZFS

Сложность использования ZFS для корневой ФС является то, что ZFS FAQ рекомендует использовать весь диск для улучшения производительности, что помогает выровнять проблему 4K секторов диска (что являтся проблемой для любого большого диска если вы хотите использовать его с ZFS) [2]. Это означает что вы должны использовать  /boot на ZFS (что слишком экстремально для меня) или иметь отдельный загрузочный диск.

Сейчас у меня есть сервер в котором 4*3TB диска в RAID-Z массиве и один небольшой диск для корневой файловой системы. Наличие пяти дисков один из которых скотчем прикручен к остальным в системе которая предназначена только для 4-х дисков — не идеал ,но когда у вас есть образ OS  и проводятся бекапы критичных данных (но не требующих ежедневных бекапов) то отказ устройства с корневой ФС может быть исправлен на следующий день без всяких проблем. Но мне хочется этого избежать.

Здесь немного хорошей документации по использованию Ubuntuс корнем на ZFS[3]. Я рассматривал возможность использования Ubuntu LTS для сервера, но я предпочитаю Debian и могу пересобрать пакеты из Ubuntu для Debian так что Debian для меня стал наилучшим выбором. Я собрал такой пакет для Wheezy, установил и собрал DKMS, и довольно просто — получил ZFS работающую без всяких проблем.

Так что встала проблема получения корневой ФС работающей на ZFS . Пакеты Ubuntu не работают с initramfs в Debian по непонятным мне причинам и модули не загружаются. Это меня не остановилобы перед оручным исправлением проблемы, но тогда я в будущем мог столкнуться с проблемами в виде отвалившегося корня ФС при обновлении.

Следующая неожиданность — это то как ZFS монтирует файловые системы. В отличии от блочных устройств монтируемых по списку указанному в /etc/fstab система ZFS делает все сама. Так что если вы хотите примонтировать раздел  ZFS как корень ФС то вы должны сконфигурировать точку монтирования через команду “zfs set mountpoint”. Это конечно прибавляет головной боли, если вы загрузитесь с другой корневой ФС. Когда я столкнулся с этим, то понял что корень на ZFS это не самый лучший вариант. Так что для нового сервера я установил файловую систему Ext4 на устройство с RAID-1 для корня и /boot и использую ZFS для всего остального.

Правильное выравнивание

После установки системы с 4 дисками RAID-1 (ну или зеркало, для тех педантов кто утверждает что в истинном RAID-1 может быть только 2 диска) для / и /boot я создал разделы для ZFS. Согласно выводу fdisk разделы /dev/sda2, /dev/sdb2 имеют начальную адресацию в несколько 2048 которые я предлагаю адресовать для выравнивания дисков с 4K секторами.

Установка ZFS

Я создал APT репозитарий указанный выше (только для AMD64) для ZFS с пакетами основанными на пакетах для Ubuntu от Darik Horn (спасибо за хорошую работу Darik). Установил zfs-dkms, spl-dkms, и zfsutils и получил систему ZFS . Я мог бы попробовать использовать бинарники из пакетов от Darik но думаю лучше пересобрать пакеты Ubuntu для использования на Debian.

Ссылки по теме:

Автор: Mirivlad

Скромный труженик консоли и окошек.