LINUX.ORG.RU

Gentoo на ZFS

 , , , ,


15

5

Не спрашивайте - зачем. Просто так, потому что можно. Ну и к тому же можно ссылаться на этот топик в ответ на вбросы бздунов насчёт «а этот ваш Линукс умеет ZFS?». Умеет, как видите.

Краткий мануал по красноглазию:

1) Создаём раздел для ZFS. После этого потребуется создать пул. Пул - это что-то вроде виртуального устройства.

zpool create zero /dev/sda2

«zero» - это моё название пула. У вас оно может быть любым другим. Просто создать пул как-то неинтересно, поэтому повключаем всякие разные плюшки ZFS. Включаем дедупликацию:

zfs set dedup=on zero

и сжатие:

zfs set compress=lzjb zero

и отключаем обновление временных меток:

zfs set atime=off zero

ну и отключаем монтирование средствами самой ZFS дабы избежать неудобств на стадии сборки системы в chroot:

zfs set mountpoint=legacy zero

2) Теперь у нас есть чистый пул, но пул - это ещё не ФС. Чтобы установить туда систему, нужно создать файловые системы на этом пуле. Прелесть ZFS в том, что на одном пуле можно создать кучу ФС, каждой из которых можно задать свои опции. Например, я создал ФС для корня (и уже при создании говорим zfs, что монтировать создаваемые ФС мы будем вручную через mount):

zfs create -o mountpoint=legacy zfs/system

Эта ФС унаследовала все опции (дедупликация, сжатие) от пула, потому что для корня такие опции, в общем-то, неплохи. Далее я создал ФС специально для дерева portage, оверлеев и каталога с исходниками ядра:

zfs create -o mountpoint=legacy zfs/src

Так как на этой ФС будет куча текстовых файлов, обращаться к которым придётся сравнительно редко, здесь имеет смысл задействовать несколько иные опции. Например, усилить сжатие (после дефиса указана степень сжатия, диапазон - от 1 до 9, по умолчанию 6):

zfs set compress=gzip-9 zero/src

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

zfs set dedup=off zfs/src

Отдельная ФС для /home:

zfs create -o mountpoint=legacy zero/home

Опции пусть будут унаследованы от пула. Далее я перестраховался и создал отдельную ФС для /var, потому что в какой-то там рассылке видел упоминание каких-то багов при дедупликации на /var. Посты были датированы ещё прошлым годом, с тех пор утекло много воды, но бережёного случай бережёт:

zfs create -o mountpoint=legacy zero/var
zfs set dedup=off zero/var

3) Далее у нас стандартная сборка Gentoo. Монтируем будущий корень:

mount -t zfs zero/system /mnt/system

и остальные ФС:

mount -t zfs zero/src /mnt/system/src
mount -t zfs zero/home /mnt/system/home
mount -t zfs zero/var /mnt/system/var
mount /dev/sda1 /mnt/system/boot

После чего монтируем нужные виртуальные ФС (proc, dev, sys), монтируем хранилище архивов с исходниками пакетов, в общем, всё по хэнбуку, поэтому не стану заострять на этом внимания. Внимание требуется на этапе установки и сборки ядра. Устанавливать нужно это милое ядрышко (перед этим нужно будет включить флаг zfs, я думаю, разберётесь сами):

layman -a init6
emerge geek-sources

На этапе сборки ядра нужно учесть некоторые детали. Например, в мануалах написано, что нужно включить опцию CONFIG_KALLSYMS и отключить CONFIG_PREEMPT (т.е. установить её в значение «Server») Первую-то я включил, а отключать вторую меня жаба задавила (эта опция влияет на отзывчивость ядра), тем более что на Гитхабе я читал, что в последних версиях zfsonlinux проблемы с этой опцией ядра устранены. После этого, конечно, включаем SPL и ZFS. Первая опция находится прямо в корне конфигуратора, а вторая - в секции «File systems». А вот далее важно не пойти на поводу мануалов Гитхаба, ибо это чревато феерическим ментальным трахом. В мануалах тех написано, что нужно добавить указанный там оверлей и установить оттуда особые версии dracut и genkernel для сборки initramfs с поддержкой ZFS, ибо даже жёсткое включение ZFS в ядро не позволяет загрузить систему с корня ZFS (нужны утилиты для работы с ZFS, которые должны находиться в initramfs). Собственно, я так и сделал. После чего на протяжении дня сношался с кривоглючным dracut, упорно не желавшим включать утилиты ZFS в initramfs. Я даже вытягивал какие-то древние версии dracut и устанавливал их через make install, потом уже добавлял нужные файлы в initramfs вручную - чего я только ни делал! А оказалось, что нужно было тупо забить на эти горе-мануалы и установить самый стандартный genkernel из официального дерева. И всё правильно собирается следующей командой:

genkernel all --no-clean --makeopts=-j16 --zfs --bootloader=grub2

вот и вся недолга. Если перед этим вы успели собрать и установить Grub2, то genkernel сам добавит в grub.cfg нужные опции (укажет ФС, с которой грузить систему, в моём случае это zero/system).

На стадии формирования списка загружаемых демонов нужно сделать следующее:

rc-update add zfs boot
rc-update add zfs-shutdown shutdown

4) Монтирование файловых систем ZFS. Вообще, монтировать их можно двумя способами: посредством утилиты zfs через задание точки монтирования:

zfs set mountpoint=$DIR $FS

или через fstab с предварительным отключением автомонтирования:

zfs set mountpoint=legacy $FS

Запись в fstab для, например, корня, не содержит ничего сверхъестественного:

zero/system        /        zfs        noatime        0 0

Способ монтирования выбирать вам. Следует лишь иметь в виду, что при монтировании через fstab zfs-shutdown будет ругаться при выключении.

5) Вообще это нужно делать раньше, но, в принципе, пофиг:

hostid > /etc/hostid (это в chroot)
cp /etc/zfs/zpool.cache /mnt/system/etc/zfs

6) Если у вас меньше 2 Гб оперативки, то ZFS своим кэшем может сожрать всю раму и завесить систему. Поэтому имеет смысл ограничить её аппетиты:

echo "options zfs zfs_arc_max=512M" > /etc/modprobe.d/zfs.conf

Я выставил 1 Гб.

7) Отмонтируем все ФС, делаем

zpool export zero

и перезагружаемся в свежую систему. Не знаю, как получится у вас, а лично у меня initramfs не может импортировать пул и потому вываливается в busybox. Не проблема, входим в его шелл и импортируем пул вручную:

zpool import zero
exit

и система далее нормально загружается.

Какие профиты? Ну, она явно быстрее ранее используемой мной Btrfs. Опять же, на Btrfs нет дедупликации, и сжатие можно применить/отключить только на весь раздел. Сжатие lzjb не так заметно экономит место (это просто быстрый алгоритм), а вот gzip-9 сжал дерево portage с 350 Мб до 256 Мб, а каталог исходников ядра - так вообще в 2 раза, с 800 с лишним Мб до 400 с лишним. Причём на скорости сборки ядра это практически не отразилось (замерял через time). А ещё в ZFS есть контрольные суммы, так что о целостности системы можно вообще не беспокоиться. Но самое главное, конечно - это снапшоты. Я, попробовав раз снапшоты ещё в Btrfs, так и не смог от них отказаться.

Маленькое дополнение: почитав преисполненные страха комментарии про снижение скорости из-за дедупликации я её таки отключил на всех ФС. И ещё: возможно, я что-то не так делал, но монтирование ZFS посредством утилиты zfs я так и не осилил нормально. В итоге я просто выставил legacy на все ФС, внёс их в fstab и выкинул zfs-shutdown из скриптов выключения.



Проверено: JB ()
Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от ktulhu666

Реквестирую кул стори про ZFS.

Какую именно? :) У меня разные юзкейсы для неё. Мы её юзаем под nexenta для файлового хранилища на 20тб + под хранилище видеофайлов на 40 тб.

Ну я на декстопе под линуксом её гоняю.

tazhate ★★★★★
()
Ответ на: комментарий от tazhate

На десктопе SSD? Какие опции ZFS используются?

Что касается Nexenta, то как там поддержка системы в целом со стороны мейнтейнеров? Я слышал, что баги часто долго висит.
Какие фитчи ZFS используются на серверах, какая архтитектура storage-сети, какие настройки были специфичными/не очевидными? И не просветишь ли ты меня про состояние openindiana, illumos и других наследников opensolaris?

И ещё: oracle, вроде, больше не публикует код ZFS новых версий? Или я что-то не так понимаю?

ktulhu666 ☆☆☆
()
Ответ на: комментарий от ktulhu666

Реквестирую кул стори про ZFS.
И да: она уже научилась делать дедупликацию raw-данных, далее сжимая их?

А что, нет разве?

% zfs get dedup roxy/swap
NAME       PROPERTY  VALUE          SOURCE
roxy/swap  dedup     on             local
% zfs get compress roxy/swap
NAME       PROPERTY     VALUE     SOURCE
roxy/swap  compression  on        local
% swapinfo
Device          1M-blocks     Used    Avail Capacity
/dev/zvol/roxy/swap       256        0      256     0%
iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от ktulhu666

