← На главную

Создаём persistent Fedora Live: извлекаем squashfs.img, собираем ext4

01.06.2026 18:02 · hackernews

Когда скачиваешь live-образ, записываешь его на флешку через dd, а после перезагрузки все установленные пакеты и настройки исчезают, причина проста: ISO9660 — это read-only файловая система, и драйвер в Linux просто не умеет писать данные. Даже если носитель перезаписываемый, VFS сразу возвращает EROFS.

Обычно это обходят с помощью OverlayFS — накладывают слой поверх RAM. Но можно использовать и настоящую записываемую файловую систему, например ext4. Проблема в том, что внутри live-ISO такой раздел изначально не предусмотрен. Остаётся либо создавать ext4-раздел вручную, либо как-то указать системе использовать его при загрузке. Только вот стандарта на этот механизм нет — каждый дистрибутив делает по-своему.

Ubuntu требует параметр ядра persistent и раздел с меткой casper-rw. Проверить, сработало ли, можно через df -h | grep cow — если cow примонтирован и его размер совпадает с вашим разделом, всё ок. Если видите casper-rw примонтированным в /var/log — вы ошиблись в слове persistent.

Debian использует параметр persistence (обратите внимание — ce, а не t) и раздел с меткой persistence, внутри которого должен лежать файл persistence.conf со строкой / union. Проверить проще: mount | grep sda3 покажет overlay.

Чтобы добавить эти параметры прямо в ISO, можно сделать хак: заменить строку в grub.cfg через sed, но длина замены должна в точности совпадать с длиной исходной строки, иначе ISO9660 сломается. Например, sed -i 's/quiet splash/persistent /' xubuntu.iso — работает, но выглядит забавно.

С Fedora всё сложнее. Её параметры: selinux=0 rd.live.overlay=LABEL=foo:/bar. Раздел должен иметь метку foo, внутри — каталог bar и обязательно ovlwork. Но в стандартном grub.cfg Fedora нет места для такой длинной строки — удалять целый пункт меню рискованно, образ может сломаться при обновлении.

Автор предлагает другой подход: извлечь из ISO файл /LiveOS/squashfs.img (это EROFS-образ, иронично названный в честь кода ошибки). Затем создать два образа — один FAT32 для UEFI и ядра с initramfs, второй ext4 с меткой Fedora-Live, в который распаковать содержимое squashfs.img. Объединить их в GPT-образ, записать на флешку. В grub.cfg достаточно трёх строк: linux /vmlinuz rd.live.image root=LABEL=Fedora-Live rw noresume и initrd /initramfs. Параметр rd.live.image нужен, чтобы systemd запустил сервис livesys и создал пользователя liveuser. Такой метод работает для любого официального спина Fedora.

Ссылки на готовые скрипты (GitHub) прилагаются — можно автоматизировать процесс и протестировать образ в QEMU с UEFI.

Читать оригинал →