Установка Arch Linux на ZFS всегда была не очень тривиальным делом: нужно знать много тонкостей, прочитать кучу статей и различные вики, разобраться с флагами создания датасетов и пула, с конфигурацией initramfs и с тем, какие systemd сервисы стоит включать, с параметрами командной строки ядра и правильными конфигами. Если ставить вручную, то установка занимает целый вечер, с вдумчивым раскуриванием мануалов перед черной консолью. (Небольшой лайфхак: если у вас есть второй компьютер, гораздо приятнее ставить арч с него, подключившись к таргету по ssh, именно из‑за возможности копипастинга команд).
Несколько лет назад я начал работать над автоматизацией этого процесса: написал несколько скриптов на bash, которые делают всё за меня. Это было не очень стабильно: они периодически ломались, гибкостью настройки там и не пахло: скрипт был жёстко прибит к моей конфигурации, и когда кто‑то из друзей просил помочь с установкой Arch Linux на ZFS, обычно я просто делал новую ветку репозитория, подстраивая скрипт под нужную конфигурацию. Всё изменилось зимой прошлого года, когда мне захотелось в очередной раз поставить чистую систему для экспериментов на новый SSD. Я всерьез задумался о новом установщике, который предоставлял бы гибкое меню с конфигурацией в виде TUI. У меня была идея написать инструмент с нуля на Rust, используя ratatui, но масштаб работы для написания гибкого и надёжного проекта, сравнимого по функционалу с archinstall, начал меня немного пугать. Следующей мыслью было попробовать форкнуть archinstall. В процессе чтения его исходного кода и документации я понял: мне не нужно его форкать, я могу использовать его как библиотеку.
Так и родился archinstall_zfs — установщик, который использует archinstall как библиотеку, но при этом переопределяет ключевые компоненты. Я взял от archinstall то, что работает хорошо: TUI компоненты (SelectMenu, EditMenu), систему конфигурации, установку пакетов. Но разметку диска пришлось делать с нуля — archinstall просто не умеет работать с ZFS. Поэтому я написал свой DiskManager, который через sgdisk создаёт нужные разделы, а также GlobalConfigMenu — полностью кастомное меню вместо стандартного. А для самой установки создал ZFSInstaller, который наследует от archinstall.Installer, но умеет работать с ZFS‑специфичными пакетами и конфигурацией.

Получилось именно то, что я хотел: гибкий TUI‑интерфейс, где можно выбрать нужные параметры, а всю грязную работу инструмент сделает сам. Теперь установка Arch на ZFS занимает не вечер с мануалами, а 15–20 минут с чашкой чая.
Но прежде чем рассказывать о возможностях установщика, давайте разберёмся, почему вообще стоит заморачиваться с ZFS.
Почему ZFS?
ZFS — это не просто файловая система, это целая философия управления данными. Представьте, что вы обновили систему, что‑то сломалось, и теперь не загружается графическая оболочка. С обычной файловой системой вы бы лезли за LiveUSB, arch‑chroot, диагностика, исправление неполадок. Либо, если вы новичок, то дело может дойти до переустановки. С ZFS, снэпшотами и ZFSBootMenu вы просто перезагружаетесь, выбираете предыдущее состояние системы из меню и продолжаете работать. А потом спокойно разбираетесь, что пошло не так.
Или другой пример: хотите попробовать Wayland вместо X11? Создаёте клон текущего датасета, загружаетесь в него, экспериментируете. Не понравилось — откатились за секунду. Никаких «ой, а как же вернуть как было».
Кроме того, если у вас есть домашний сервер с ZFS, вы можете отправлять туда инкрементальные снепшоты время от времени
Три режима установки
Я долго думал, какие сценарии установки нужно поддержать. В итоге получилось три основных режима:
1. Full Disk — для тех, кто хочет отдать весь диск под ZFS. Тут я реализовал полную автоматизацию разметки через sgdisk. Установщик сначала очищает GPT и MBR сигнатуры (привет, проблемы с остатками старых разделов!), затем создаёт свежую GPT таблицу и нарезает разделы: EFI‑раздел на 500MB, опционально swap‑раздел в конце диска, а всё остальное — под ZFS.
2. New Pool — для dual‑boot сценариев. У вас уже есть Windows на первой половине диска? Не проблема! Укажите свободный раздел, установщик создаст на нём ZFS pool и установит туда систему. EFI‑раздел можно использовать существующий или создать новый.
3. Existing Pool — моя любимая фича! У вас уже есть ZFS pool с данными или другими системами? Установщик создаст новый boot environment и установит туда свежий Arch, не трогая существующие данные. Идеально для экспериментов и мультибута разных дистрибутивов.

