Aufs: как впихнуть невпиху'емое и писну'ть неписуемое
Принцип построения любого LiveCD (в том числе Slax) — возможность «как бы записывать» на файловые системы, предназначенные только для чтения. Вот, вкратце, как это делается.
Существуют специальные файловые системы, кторые делают «бутерброд» из других файловых систем. Предположим, имеется CD-ROM, являющийся точным слепком прекрасно настроенной операционной системы. Казалось-бы, грузись с него и работай, ан нет: Linux обязательно захочет что-то куда-то записывать, логи, например в директорию /var. Чтобы обойти это ограничение, поверх read-only файловой системы «накладывается» нечто, на что можно записывать. Иногда это виртуальный диск, созданный в памяти, иногда — обычный жесткий диск и т.п. Иногда можно накладывать файловые системы слоями не только с целью записи, но и так, чтобы они корректировали друг друга. Так происходит с модулями Slax: который «лег» в «пачку» слоев последним — с того и считываются данные, несмотря на то, что файлы с точно такими же именами уже присутствовали в прежних «слоях».
Известно две подобных слоеных файловых системы: Unionfs и Aufs (Another Unionfs). Первая входит в состав ядра, но что-то я не припоминаю примеров ее использования. Вторую, наоборот, почему-то никак не включат в стандартное ядро Linux, но она очень популярна (Slax, например).
Как делать такие бутерброды? Допустим, у нас есть файловая система, доступная только для чтения, например, CD_ROM, ISO-файл, Squashfs-файл: вариантов много. Примонтируем ее куда-нибудь к временному каталогу:
Попытка выполнить
Приведет к ошибке: нельзя сюда записывать.
Примонтируем какой-нибудь пригодный для записи носитель к другой точке:
Ну, и собираем «бутерброд»
Если вы сразу после этого сравните содержимое директорий /mnt/squash и /mnt/yo_i_can_write_to_ro_fs, то разницы не будет, но в первую записывать нельзя, а во вторую можно. Более того, если выполнить те же шаги после перезагрузки, то в /mnt/yo_i_can_write_to_ro_fs будут видны все сделанные изменения.
Зачем всё это? Ну, например, уплотненные алгоритмом squashfs файлы занимают в разы меньше места, чем обычные. Накатываем сверху записываемый раздел жесткого диска — и вот вам гигантская экономия файлового пространства. Но главное даже не это. В случае краха жесткого диска (а иногда это происходит и по причине кривизны рук) мы лишаемся только изменений. Львиная же доля тщательно подобранных, настроенных и запихнутых в read-only-файловую систему данных, остается в целости и сохранности. Например, на доступном только для чтения разделе или CD-болванке. Такие настроенные «куски» удобно копировать, хранить и т.п.
Список использованной литературы
www.linux-live.org/
www.linux16.net/node/296
www.linux16.net/node/303
www.linux16.net/node/298
www.linux16.net/node/301
Существуют специальные файловые системы, кторые делают «бутерброд» из других файловых систем. Предположим, имеется CD-ROM, являющийся точным слепком прекрасно настроенной операционной системы. Казалось-бы, грузись с него и работай, ан нет: Linux обязательно захочет что-то куда-то записывать, логи, например в директорию /var. Чтобы обойти это ограничение, поверх read-only файловой системы «накладывается» нечто, на что можно записывать. Иногда это виртуальный диск, созданный в памяти, иногда — обычный жесткий диск и т.п. Иногда можно накладывать файловые системы слоями не только с целью записи, но и так, чтобы они корректировали друг друга. Так происходит с модулями Slax: который «лег» в «пачку» слоев последним — с того и считываются данные, несмотря на то, что файлы с точно такими же именами уже присутствовали в прежних «слоях».
Известно две подобных слоеных файловых системы: Unionfs и Aufs (Another Unionfs). Первая входит в состав ядра, но что-то я не припоминаю примеров ее использования. Вторую, наоборот, почему-то никак не включат в стандартное ядро Linux, но она очень популярна (Slax, например).
Как делать такие бутерброды? Допустим, у нас есть файловая система, доступная только для чтения, например, CD_ROM, ISO-файл, Squashfs-файл: вариантов много. Примонтируем ее куда-нибудь к временному каталогу:
mkdir /mnt/squashfs
mount -o loop -t squashfs $PATH_TO\blablabla.squash /mnt/squashfs
Попытка выполнить
touch /mnt/squashfs
Приведет к ошибке: нельзя сюда записывать.
Примонтируем какой-нибудь пригодный для записи носитель к другой точке:
mount /dev/sdx1 /mnt/towrite
Ну, и собираем «бутерброд»
mkdir /mnt/yo_i_can_write_to_ro_fs
mount -t aufs -o dirs=/mnt/towrite:/mnt/squashfs=ro none /mnt/yo_i_can_write_to_ro_fs
Если вы сразу после этого сравните содержимое директорий /mnt/squash и /mnt/yo_i_can_write_to_ro_fs, то разницы не будет, но в первую записывать нельзя, а во вторую можно. Более того, если выполнить те же шаги после перезагрузки, то в /mnt/yo_i_can_write_to_ro_fs будут видны все сделанные изменения.
Зачем всё это? Ну, например, уплотненные алгоритмом squashfs файлы занимают в разы меньше места, чем обычные. Накатываем сверху записываемый раздел жесткого диска — и вот вам гигантская экономия файлового пространства. Но главное даже не это. В случае краха жесткого диска (а иногда это происходит и по причине кривизны рук) мы лишаемся только изменений. Львиная же доля тщательно подобранных, настроенных и запихнутых в read-only-файловую систему данных, остается в целости и сохранности. Например, на доступном только для чтения разделе или CD-болванке. Такие настроенные «куски» удобно копировать, хранить и т.п.
Список использованной литературы
www.linux-live.org/
www.linux16.net/node/296
www.linux16.net/node/303
www.linux16.net/node/298
www.linux16.net/node/301
Комментарии (7)
RSS свернуть / развернутьС интересом почитал!
Неплохой способ сохранять изменения после работы
Sergei_T
Markony
Дык на горьком опыте всё Несколько дней назад грохнул систему, теперь пытаюсь построить ее так, чтобы большие куски хотябы хранить где-нибудь на сменных носителях или в сети. Обычные способы резервного копирования что-то никак у меня не приживаются.
yababay
Sergei_T
Кое-какие фрагменты хранятся в git-репозиториях, какие-то и не жалко даже, какие-то на шлюз закинуты, так что не могу сказать, что произошла совсем уж катострофа. Но главное, что жалко — настроенная как часы, проработавшая года 2 система со свежими, подогнанными вручную библиотеками, последними версиями программ, с закладками и ссылками, с History браузера, в которой пароли от редкоиспользуемых, но важных ресурсов и т.п. Такие вещи резервным копированием не все сохранить можно. Слишком большие объемы. Вот и решил прибегнуть к модульной системе.
Но способ, которым я грохнул систему — это вообще ноу-хау в мире долбо… зма. Новый патч Бармина, блин. На ближайшей встрече расскажу
yababay
Sergei_T
yababay
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.