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 ()

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

ZFS пофиг на эти флаги.

С oflag=nocache кеш ZFS используется, кеш VFS - нет. Так что почти что пофиг :-)

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

Да. Кто-то должен подключить пул(не том, именно пул). В ядре этого кода нет(по крайней мере пока), и судя по лицензионным теркам, вряд ли будет.

Pinkbyte ★★★★★ ()

Ох, забыл про шрифт спросить. Шрифт в студию.

pikwik ★★ ()

Это ты у меня Хироши Кано в гуглоплюсе?

Твои темы оформления вечно радуют.

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

Btrfs после опробования ZFS(даже еще не до конца портированной) кажется аутсайдером.

Он не кажется, он и есть аутсайдер. Мне не ясно, зачем ораклу они обе, было бы лучше перелицензировать zfs и завоевывать спокойно себе своим oracle linux серверный рынок.

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

Хм. Когда последний раз проверял после выключения дедупликации и tar/untar всех данных на томе(не пуле, у меня только один том с дедупликацией), dedup ratio стал 1.0(то есть дедупликация таки отключилась). zfs destroy не делал

А на новых томах после этого проверял?

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

А что это?

В man zpool есть определения.

DESCRIPTION
       The  zpool  command  configures	ZFS storage pools. A storage pool is a
       collection of devices that provides physical storage and data  replica-
       tion for ZFS datasets.

       All  datasets  within  a storage pool share the same space. See zfs(1M)
       for information on managing datasets.

   Virtual Devices (vdevs)
       A "virtual device" describes a single device or a collection of devices
       organized  according  to certain performance and fault characteristics.
iZEN ★★★★★ ()

:) Я пока пытаюсь выживать на btrfs, кстати за секретные материалы спасибо, будет что посмотреть после Star Gate ^_^

dedsy ★★ ()

Ты крут, реально =) Ток темновато.

GreenBag ★★ ()

угадай юзера по скриншоту

Stil ★★★★★ ()

подозреваю, что ты - студент, у которого море свободного времени...счастливый человек!

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

завоевывать спокойно себе своим oracle linux серверный рынок.

ZFS далеко не беспроблемна даже на санах. Которые сами от лидерства все дальше и глубже.

scott_tiger ★★★ ()

Еще бы рассказал про оформление. Что где и как...

unkn0wn ()

Я, попробовав раз снапшоты ещё в Btrfs, так и не смог от них отказаться.

А можно кратко (или не очень кратко) рассказать о плюшках снапшотов?

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

А можно кратко (или не очень кратко) рассказать о плюшках снапшотов?

Ставишь фрю, делаешь снапшот.
Сносишь, ставишь генту, делаешь снапшот.
Сносишь генту, ставишь соляру, делаешь снапшот.

Потом из загрузчика выбираешь снапшот и бутаешься в нужную ОС.

;)

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

на сколько в процентном соотношении происходит деградация по скорости?

Лаги мощные точно, а вот в % не скажу.

tazhate ★★★★★ ()

Тоже секретные материалы чтоли посмотреть..

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

Весьма доходчиво, спасибо.

Это юзкейс из разряда фантастики, конечно. Но их придумать можно массу, работа с ними в zfs сделана очень хорошо. Любой снапшот ты можешь смонтировать и подключить куда угодно, и потом писать и делать с ним что угодно.

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

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

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

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

Да, тоже весьма хороший пример юзкейса. Спасибо.

andreyu ★★★★★ ()

Ну что же я рад за линукс у которого появилась нормальная фс и действительно кроссплатформенная.

Жаль в ядро никогда не примут.

Ygor ★★★★★ ()
Последнее исправление: Ygor (всего исправлений: 1)

Скинь пожалуйста цветовую схему, мне очень понравилось.

CRASH ()

Что за тема плазмы, окон и цветовая схема?

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

да. dedup ratio не растет. Повторяю - я включал дедупликацию на одном томе, не на всём пуле. Может если включать именно на пуле, тогда будет такая борода, но я не пробовал - dedup очень специфичная вещь и глобально она ИМХО включенной не нужна

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)

Скрин страшен до ужаса. Чёрный как сволочь.

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

Сложно сказать. Если прилетит какой-нибудь тяжеляк вроде LibreOffice или Firefox, то и часом не отделаешься. А так - обычно минут 20-30.

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

А сколько времени на нынешних железяках обновление генты занимает?

Что есть обновление? Кеды целиком? Часа 4ре на i5.

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

Я про то, что это дофига слишком.

А, ну я хз :)
Слишком много влияющих вещей.

tazhate ★★★★★ ()

Стоит отметить, что весьма кошерное оформление у тебя!

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

Что есть обновление? Кеды целиком?

Ну, можно и так.

Спасибо за ответы.

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

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

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