Кто такие эти ваши Boot Environments?
Boot Environments (BE) — это способ держать несколько независимых систем на одном ZFS‑пуле. Каждая система размещается в своём корневом датасете и выбирается при загрузке через ZFSBootMenu. Для мультибута вы можете поставить несколько дистрибутивов в один пул — каждый станет отдельным BE.
Реальный пример с моего ноутбука (с комментариями):
❯ zfs list
NAME USED AVAIL REFER MOUNTPOINT
novafs 1.09T 361G 192K none
# Текущий активный BE "arch0" (контейнер, сам не монтируется)
novafs/arch0 609G 361G 192K none
novafs/arch0/data 421G 361G 192K none
novafs/arch0/data/home 421G 361G 344G /home # /home датасет для arch0
novafs/arch0/data/root 120M 361G 45.3M /root # данные пользователя root текущего BE
novafs/arch0/root 170G 361G 142G / # корневая ФС активного BE
novafs/arch0/vm 18.8G 361G 18.8G /vm # отдельный датасет для VM
# Предыдущий BE "archold" (не активен, но готов к загрузке)
novafs/archold 227G 361G 192K none
novafs/archold/data 143G 361G 192K none
novafs/archold/data/home 141G 361G 119G /home # /home датасет для archold
novafs/archold/data/root 1.81G 361G 1.81G /root # данные root второго BE
novafs/archold/root 83.7G 361G 83.7G / # корень второго BE
# Глобальные датасеты (вне BE, монтируются всеми boot environments)
novafs/tmp_zfs 7.08G 361G 7.08G /tmp_zfs # временные данные
ZFSBootMenu — загрузчик, который понимает ZFS
Забудьте про GRUB с его костылями для ZFS. ZFSBootMenu — это загрузчик, созданный специально для ZFS. В отличие от традиционных загрузчиков, он нативно понимает структуру ZFS и может показывать список boot environments в красивом ncurses‑меню, делать снапшоты и клонировать boot environments прямо при загрузке. Нужно откатиться на снапшот недельной давности? Просто выбираете его из меню, и система загружается именно в том состоянии. Хотите поэкспериментировать, не ломая текущую систему? Клонируете boot environment прямо из загрузчика и загружаетесь в копию. Интересный факт: на самом деле этот загрузчик — это полноценный Linux, который при загрузке загружает вашу систему использую системный вызов kexec.
Нативное шифрование ZFS
Поддерживается нативное шифрование ZFS без необходимости в LUKS‑контейнерах — ZFS шифрует данные сам. При этом доступны следующие варианты:
Без шифрования.
Шифрование всего пула (зашифрованы все датасеты включая корневую систему)
Шифрование отдельного boot environment
В текущей версии поддерживаются только plain text ключи (пароли), без более сложных схем аутентификации. За расшифровку отвечает хук zfs в initramfs, который запрашивает пароль на ранней стадии загрузки.
Dracut vs mkinitcpio — выбор за вами
Arch традиционно использует mkinitcpio для создания initramfs. Но я предпочитаю dracut — его хук zfs лучше работает с нативным шифрованием ZFS. Установщик поддерживает оба варианта, и тут есть интересные технические детали.
Для mkinitcpio я добавляю хук zfs в нужное место (после keyboard, но до filesystems), прописываю правильные модули. А вот с dracut пришлось повозиться больше: нужно было написать собственные pacman хуки, которые автоматически пересобирают initramfs при обновлении ядра. Стандартные хуки пакмана не подходят — они не знают про dracut.
Загрузка и boot environments: ZFSBootMenu, zfs‑mount‑generator и кастомный ZED‑хук
Коротко о том, как устроена загрузка:
В качестве загрузчика используется ZFSBootMenu: при выборе boot environment он запускает ядро Linux через системный вызов kexec и передаёт параметры командной строки ядра.
Корневая ФС монтируется хуком zfs в initramfs, согласно параметру командной строки: с dracut это
root=ZFS=...
, с mkinitcpio — черезzfs=...
Остальные датасеты монтируются уже systemd»ом через
zfs-mount-generator
, который читает/etc/zfs/zfs-list.cache/<pool>
и на лету генерирует unit‑файлы. Примечание: использованиеzpool.cache
считается устаревшим и не рекомендуется Arch Wiki, поэтому был выбран подход сzfs-mount-generator
Проблема BE в том, что «по умолчанию» ZFS видит все датасеты пула, из‑за чего systemd может попытаться примонтировать чужие файловые системы (например, /home
из соседнего boot environment). Это решает мой кастомный ZED‑хук history_event-zfs-list-cacher.sh
: он отслеживает события ZFS, определяет активный boot environment, фильтрует датасеты (оставляя только датасеты, принадлежащие текущему BE и общие вроде pool/tmp_zfs
) и атомарно обновляет кеш. Скрипт сделан иммутабельным (chattr +i
), чтобы обновления не затирали его.
Swap, ZRAM и ZSWAP
Можно вовсе обойтись без swap, можно включить ZRAM — это сжатый swap в RAM через systemd-zram-generator
, и в этом режиме я специально отключаю zswap. По умолчанию используется zram-size = min(ram / 2, 4096)
в /etc/systemd/zram-generator.conf
.
Если нужен классический swap на диске — выбирайте режим «ZSWAP + swap‑раздел»: zswap включается, а сам swap живёт на отдельном разделе. При полном стирании диска задаёте размер раздела под swap; в остальных сценариях просто выбираете существующий раздел в TUI. Для незашифрованного варианта установщик делает mkswap
и явно добавляет строку с UUID=
в /etc/fstab
(genfstab не включает неактивный swap). Для шифрованного — прописывает cryptswap
через PARTUUID
в /etc/crypttab
и монтирует /dev/mapper/cryptswap
в fstab
.
Примечание: swap на ZFS (zvol/swapfile) не поддерживается — см. раздел ArchWiki «ZFS → Swap volume». Гибернация в текущем релизе тоже не поддерживается.
Валидация совместимости ядра и ZFS
Одна из ключевых проблем при работе с ZFS на Arch — совместимость версий ядра и модулей ZFS. Precompiled модули ZFS в репозитории archzfs часто отстают от последних версий ядра, а DKMS может не компилироваться с bleeding‑edge ядрами.
Для решения этой проблемы я написал систему валидации, которая определяет диапазон совместимых ядер для текущей версии ZFS. Система работает следующим образом:
Парсит release notes на https://github.com/openzfs/zfs/releases для определения поддерживаемых версий ядра
Сопоставляет эти данные с актуальными версиями ядер (linux, linux‑lts, linux‑zen) в репозиториях Arch
Проверяет доступность precompiled ZFS модулей для каждого ядра
Анализирует возможность DKMS‑сборки с конкретными версиями ядра
Предупреждает о потенциальных проблемах и предлагает альтернативы
Эта валидация используется в двух местах:
1. В установщике — при выборе ядра показываются только совместимые варианты
2. При сборке ISO — скрипт iso_builder.py
автоматически проверяет совместимость перед созданием образов
Как это выглядит на практике?
Процесс установки сводится к нескольким простым шагам — выберите удобный способ запуска установщика:
Вариант A: готовый ISO (рекомендуется)
Скачать последний ISO из релизов проекта, ( https://github.com/okhsunrog/archinstall_zfs/releases ) загрузиться в режиме UEFI. Примечание: если вы используете Ventoy, при выборе образа нужно выбрать GRUB2 режим загрузки.
Подключить сеть.
Запустить установщик:
./installer
# или
cd /root/archinstall_zfs && python -m archinstall_zfs
Вариант B: официальный Arch ISO (Этот вариант занимает больше времени из‑за установки ZFS модулей в ISO.)
# 1) Загрузитесь с официального Arch ISO и подключите сеть
pacman -Sy git
# 2) Получите установщик
git clone --depth 1 https://github.com/okhsunrog/archinstall_zfs
cd archinstall_zfs
python -m archinstall_zfs
Далее в TUI пройдите короткий визард: выберите режим установки → диски → имя пула → параметры системы. После подтверждения установщик автоматически настроит ZFSBootMenu, подберёт совместимую связку ядро/ZFS, соберёт initramfs (dracut или mkinitcpio) и включит необходимые сервисы ZFS. В конце — предложение зайти в chroot и перезагрузка в свежий Arch на ZFS.
Подробнее о коде
Всё написано на Python 3.13+ с использованием archinstall как библиотеки, но архитектуру пришлось делать с нуля. Стандартные меню archinstall не подошли — сделал своё, чтобы контролировать весь процесс установки. Для разметки диска тоже реализовал отдельный класс, потому что archinstall не умеет работать с ZFS.
Установка ZFS идёт через собственный класс (наследник archinstall.Installer): он добавляет нужные пакеты, правильно собирает initramfs (dracut или mkinitcpio) и учитывает все нюансы ZFS. Валидация совместимости ядра и ZFS вынесена в отдельный модуль — он парсит репозитории, релизы ZFS и проверяет, что всё совместимо. Для конфигов используется Pydantic, чтобы не было магии с dict'ами.
Профиль для ISO собирается через шаблоны Jinja2 — так проще поддерживать разные варианты (DKMS или precompiled модули, разные хуки и сервисы, разные наборы пакетов включаются условно). Всё максимально типизировано, чтобы не ловить баги на ровном месте.
Сборка ISO: just, Justfile и Jinja2
Сборочные сценарии полностью оркестрируются через just
(рецепты описаны в justfile
). Это позволяет быстро собирать разные варианты ISO и управлять параметрами сборки.
# Посмотреть доступные команды:
just --list
# Релизные ISO (полный набор пакетов)
just build-main pre # Precompiled ZFS + linux-lts (рекомендуется)
just build-main dkms linux # DKMS + linux
just build-main dkms linux-lts # DKMS + linux+lts (самый надёжный вариант, если версии пакетов zfs и ядер рассинхронизированы)
# Ускоренные сборки для разработки (минимальный набор пакетов)
just build-test pre # Минимальный пакетный набор + precompiled ZFS
just build-test dkms linux-zen # Минимальный пакетный набор + DKMS + linux-zen
just list-isos # Показать собранные ISO
Ключевые различия между build-main
и build-test
:
build-main
— создаёт релизные ISO с полным набором пакетов (включая диагностические инструменты, сетевые утилиты, редакторы и т. д.). Используетsquashfs
для сжатия, что даёт меньший размер ISO.build-test
— создаёт тестовые ISO с минимальным набором пакетов (только базовые утилиты и установщик). Используетerofs
для более быстрого сжатия, отключает таймауты загрузки и включает вывов в serial console для удобства загрузки в qemu, автоматически поднимает ssh и разрешает логин от рута. Идеально подходит для быстрого тестирования изменений в установщике в qemu.
Профиль archiso
генерируется из шаблонов на Jinja2, что даёт гибкую конфигурацию без копипасты:
-
Переменные шаблонов:
kernel
— целевой вариант ядраuse_precompiled_zfs
/use_dkms
— способ установки ZFSinclude_headers
— включать ли headers для ядра—
fast_build
— минимальный пакетный набор для быстрых тестов
-
Ключевые шаблоны:
packages.x86_64.j2
— список пакетовprofiledef.sh.j2
— метаданные ISO, флаги сборки, разрешения файловpacman.conf.j2
— конфигурация репозиториев
Скрипт iso_builder.py
формирует профиль ISO на основе этих шаблонов и параметров, а результаты складываются в gen_iso/out/
. Сами профильные файлы, сервисы и хуки лежат в gen_iso/profile/
.
Дополнительные возможности установщика
Сжатие ZFS (настраиваемо): выбор алгоритма в TUI —
off
,lz4
(по умолчанию),zstd
,zstd-5
,zstd-10
. Выбранное значение применяется на уровне пула/датасетов и наследуется, а в initramfs отключается лишняя компрессия, чтобы избежать двойного сжатия.zrepl: генерация
/etc/zrepl/zrepl.yml
с снапшотами каждые 15 минут и ретеншеном4×15m (keep=all) | 24×1h | 3×1d
.AUR‑интеграция: установка пакетов из AUR через временного пользователя (
aurinstall
), установка хелпераyay-bin
. В меню доступен пункт, где можно указать список своих AUR‑пакетов, которые будут автоматически установлены.
Что ожидать в следующем релизе?
Поддержка Secure Boot (подпись ZFSBootMenu, управление ключами)
Локальная сборка ZFSBootMenu, используя системное ядро и dracut / mkinitcpio, вместо готовых EFI‑файлов, для большей кастомизации
Более умная генерация hostid (на основе имени хоста)
Возможно, добавлю русскую локализацию, если будет интерес
Пара слов о CI
За сборку отвечает GitHub Actions: раз в месяц он автоматически собирает свежие образы, а ещё он запускается при пуше нового тега и формирует релиз с ISO‑образами в качестве артифактов. Перед сборкой пайплайн проверяет совместимость: сначала пробует предсобранные ZFS‑модули, и если версии не совпадают, автоматически переключается на DKMS. Благодаря этому образ с linux-lts
получается практически всегда, а linux
в редких случаях, если текущая версия ядра ещё не поддерживается проектом OpenZFS, просто пропускается.
ZFS — это мощный инструмент, но сложность её настройки отпугивает многих. Я надеюсь, что archinstall_zfs сделает эту файловую систему доступнее для обычных пользователей Arch Linux. Больше не нужно быть гуру, чтобы получить все преимущества ZFS — снапшоты, boot environments, компрессию и надёжность.
Проект активно развивается, поэтому баги возможны. Но я сам использую его для всех своих установок и пока полёт нормальный:)
Если у вас есть идеи по улучшению или вы нашли баг — welcome в issues на GitHub! А если проект оказался полезным — поставьте звёздочку, это мотивирует развивать его дальше.
Так же приглашаю заглянуть в мой телеграм‑канал Okhsunrog's Logs: никакой рекламы, только технические заметки про Rust, Linux, Embedded, отчёты про прогресс моих текущих опенсорсных проектов, и конечно же, мемы.
Комментарии (23)
andreymal
30.08.2025 20:21это целая философия управления данными
Справедливости ради стоит отметить, что аналогичная философия применима и к btrfs, в который archinstall умеет из коробки
okhsunrog Автор
30.08.2025 20:21Тут справедливо, конечно, но снэпшоты - не единственное преимущество ZFS. Можно упомянуть нативное шифрование, RAID, удобнейшие консольные инструменты, продвинутый кэш ARC. Не знаю, насколько сейчас надёжна btrfs в плане хранения информации, у меня в 2020 как-то посыпалась btrfs из-за принудительного выключения ноута, никакой CoW, который там, по идее, должен был быть, не помог. Я пробовал по гайдам различным восстанавливать файловую систему, так и не смог восстановить. После того случая ушёл на ZFS
aakptz
30.08.2025 20:21У btrfs есть ряд функциональных ограничений. Возможно они для вас не принципиальны, но важны для других. Тут кстати хорошее сравнение ZFS с другими ФС. https://github.com/ankek/awesome-zfs/blob/main/comparison_table_2.md
IMHO для себя я сделал выбор в пользу ZFS. Это спасало меня и мои данные не один раз.
Mr-Arceni
30.08.2025 20:21Спасибо за установщик, попробую его. Давно мечтал уменьшить количество геморроя при установке Arch на ZFS.
Однако для меня главной проблемой оставалось обновление ядра и zfs. Может это я где-то намудрил фигни... Но у меня получалось так, что ZFS пакеты зависели от ядра, а ядро от ZFS пакетов, и я не мог обновить ни то ни другое из-за этого нормальным способом. Один раз только из Live среды, я тупо сносил ядро с zfs и ставил заново. Может что-то упускаю, и так делать ненормально?
okhsunrog Автор
30.08.2025 20:21Я не сталкивался с таким, ядро обычно никак не зависит от zfs-пакетов, только zfs пакеты зависят от ядра. Но на всякий случай подскажу: если нужно удалить пакеты, которые циклически друг от друга зависят, можно в команду pacman -Rns указать весь список пакетов, а не по одному удалять, так они все удалятся разом. Второй лайфхак (но так лучше не делать, не рекомендую) - добавить флаг -dd , тогда он не будет проверять, кто завит от этого пакета, и удалит его принудительно.
Сам я сижу на linux-lts ядре и zfs-dkms пакете (можно из AUR, можно из archzfs репозитория, как я делаю), не знаю никаких проблем при одновлениях, это самая стабильная комбинация.
Если есть желание - можем в личке подробно пообщаться на эту тему, у меня в профиле есть контактная информацияuvelichitel
30.08.2025 20:21"Сам я сижу на linux-lts ядре и zfs-dkms пакете (можно из AUR, можно из archzfs репозитория"
Да ядро то накатывается, ему то че)) Вы совершенно правы, ядро обновляется вне зависимости от сторонних модулей. Только вы остаетесь без файловой системы))
stable lts ядро убивает весь вкус arch) Сторонние репо (AUR, archzfs) избавляют от всяких гарантий. Ну вот какой смысл опаздывать за ядром и при этом не иметь гарантий сборки?) ZFS по лицензионным соображениям не поддерживается разработчиками ядра и драйверы openzfs опаздывают за свежими релизами ядра. В текущем году запаздывание усугубилось и на моей машине мне пришлось откатить назад даже linux-lts в ожидании драйверов.(zfs-dkms не компилировалось пару месяцев в этом году даже с lts. Причем откатываться то пришлось как раз Live флешкой, я оставался без файловой системы. А live флешка что бы сделать arch-chroot в zfs тоже должна была быть zfs capable, ее еще нужно было поискать/сделать)
Вывод -- на двух стульях не усидеть. Если хотите bleeding-edge от arch ставьте / root на родной ext4 (ну пусть xfs, чтобы не как у всех) А уж эксперименты разворачивайте на остальных физических дисках, да и подмонтируйте куда хочется(пусть даже и в /home)
zfs мне понравилось, снепшоты на удаленный диск и инкрементально, виртуальные разделы, виртуальные рейды (хоть параллельно диски хоть последовательно), скорость, чистка. Не понравилось -- не работает команда df и вообще трудно понять сколько свободного диска)) Но, блин, на мой взгляд, модернистская стратегия arch не рифмуется с запаздыванием разрабов openzfs.
TL.DR: Root лучше на классике) А то ой)okhsunrog Автор
30.08.2025 20:21В этом году? Мне кажется, маловероятно. zfs-2.2.7, релизнувшийся в декабре, уже поддерживал 6.12, нынешний LTS.
Доводы адекватные, конечно, но для меня плюсы перевешивают :)
А вместо df можно использовать zpool list / zfs list
И странно представить ситуацию, чтобы пришлось загружаться с LiveUSB для починки, там же будет видно при обновлении, что dkms модули не установились. Если уж проморгали как-то и перезагрузились – на этот случай есть снэпшоты и ZFSBootMenu. Прямо из ZFSBootMenu можно откатить и спокойно загрузиться.
uvelichitel
30.08.2025 20:21"Прямо из ZFSBootMenu"
Я гружусь из uefi-boot материнки. Без grub, вообще без загрузчика. Весь диск форматирован zfs, без загрузочных секторов, просто раздел /boot. В ZFSBootMenu не заходил. Где это?)) Какие кнопицы зажать?))okhsunrog Автор
30.08.2025 20:21Я советую сделать так: /boot сделать не отдельным разделом, а просто директорией в рутовом датасете, который монтируется в /
А boot раздел превратить в EFI раздел и закинуть туда EFI файл ZFSBootMenu, который можно скачать здесь: docs.zfsbootmenu.org
Таким образом, вся система лежит целиком на ZFS, включаю boot. Не стоит его делать отдельным разделом, пусть просто лежит директорией в рут. А чтобы в UEFI появилась опция ZFSBootMenu, нужно просто добавить в UEFI запись с помощью утилиты efibootmgr.
ZFSBootMenu – это один EFI файлик, он будет грузиться напрямую из UEFI, сканировать ZFS пулы, импортировать, искать там ядро / initramfs и загружать. Подробнее советую прочитать в документации ZFSBootMenu, там очень хорошо написано :)
uvelichitel
30.08.2025 20:21Именно zfs-2.2.7 и 6.12 модулей dkms и пришлось подождать. Вы совершенно правы. Еще была ветка на AUR 2.2.5 с постфиксом dev Или что то вроде того)) Типа волонтеры development branche openzfs))
okhsunrog Автор
30.08.2025 20:21Да, бывает и такое) Но бывает и как сейчас: последняя версия ZFS поддерживает ядро 6.16.
В целом, обычно разработчики ZFS не гонятся со всех ног выпускать новый релиз сразу после релиза нового ядра. Новый релиз выходит тогда, когда становится готов набор пул реквестов, которые они хотят видеть в этом релизе, там свой график.
А вообще, да, есть энтузиасты, которые к последней стабильной версии ZFS добавляют cherry-pick патчи для поддержки наипоследнейшего и новейшего ядра, когда ZFS отстаёт. Тоже видел такие пакеты в AUR
okhsunrog Автор
30.08.2025 20:21Дополню на всякий случай про Live флешку с ZFS. ISO можно взять тут: https://github.com/stevleibelt/arch-linux-live-cd-iso-with-zfs/releases
Либо в релизах моего репозитория, там тоже автоматическая сборка ISO с ZFS: https://github.com/okhsunrog/archinstall_zfs/releases
Ещё можно собрать такой ISO самому, в README моего проекта есть инструкции.
uvelichitel
30.08.2025 20:21Ага) И причем лучше сделать эту флешку прямо сейчас) А то потом, перед черным экраном, будет скушновато) Или искать у приятелей -- у кого есть рабочая *nix система с командой dd (а такая система есть не у многих приятелей) чтобы live image таки сделать))) А в идеологии arch такая флешка может и понадобиться))
okhsunrog Автор
30.08.2025 20:21Ещё раз: если у вас есть ZFSBootMenu, никакой LiveUSB не понадобится. ZFSBootMenu это сам по себе маленький Линукс.
Оттуда можно как откатить систему к прошлому снэпшоту, так и сделать chroot, поменять что нужно в системе. Есть ещё более жирный образ ZFSBootMenu Recovery, я предпочитаю им пользоваться вместо стандартного. Там богатый набор утилит, которые могут понадобиться при восстановлении системы.
Но я так и не пользовался этим. Просто через zrepl настроил снэпшоты раз в час. Если что-то пошло вдруг не так – я всегда из ZFSBootMenu могу парой нажатий кнопок откатить корневой датасет к тому состоянию, в котором он был час, или два часа назад, к примеру.
useribs
30.08.2025 20:21Очень интересно, спасибо! Раз уж преисполнились zfs, не тестировали случайно работу direct io с nvme? В предыдущих версия несмотря на primarycache=metadata и secondarycache=metadata все всеравно проходило через code path для ARC. Сейчас нет доступа к свободному железу с nvme, в общем 2.3 не успел протестировать. При многопоточной нагрузке раньше все было печально с загрузкой CPU и iowait, никакие настройки async очередей для чтения записи не помогали (точнее помогали плохо). Обсуждение: https://github.com/openzfs/zfs/pull/10018
aakptz
30.08.2025 20:21Интересный кейс. Можно увидеть вашу конфигурацию? И ещё типовой сценарий работы с данными? ARC это виртуальный кэш в оперативке. Быстрее RAM ничего в вашем компьютере/сервере нет. Помогает с горячими данными на чтении. Secondary cache это самый быстрый из блочных устройств. Обычно nvme ssd. Туда вытесняют теплые данные, чтобы в тащить в ARC если нужно. Но это все помогает при интенсивном чтении. При интенсивной записи кэш на чтение прироста не даёт. Тут важнее конфигурация zpool. Raidz и dRAID это аналоги Raid5. Медленная запись, быстрое чтение. Для интенсивной записи лучше выбрать stripe или mirror. Сравнение различных конфигураций есть тут
https://github.com/ankek/awesome-zfs/blob/main/zfs-raid-comparison.md
useribs
30.08.2025 20:21Уже там не работаю). Это был просто один nvme, без всяких raid{x}. Типовой сценарий виртуалки (zvol's), volblocksize 16k, при генерации нагрузки с fio были совершшенно неадекватные показатели l.avg, iowait, в реальном кейсе при одновременной миграции нескольких вм (4) на сетке даже в 10гбит io на уже работающих на пуле вм вставал колом. В общем-то это и подтвердилось в чистых тестах fio. btrfs на этом же железе c fio тестами показывал <10% io.wait, zfs - больше 60%. сжатие выключено, все ashift учтены ).
Наркомания про directio: https://github.com/openzfs/zfs/issues/8381#issuecomment-529174195 , в конце треда параметры которые помогли на zfs 2.x somewhat (iowait 40%), но всеравно не как btrfs на том же чистом тесте с fio. (iowait <10%)
okhsunrog Автор
30.08.2025 20:21Я бы протестировал, но у меня на единственной системе с NVMe включено шифрование диска и сжатие, мне кажется, именно они будут узким местом, а не ARC. Хотя может я и ошибаюсь, попробовать потестировать на отдельном датасете
Zavod96
Мне стали нравится статьи, в которых нихрена не понятно)
В данном случае, вероятно, патамуш я линукс никогда (пока ещё) не юзал.
Если речь о каком-то самписном мега ускорителе/упростителе, типа как я делал гуи на питоне для семерки, чтоб ваще забыть о консоли и не вводить там ничего - то круть) Удачи, чо.
Завтра попробую перечитать и погуглить.
Зы.
Похоже, все айтишники начинают с поделок для себя.
Потом приходит время, когда начинаешь делится направо и налево)
MountainGoat
Поясняю: народ хочет устанавливать системный раздел ОС на файловую систему, которую ни ядро ни загрузчик читать не умеют. Поэтому начинается цырк с подкидыванием ядру дров и запаковки их в формат, который загрузчик сможет взять с диска и дать ядру и т.д. Короче, пердолинг ради искусства.
okhsunrog Автор
Нет, немного не так.
ZFSBootMenu расшифровывает пул, если включено шифрование, отображает список boot environments (если оно единственное, можно и напрямую его грузить, без меню), там по именам файлов ищёт в root датасете по пути /boot два файла: ядро и initramfs. В этом initramfs по сути находится миниатюрная файловая система, с каталогами, рутом, утилитами базовыми. И там же, в initramfs лежат различные хуки, скрипты, и драйвер zfs. ZFSBootMenu ничего не знает ни про какой драйвер zfs и не даёт его ядру, всё что делает загрузчик - распаковывает initramfs и загружает по адресу в памяти, загружает в память ядро, и отдаёт управление ядру, при этом передавая ему параметры командной строки и указатель на область памяти, где лежит initramfs. Соответсвенно, ядро загружается, монтирует initramfs, срабатывает хук и подгружается модуль ZFS. Далее этот модуль смотрит в параметры командной строки ядра, находит, какой датасет нужно смонтировать как root, замещает initramfs уже реальным рутом, с помощью switch_root / pivot_root, и уже оттуда загружается systemd, который, в свою очередь, монтирует оставшиеся датасеты по соответствующим путям