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 из скриптов выключения.

>>> Просмотр (1280x2048, 1178 Kb)



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

Если она не глючит - но 1.00 после очистки и заливки инфы даже в другой, начистую созданный том значит что всё ок. А, и да, судя по тестам скорости записи с выключенной дедупликацией это делается быстрее. Все кеши почищены, если что

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

еще очень удобно для бекапов. базу в хотбекап, снапшот, базу из хотбекапа вывел, а снапшот потом на ленту. еще любые эксперименты/изменения в системе, конечно.

val-amart ★★★★★
()

Молоток, хорошие инструкции. Оформление красивое, но в электронных таблицах поработать продуктивно не получится - все ячейки тёмными будут, быстро устанут глаза.

Сжатие lzjb не так заметно экономит место (это просто быстрый алгоритм), а вот gzip-9 сжал дерево portage с 350 Мб до 256 Мб, а каталог исходников ядра - так вообще в 2 раза, с 800 с лишним Мб до 400 с лишним.

Можно сквошем попользоваться - очень здорово экономится место на диске даже при lzo сжатии:

/usr/src/linux ~180 Мб (в несжатом виде 630 Мб)

/usr/portage/ ~80 Мб (без distfiles и packages, в несжатом виде 350 Мб)

В итоге всю напичканную и упакованную систему можно уместить в 1-2 Гб (в зависимости от DE)

Xz в 2 раза сильнее lzo сжимает, но по скорости распаковки, поддерживающихся в squashfs, lzo равных нет даже близко.

glibych ★★
()

чего-то подобного я и ожидал от процесса установки. у фри примерно та же ситуация с установкой на ZFS. надеюсь что скоро все-таки сделают ее ФС по умолчанию во фре и запилят возможность в инсталере ставить ее нормально.

Komintern ★★★★★
()

Интересная тема, нужно будет попробовать что-нибудь подобное. :)

bsdfun ★★★★★
()

Присоеденился к клубу. Работает хорошо, чуть медленнее чем reiserfs. Тоесть в работе не заметно, но гном 3 грузится в полтора раза дольше. Не уверен связано ли это с компрессией, вполне может быть. Сделал ashift=12, правда как лошара пересоздав заново весь пул.

Не смотря на небольшое понижение производительности доволен общим пулом на 500 ГБ в котором мои FS, сжатием и снепшотами.

И да, сожрало 1.6 ГБ при старте ОЗУ. У меня 12 ГБ, потому особо пофиг, но вообщем жирновато. Насколько знаю она отдает потом память назад.

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

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

При обновлении приложений делаю так:

1) Создаю снапшоты (zfs snapshot) ФС /usr/local и /var/db/pkg

2) Обновляю установленные приложения

3) Если что-то не работает, делаю откат (zfs rollback) к снапшотам ФС /usr/local и /var/db/pkg.

Тот же самый принцип с обновлениями ядра и системы.

iZEN ★★★★★
()

Сжатие lzjb не так заметно экономит место (это просто быстрый алгоритм)

У меня svn-копию /usr/src алгоритм lzjb сжал в половину — 752МБ вместо 1,5ГБ.

а вот gzip-9 сжал дерево portage с 350 Мб до 256 Мб, а каталог исходников ядра - так вообще в 2 раза, с 800 с лишним Мб до 400 с лишним. Причём на скорости сборки ядра это практически не отразилось (замерял через time).

Тут пишут:

Сжатие

Почти нет веских причин, чтобы не включить lzjb сжатие. Удивительно, как многие файловые системы ZFS не используют сжатие. ZFS сжатие минимально нагружает современные процессоры, обеспечивает экономию дискового пространства и может улучшить производительности пула (если нужно сделать 200 операций, что будет быстрее 200 операций по 20 КБ данных или по 25 КБ?). Я говорю только о сжатии lzjb, и НЕ сжатии GZIP. GZIP может сжимать несколько сильнее, но значительно увеличивает нагрузку на процессор, что можно почувствовать, как задержку, даже при утилизации процессора менее 100%. Так что если вы хотите включить GZIP сжатие – предварительно протестируйте. Но lzjb всегда должно быть включено.

Мнение: http://forum.ixbt.com/topic.cgi?id=11:44215-167#4815

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

GZIP может сжимать несколько сильнее, но значительно увеличивает нагрузку на процессор, что можно почувствовать, как задержку, даже при утилизации процессора менее 100%

Я же говорю: замерял время сорки ядра через time. Что так, что этак - 3 с лишним минуты. Т.е. разница максимум в десяток секунд.

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

В каком месте там заморочки? Наоборот, всё прозрачно и безопасно.

В принципе, можно обновлять в снапшоте через emerge --root=$SNAPSHOT, но иногда бывает, что некоторые пакеты по два раза собираются.

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

В принципе, можно обновлять в снапшоте

Если не ошибаюсь, у тебя система всё время живёт в подмонтированном снапшоте. Но изменения делаются в пространстве живой ФС. После инсталляции новых файлов снова делается снапшот, задаётся точка монтирования этого снапшота, а предыдущий снапшот не используется и готов либо к восстановлению (в случае проблем с загрузкой нового образа системы), либо к уничтожению. Я правильно понял?

У меня же всё делается на живой системе, но в случае чего, я могу в режиме восстановления откатить изменения к заранее сделанным снапшотам.

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

Если не ошибаюсь, у тебя система всё время живёт в подмонтированном снапшоте. Но изменения делаются в пространстве живой ФС. После инсталляции новых файлов снова делается снапшот, задаётся точка монтирования этого снапшота, а предыдущий снапшот не используется и готов либо к восстановлению (в случае проблем с загрузкой нового образа системы), либо к уничтожению. Я правильно понял?

Я ничего не понял.

Я делаю снапшот живой системы (текущего корня). Монтирую в этот сделанный снапшот необходимые ФС (/dev, /sys, /proc). chroot в этот снапшот. В chroot делаю emerge -uDN @world. Выход из chroot. Прописываю этот обновлённый снапшот в fstab. Загружаюсь в него. Старая система, получается, остаётся тоже в виде снапшота.

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

У меня же всё делается на живой системе, но в случае чего, я могу в режиме восстановления откатить изменения к заранее сделанным снапшотам.

А мне не нужны никакие режимы восстановления и откаты. В случае проблем с обновленной системой я просто прописываю в fstab старый снапшот и загружаюсь в гарантированно рабочую систему.

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

В частности, при долгом использовании пула, при заполненности > 70% начинаются непонятные проблемы с производительностью.

Недавний случай - оракловая CRM на hi-end железе простаивала _несколько_ дней, над выяснением причин работало _несколько_ контор.

Параллельно ведется внедрение автоматизированной системы, требование разработчика - _только_ UFS, никакой ZFS.

scott_tiger ★★★
()

А на hardened слабо ZFS налепить? :Ъ

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

1) дедупликацию лучше не юзать, будет деградация по производительности через месяц-два лютая.

В случае хардов или говноссд.

3) кроме очень частных юзкейсов её лучше не юзать.

В случае генты на нормальном ссд очень даже будет полезно (особенно касаемо исходников ядер). Но сжатие даст куда больший эффект (squash у меня в 2,5 раза сжимает фс).

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

Я делаю снапшот живой системы (текущего корня). Монтирую в этот сделанный снапшот необходимые ФС (/dev, /sys, /proc). chroot в этот снапшот. В chroot делаю emerge -uDN @world. Выход из chroot. Прописываю этот обновлённый снапшот в fstab. Загружаюсь в него. Старая система, получается, остаётся тоже в виде снапшота.

Т.е. в ZFS снапшоты доступны на запись!? Кстати, тебе, надеюсь, очевидно, что на харде снапшоты ведут к жесткой деградации io perf в случае неполностью перезаписанных файлов?

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

А мне не нужны никакие режимы восстановления и откаты. В случае проблем с обновленной системой я просто прописываю в fstab старый снапшот и загружаюсь в гарантированно рабочую систему.

Я рекомендовал бы в данном случае СХД, особенно, если будут юзаться методы, размазывающие файлы по носителю (снапшоты, дедап). В СХД всё будет прокешированно в рам, затем с ссд, и потом только писаться/читаться с хардов, что и советует оракл и советовала сан. В случае отсутствия бюджета СХД можно сделать при помощи обычного сервера, бондинга 4x1гб портов (2 встроенных, 2 pci-e карты) (на десктопе так же), далее pxe (или iscsi boot, или граб сразу с флешки на дектопе), далее iscsi или FCoE (я сделал бы ставку на iSCSI из-за того, что тут явно программное решение без DCE, которое может и потерять пакет-другой за несколько месяцев). На сервере СХД всё будет кэшироваться в рам, далее можно программно сделать прослойку для кэша в ссд, далее шифрование, md и харды. Очень удобно и просто (с dracut).

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

Когда уже до всех дойдет, что ZFS была изначально рождена для 64+ Гб рам, и почти сразу после этого делалась ставка на SSD и SAN? На обычном десктопе она пригода только всех всех своих перделок, кроме рейда и компрессии, т.к. они (перделки) размазывают данные по диску, что даже в случае обычного SSD будет ощущаться через какое-то время. В случае HDD io perf будет ещё как деградивать.

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

в ZFS снапшоты доступны на запись

Нет, но можно сделать клон из снапшота, который будет

ведут к жесткой деградации

в случае zfs что угодно ведёт к деградации, вследствие использования copy-on-write

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

Недавний случай - оракловая CRM на hi-end железе простаивала _несколько_ дней, над выяснением причин работало _несколько_ контор.

и что же они выяснили?

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

Кстати, тебе, надеюсь, очевидно, что на харде снапшоты ведут к жесткой деградации io perf в случае неполностью перезаписанных файлов?

Нет, не очевидно, т.к. такого нет.

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

Ты что, упоротый? Нахрена мне для десктопа заморачиваться со всем этим?

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

В Btrfs тоже COW, никакой деградации не замечал.

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

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

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

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

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

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

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

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

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

отлично вывод, че. подробности о том что было не так НДА не разрешает разгласить?

// нормальные люди просто используют vxvm/vxfs. не безпроблемно, но система достаточно прозрачно и саппорт адекватен.

val-amart ★★★★★
()

Хочу обои такие же. Дайте плз а? И вообще такого типа обои где можно найти?

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

А мне не нужны никакие режимы восстановления и откаты. В случае проблем с обновленной системой я просто прописываю в fstab старый снапшот и загружаюсь в гарантированно рабочую систему.

У меня нет /etc/fstab, так что в случае невозможности работы решает zfs rollback <снапшот системы>. ;)

iZEN ★★★★★
()
Ответ на: комментарий от 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)
Ответ на: комментарий от vertexua

А swap как примонтирован?

Вот так:

% zfs create -V 256M roxy/swap
% zfs set org.freebsd:swap=on roxy/swap
% zfs set checksum=off roxy/swap
% swapon /dev/zvol/roxy/swap
% swapinfo
Device          1M-blocks     Used    Avail Capacity
/dev/zvol/roxy/swap       256        0      256     0%

Нужно ли в FreeBSD монтировать /dev или /proc, что-то подобное?

Нет.

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

Не, я не могу привести пруфов, может все ок. Я просто где-то это видел. Может уже не актуально

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

Еще есть вопрос, обязательно ли экспортировать пул при выключении компьютера? Дело в том что это пытается делать ZFSOnLinux. Он потом не может его импортировать если не смог экспортировать или был просто жестко выключен. Нужно руками сделать zfs export, zfs import -f. Это костыли или штатная работа? Мне это кажется странным

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

Прописываю этот обновлённый снапшот в fstab.

Не слышал о таком, чтобы в снапшоты можно было что-то писать. Снапшот — это «замороженное» состояние файловой системы. Наверное, у тебя реализуется один из механизмов объединения (union) новых данных с данными из снапшота, когда новые файлы «затеняют» файлы примонтированного снапшота.

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

При завершении работы операционной системы все импортированные пулы должны ШТАТНО экспортироваться.

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