zfs vs btrfs (Каков Ваш опыт использования?)

Здесь можно поговорить о чём угодно и сколько угодно.

Модератор: Модераторы разделов

Аватара пользователя
Hephaestus
Сообщения: 2350
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14,2

zfs vs btrfs

Сообщение Hephaestus » 11.01.2019 00:55

В продолжение этой темы.

В общем, пробуя создавать/настраивать lxd-контейнеры в разных видах, я перепробовал и пересмотрел кучу всякой всячины.
Контейнер я таки создал, в процессе даже родился скрипт для этой задачи...
Но остался открытым вопрос о файловой системе.
Официальная документация рекомендует использовать zfs, как наиболее продвинутый вариант.
Если нет zfs, следующим пунктом идет btrfs, затем lvm, затем dir.

Получается примерно такая картина:
Для lxd рекомендуется zfs.
lxd - это детище Canonical, базируется на образах, и в списках образов - сплошные линуксы (Ubuntu, Debian, CentOS, Fedora, ещё что-то...)
При этом, zfs в linux отсутствует (в смысле в ядре), нужно загружать отдельно.
Одновременно с этим btrfs использовать не советуют, хотя она поддерживается ядром.
Далее, в официальной документации упоминается lxd init, как способ инициализации демона.
Этот самый lxd init по дефолту подхватывает zfs (при её наличии) и создает файловый источник /var/lib/lxd/disks/default.img.
И там же, в документации говорится, что лучше не использовать для пула файловый вариант, а использовать раздел диска.
Как-то всё это слегка противоречиво, на мой взгляд.

Ну, да ладно, рекомендуют zfs - значит, возьмем zfs.
Прогнал я lxd init, он мне там насоздавал всякого (pool, dataset, storage, network, profile) и оно даже нормально взлетело. Но мне не понравились имена - все вышеперечисленные объекты имеют имя default.
И если в команде нужно указать storage pool/dataset - это будет выглядеть как default default/default.
Я решил все эти штуки создавать по отдельности, присваивая им осмысленные имена.
Сделал. Работает.
Потом оказалось, что после перезагрузки pool исчез. Нет его. Точнее, сначала выяснилось, что не загрузился модуль ядра для zfs. Потом выяснилось, что пропал pool. Это было странно, потому что поначалу это работало, хотя загрузку модуля я специально не обеспечивал.
Проверка показала, что демон lxd сам подгружает модуль zfs и импортирует свой pool.
Но это происходит успешно, только если используется файловый источник вроде /var/lib/lxd/disks/default.img
А файловый источник для lxd storage может создать только lxd init.
Командой lxd storage create не получается - она не разрешает указывать для zfs файловые источники, только источники вида pool/dataset.
А pool/dataset стабильно пропадает после перезагрузки.
Следовательно демон lxd не может загрузиться, так как пытается импортировать pool, которого нету.
Сначала я подумал, что оно пропало с концами, и попробовал создать pool с нужным именем повторно, это обеспечило загрузку lxd, но потерялось содержимое прежнего пула.
Материалы и обсуждения в Сети на тему zfs, которые мне попадались, содержали либо восторженные отзывы, как оно всё здорово, либо возражения, что оно дико тормозит, жрет память, без raid на 2-3-4 диска не имеет смысла и вообще, его нет в ядре, поэтому в любой момент всё может развалиться.
При этом вопрос "zfs pool dissappear after reboot" в Сети попадается довольно часто по самым разным поводам.

Всё это вместе взятое склонило меня к использованию btrfs, с которой заморочек в этом смысле значительно меньше.
Кроме того, /var/lib/lxd/disks/default.img с btrfs внутри можно смонтировать как образ (в отличие от zfs) - в каких-то ситуациях это может пригодиться.

Но вопрос о zfs меня всё-таки интересовал и я продолжал смотреть/читать/искать.
Ну не может же быть, чтобы пул не мог пережить перезагрузку и при этом все были довольны.
В обсуждениях с вопросом "zfs pool dissappear after reboot" в основном говорили о zpool import,
но у меня эта команда выдавала только "no pools available to import", это приводило меня к выводу, что у меня что-то всерьёз не работает. Потом поиски в man всё-таки дали свои плоды - оказалось, что можно делать импорт из кэша, а если вдруг нет кэша, можно напрямую указать директорию, где искать. К счастью файловый источник не удаляется даже при zpool destroy, и его можно импортировать обратно. Это сильно облегчает ситуацию, осталось разобраться, почему оно не импортируется при перезагрузке.

Таким образом, меня сейчас одолевают сомнения, какой вариант выбрать для контейнера: остаться с btrfs, как более простой и надёжный в смысле наличия в ядре, или всё-таки задействовать zfs, как более продвинутый, но и более рискованный.
Дилемма "zfs vs btrfs" меня занимает исключительно в связи с контейнерами, тем не менее, я прошу поделиться опытом использования данных файловых систем вообще, и в контейнерах - в частности.
Я знаю, что alv писал на тему zfs, читал у него на сайте.
Кто ещё желает поделиться историями успеха/неуспеха - милости просим.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали: