Почему изменения, внесённые в chroot Debian Live образа (например, добавление пользователя или отключение сети), не сохраняются после загрузки?
При работе с Debian Live образами часто возникает необходимость внести изменения — добавить нового пользователя, отключить сеть, установить дополнительные пакеты и так далее. Для этого разработчики и системные администраторы часто используют метод chroot, чтобы попасть внутрь файловой системы образа и выполнить необходимые настройки. Однако после перезагрузки и запуска изменённого Live образа многие замечают, что внесённые изменения не сохранились. В этой статье рассмотрим причины такого поведения и возможные способы решения.
Особенности Live образов Debian
Debian Live — это особый тип образа, предназначенный для запуска операционной системы с "живого" носителя (флешки, диска) без установки на жёсткий диск. Главная его особенность — файловая система часто реализована в виде read-only (только для чтения) или использует технологии вроде OverlayFS, которые накладывают изменения в оперативной памяти поверх базового образа. После перезагрузки такие изменения теряются, так как базовый образ остаётся неизменным.
Почему изменения в chroot не сохраняются?
Когда вы используете chroot для входа в файловую систему Live образа, на самом деле вы работаете с распакованным или директории монтированной файловой системой, но:
- Изменения, внесённые в Live образ на этапе chroot, часто происходят в временной, не смонтированной части с компрессией или squashfs-образы. Эти форматы сжаты и не предусматривают изменение в рабочем режиме.
- Неправильное обновление исходного filesystem.squashfs: если вы не пересобираете squashfs с внесёнными изменениями, то Live образ будет использовать старую версию файловой системы.
- Механизмы загрузки Debian Live используют OverlayFS или tmpfs для наложения слоёв изменений в оперативной памяти. Это значит, что даже если изменения загружены в overlay, они не записываются обратно в образ.
Как сохранить изменения в Debian Live образе
Для того, чтобы изменения в chroot сохранились и были видны при следующей загрузке, необходимо:
- Извлечь squashfs образ: распакуйте filesystem.squashfs в отдельную директорию.
- Войти в chroot в эту распакованную систему и внести изменения: добавить пользователей, настроить сеть, установить пакеты.
- Пересобрать squashfs с внесёнными изменениями: после завершения работы необходимо создать новый squashfs образ, который будет содержать все сделанные изменения.
- Обновить загрузочный ISO, используя новый squashfs образ: убедитесь, что сборка ISO использует модифицированный squashfs.
Заключение
Изменения, сделанные внутри chroot в Live Debian образе, не сохраняются после перезагрузки, потому что базовый образ чаще всего записан в сжатом формате (squashfs) и используется с механизмами типа overlay, которые не перезаписывают базовые файлы. Для сохранения изменений нужно извлечь, изменить и пересобрать squashfs образ, а затем создать новый загрузочный ISO. Следуя этим рекомендациям, можно создавать кастомизированные Debian Live образы с сохранёнными настройками.