Тебе уже несколько дней лень писать, стерва :(

Мне правда лень пересказывать кучу блогов и ситуацию в сообществе соляры :)

tazhate ★★★★★
()
Ответ на: комментарий от tazhate

Мне правда лень пересказывать кучу блогов и ситуацию в сообществе соляры :)

Прошу потрудиться, я не из праздного любопытства спрашиваю. ZFS реально для меня интересна, но я не решаюсь использовать именно из-за отсутствия ответов на эти вопросы.
И ещё один вопрос: ZFS нормально переживает ситуацию пропадания питания или горячей перезагрузки? Например, XFS и иногда ext3/4 могут несколько некорректно себя вести, особенно если ситуация повторяется несколько раз подряд, тогда как ReiserFS не требует даже fsck, при этом ни разу меня не подводил.

ktulhu666 ☆☆☆
()
Ответ на: комментарий от ktulhu666

ZFS нормально переживает ситуацию пропадания питания или горячей перезагрузки?

Дома использую (под фрибсд, правда, надеюсь, в линуксе ситуация не хуже). Питание постоянно пропадает из-за капитального ремонта в доме, данных не терял. Один раз система отказалась грузиться из-за zfs, решилось загрузкой livecd и монтированием пула, который просто предупредил, что откатит последние транзакции, после чего я перезагрузился в основную систему. Специально для тестов на резет не жал. В кроне кручу скрипт zfs-snapshot-mgmt, которые делает снапшоты каждые 15 минут, потом прореживает историю снапшотов (кстати, реально пригодилось один раз, когда по ошибке сделал revert исходников, чуть не потерял работу на целый час).

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

В плане прорежевания снапшотов - это подразумевается удаление снапшота между несколькими другими снапшотами, верно?

Используется ли HDD/SDD? Есть ли деградация производительности из-за снапшотов?

Уточните, пожалуйста, версию бзды, пула, и фс.

И да - под бздой реально можно работать? И звук работает и видео? А пульсаудио у вас есть?

ktulhu666 ☆☆☆
()
Ответ на: комментарий от ktulhu666

В плане прорежевания снапшотов - это подразумевается удаление снапшота между несколькими другими снапшотами, верно?

Да, создаются снапшоты каждые 15 минут, потом оставляются снапшоты за каждый час, потом два раза в сутки, автоматических снапшотов старше месяца совсем нет.

Используется ли HDD/SDD?

2 HDD страйпом, планирую SSD в качестве кеша подключить для ускорения работы (попробовал сделать кеш из hdd - реально помогает, пока кеш не начинает фрагментироваться)

Есть ли деградация производительности из-за снапшотов?

Два с лишним года использую эту фс, производительность села, думается, из-за фрагментации. После того, как стал пользоваться скриптом для снапшотов, не заметил ухудшения.

9.0-RELEASE-p3, ZFS pool version 28, ZFS filesystem version 5.

И да - под бздой реально можно работать? И звук работает и видео? А пульсаудио у вас есть?

Можно, может не понравиться, и я даже пойму почему, но можно. Звук работает без проблем (что-то подкрутил, но сейчас уже не вспомню, что именно, лет 5 назад это делал, ещё на 6.2, кажется), видео само собой. Пульсаудио не установлен, но можно и поставить, если хочется (программы компиляю из портов, галку с пульса снимаю, т.к. не вижу в нём необходимости).

unC0Rr ★★★★★
()
Ответ на: комментарий от ktulhu666

FreeBSD 9.1-PRERELEASE #0 r244092: Mon Dec 10 23:25:48 VOLT 2012

% zpool upgrade -v
This system supports ZFS pool feature flags.

The following features are supported:

FEAT DESCRIPTION
-------------------------------------------------------------
async_destroy                         (read-only compatible)
     Destroy filesystems asynchronously.
empty_bpobj                           (read-only compatible)
     Snapshots use less space.

The following legacy versions are also supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  Snapshot user holds
 19  Log device removal
 20  Compression using zle (zero-length encoding)
 21  Deduplication
 22  Received properties
 23  Slim ZIL
 24  System attributes
 25  Improved scrub stats
 26  Improved snapshot deletion performance
 27  Improved snapshot creation performance
 28  Multiple vdev replacements

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.

под бздой реально можно работать?

Можно.

И звук работает и видео?

И звук, и видео работают. И Flash с Java в бровзере Firefox работают.

А пульсаудио у вас есть?

Пульс: http://www.freshports.org/audio/pulseaudio/ Больно-то и не нужен. У меня не установлен.

iZEN ★★★★★
()
Ответ на: комментарий от unC0Rr

