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)

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

А если выключилось питание, то это нормально орать corrupted data и не давать доступ к файловым системам. И не грузить систему. Причем не ясно они corrupted или нет, так как export/import в recovery shell делает их опять доступнными

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

А если выключилось питание, то это нормально орать corrupted data и не давать доступ к файловым системам.

Вполне возможно, что эта специфика загрузчика операционной системы, который пытается, но не может загрузить код с некорректно отмонтирвоанной ZFS (неэкспортирован пул, пул находится в неконсистентном состоянии, повреждён и т.д.).

Выключение питания вряд ли может повредить пул, так как CoW ФС при последующем монтировании просто откатит своё состояние до корректного.

iZEN ★★★★★
()
Ответ на: комментарий от Kindly_Cat
Краткий обзор снимков ZFS

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

Снимки ZFS обладают следующими характеристиками.
■ Снимки сохраняются при перезагрузке системы.
■ Теоретически максимальное количество снимков составляет 2^64.
■ Не требуется выделенное вспомогательное запоминающее устройство. Дисковое пространство для снимков берется из того же пула устройств хранения данных, в котором размещена файловая система-источник снимка.
■ Рекурсивные снимки создаются быстро в рамках одной элементарной операции. Снимки создаются все вместе (одновременно) или не создаются вообще. Преимущество элементарных снимков состоит в том, что данные снимка всегда извлекаются в один и тот же момент времени даже из дочерних файловых систем.

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

Источник: «Руководство по администрированию файловых систем ZFS Solaris» Номер по каталогу: 820–0836–14 Апрель 2009 г.

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

Клон – это доступные для записи том или файловая система, исходное содержимое которых совпадает с набором данных, на основе которого они были созданы. Как и в случае со снимками, клон создается почти мгновенно и изначально не занимает дополнительного дискового пространства. Кроме того, можно сделать снимок клона.

Клоны могут быть созданы только на основе снимка. При клонировании снимка формируется неявная зависимость между клоном и снимком. Даже в случае создания клона в другом местоположении в иерархии набора данных исходный снимок не может быть уничтожен, пока существует клон. Эта зависимость отражена в свойстве origin. Для вывода списка таких зависимостей, если они существуют, можно использовать команду zfs destroy.

Клоны не наследуют свойства набора данных, на основе которого они были созданы. Для просмотра и изменения свойств клонированного набора данных используются команды zfs get и zfs set.

Поскольку клон первоначально совместно использует дисковое пространство с исходным снимком, значение свойства used для него равно нулю. По мере внесения изменений клон занимает все больший объем пространства. Свойство used исходного снимка не учитывает дисковое пространство, занимаемое клоном.
iZEN ★★★★★
()
Ответ на: комментарий от val-amart

отлично вывод, че.

no offence intended.

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

Если сократить нашу дискуссию, то это могло бы быть объяснением tazhate на его вопрос относительно zfs vs btrfs.

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

Осталось объяснить пользователям zfs что они ненормальные ;)

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

Т.е. чтобы сделать копию системы для обновления в chroot, мне нужно сначала сделать снимок системы, а потом клон этого снимка? Непонятно, зачем понадобилось городить такую кучу сущностей.

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

Ага, вот с этим оверлеем я и натрахался вволю. Спасибо, не нужно.

Kindly_Cat
() автор топика

Сижу и думаю: может, ну его нафиг, этот ZFS? Какие-то замороки со снимками и клонами, да ещё и память жрёт. Btrfs проще и понятнее, да и проблем никаких не было.

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

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

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

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

Может, сначала мозг отрастишь, а потом уже будешь пытаться умничать?

Может, сначала бекапы будешь делать и SAN использовать, а потом уже будешь ZFS использовать?

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

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

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

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

Мальчик, ты с какого дуба сюда рухнул? Полз бы ты отсюда.

Я понимаю Вашу точку зрения относительно моей персоны, но по существу Вам есть что сказать, или Вы оперируете только эмоционально-личностными примитивами?

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

Сижу и думаю: может, ну её нафиг, эту Gentoo? Какие-то замороки со снимками и клонами, да ещё и память жрёт. Винда проще и понятнее, да и проблем никаких не было.

Fixed.

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

Попробуйте windows 7. Если она Вам покажется слишком сложной и непонятной, попробуйте mac os или андроид. Там всё просто и работает из коробки. Не надо себя утруждать заморочками с системой. Только ненормальный человек же будет столько времени тратить на поддержку ОС, нормальные люди компьютером пользуются, а не поддерживают его работоспособность.

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

Пожалуй, в этом наши мнения действительно едины.

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

Kindly_Cat
() автор топика
Ответ на: комментарий от 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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.