Aufs: как впихнуть невпиху'емое и писну'ть неписуемое

Принцип построения любого LiveCD (в том числе Slax) — возможность «как бы записывать» на файловые системы, предназначенные только для чтения. Вот, вкратце, как это делается.

Существуют специальные файловые системы, кторые делают «бутерброд» из других файловых систем. Предположим, имеется 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 свернуть / развернуть
+
0
Отлично написано!
С интересом почитал!
Неплохой способ сохранять изменения после работы
avatar

Sergei_T

  • 21 мая 2010, 13:15
+
0
Чрезвычайно важная тема! И общий смысл понятен даже для мну!
avatar

Markony

  • 21 мая 2010, 14:05
+
+1
Спасибо

Дык на горьком опыте всё Несколько дней назад грохнул систему, теперь пытаюсь построить ее так, чтобы большие куски хотябы хранить где-нибудь на сменных носителях или в сети. Обычные способы резервного копирования что-то никак у меня не приживаются.
avatar

yababay

  • 21 мая 2010, 14:08
+
0
Попробуй rsync
avatar

Sergei_T

  • 21 мая 2010, 14:45
+
+1
Да я чего только не пробовал. Один хрен раз в 2-3 года наступает какой-нибудь глупый глобальный п… ц.

Кое-какие фрагменты хранятся в git-репозиториях, какие-то и не жалко даже, какие-то на шлюз закинуты, так что не могу сказать, что произошла совсем уж катострофа. Но главное, что жалко — настроенная как часы, проработавшая года 2 система со свежими, подогнанными вручную библиотеками, последними версиями программ, с закладками и ссылками, с History браузера, в которой пароли от редкоиспользуемых, но важных ресурсов и т.п. Такие вещи резервным копированием не все сохранить можно. Слишком большие объемы. Вот и решил прибегнуть к модульной системе.

Но способ, которым я грохнул систему — это вообще ноу-хау в мире долбо… зма. Новый патч Бармина, блин. На ближайшей встрече расскажу
avatar

yababay

  • 21 мая 2010, 16:22
+
0
dd if=/dev/sda of=/path/to/disk/image
avatar

Sergei_T

  • 21 мая 2010, 17:49
+
0
Прошу учесть, что на словах-то всё красиво, но прикрутить к ядру модуль Aufs — задача не самая простая. Смотрите первую ссылку в списке, а я постараюсь при случае написать об этом.
avatar

yababay

  • 21 мая 2010, 14:10

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.