Кстати, это правда, что у вас портах при сборке нету автосборки зависимостей, обновления мира, дерева build и runtime зависимостей, оверлеев, слотов, мултиверсионности и установка чуть ли не make'ом делается? И что обновления выходят реже, чем в debian stable.

ktulhu666 ☆☆☆
()
Ответ на: комментарий от ktulhu666

Эээ... как можно было бы жить-то, будь это всё правдой? :)

Зависимости как для сборки, так и для запуска, собираются и устанавливаются автоматически. Установка из портов делается запуском make, который делает всё необходимое, а что в этом плохого? Нужна программа - находишь её в портах и пишешь make install, после чего она собирается и устанавливается со всеми неустановленными зависимостями и готова для запуска.

Обновление базовой системы - freebsd-update (да, это отдельная от портов штука, т.к. в фрибсд основная система отделена от портов). Оверлеев нет, что такое слоты не знаю, установить старую версию можно при помощи portdowngrade (ни разу не потребовалось за >5 лет).

Можно скачивать и устанавливать готовые пакеты, сейчас вот какие-то репозитории придумали делать, но я не интересовался (утилита pkg, может там и оверлеи есть, кстати).

Обновления базовой системы выходят нечасто, но программы-то в портах всегда более-менее свежие.

unC0Rr ★★★★★
()
Ответ на: комментарий от ktulhu666

это правда, что у вас портах при сборке нету автосборки зависимостей

Голимая ложь.

обновления мира

Через порты невозможно обновить мир.

дерева build и runtime зависимостей

build- и runtime-зависимости обновляются все одновременно (если появились новые версии) точно так же, как и установленные из портов пакеты. build-пакеты после установки рабочих пакетов можно спокойно удалить, в portmaster есть даже специальная опция для этого — "-delete-build-only".

оверлеев, слотов, мултиверсионности

Чево?

и установка чуть ли не make'ом делается?

make — базовый инструмент управления жизненным циклом ПО на FreeBSD. Поверх него много других удобных инструментов работает.

И что обновления выходят реже, чем в debian stable.

Подпишись на RSS: http://www.freshports.org/backend/rss2.0.php увидишь, как часто обновляется ПО.

iZEN ★★★★★
()
Ответ на: комментарий от Kindly_Cat

Ты лучше скажи, в чём смысл снимков, про которые ты не уверен, что они не были изменены? Надо изменить - сделай клон и правь от души.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

Что значит «не уваерен, что не были изменены»? В бессознательном состоянии изменял там файлы что ли?

Kindly_Cat
() автор топика
Ответ на: комментарий от Kindly_Cat

А почему и нет? Выпил лишка, потёр не те файлы и не там, наутро вообще не помнишь, что комп включал... Да и другие возможности существуют.

unC0Rr ★★★★★
()
Ответ на: комментарий от unC0Rr

От шальных рук не спасёт ничего.

Вообще, какое-то двойственное впечатление от этой ZFS. С одной стороны - очень мощная ФС, с другой - лишние заморочки (делать сначала снапшот, а потом клон снапшота, ладно бы сразу клон), памяти жрёт много, проблемы с включением в ядро...

Kindly_Cat
() автор топика
Ответ на: комментарий от Kindly_Cat

делать сначала снапшот, а потом клон снапшота, ладно бы сразу клон

Но зачем?!

памяти жрёт много

У меня половина памяти из 7,5ГБ, как правило, свободно. При этом запущены: Xfce4 4.10, Thunar, Thunderbird 17, Chromium, RSSOwl (Java). Что у меня не так?

iZEN ★★★★★
()
Ответ на: комментарий от unC0Rr

И чего ты мне свн-ку суёшь?

-RELEASE — это специально выбранный срез из SVN. Так что сама система-таки обновляется очень часто, а вот релизы — нет.

Предлагаешь на каждый коммит обновляться?

В этом есть смысл, поскольку свежие версии пакетов доступны только для -STABLE.

iZEN ★★★★★
()
Ответ на: комментарий от Kindly_Cat

в чём смысл снимков, в которые нельзя ничего писать?

В чём смысл непротиворечивого образа файловой системы сделанного на какой-то момент времени? Думаю, положительных ответов на этот вопрос будет несколько. Сам найдёшь или подсказать?

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от Kindly_Cat

От шальных рук не спасёт ничего.

не обязательно быть рутом, чтобы попортить клон

unC0Rr ★★★★★
()
Ответ на: комментарий от Kindly_Cat

Зачем делать снимок для клона - вот это правильный вопрос.

Чтобы было ясно, когда пути разошлись, наверно

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.