
AuFS (еще одна объединенная файловая система) позволяет нам объединять два дерева в одно, даже если эти деревья перекрываются. Затем мы можем направлять записи в объединенное дерево к одной из ветвей, а чтения — к другой.
Классическое использование этого — с файловой системой на флэш-накопителе и RAM-диском, напримерэтот(ссылка 1) для создания корневой файловой системы только для чтения, которая не нарушает работу Linux. Все записи файлов идут в оперативную память. После перезагрузки система восстанавливается до конфигурации, которая была при поставке.
/dir1
= только чтение/dir2
= чтение/запись/aufs
= слияние/dir1
и/dir2
/aufs
затем перемонтируется, чтобы --move
сделать его /
(корневым)
Упрощенно, пример в (ссылка 1) просто делает это
mount -t aufs br=/dir2:/dir1 /aufs
mount --move /aufs /
Однако я хочу использовать его так, чтобы записываемый ( /dir2
) находился на реальном диске, а не на ramdisk. Таким образом, после перезагрузки он сохранит свои данные.
Но мне нужно убедиться, что определенные файлы в dir2 не сохраняются и восстанавливаются до своих ( /dir1
) значений по умолчанию. Это гарантирует, что будущие загрузки всегда будут использовать файлы, которые были отправлены. Без потери данных пользователя и журналов.
например, измененные файлы в /etc
, /bin
, /boot
, /usr
не должны сохраняться после перезагрузки.
TheВеб-страница AUFS(ссылка 2) содержит очень мало примеров.
Итак, вопрос: как правильно это сделать с помощью AuFS?
Я могу придумать следующее:
- Измените первую команду монтирования каким-либо образом.
- Добавьте больше команд монтирования, используя aufs add/del перед вторым монтированием
- Просто удалите деревья, которые не нужно сохранять
/dir2
во время загрузки. - Частичное дерево (
etc, bin, boot, lib, etc
) вtmpfs
Ссылка 1:https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash
Ссылка 2:http://aufs.sourceforge.net/aufs.html
решение1
Опция 1: auFS
сам по себе не поддерживает такую опцию монтирования, поэтому опция № 1 мертва. Вам придется это обойти.
Вариант №3: Конечно, вы можете просто удалять эти каталоги при каждой загрузке. Это может быть самым простым способом, который я здесь вижу.
Вариант №2: Вы могли бы работать с tmpfs
. Итак, сначала создайте tmpfs
, скажем, размером 500 МБ:
mount -t tmpfs -o rw,size=500M tmpfs /tmpfs
Сейчас у нас есть:
/dir1
: только чтение/dir2
: читай пиши/tmpfs
: чтение/запись в ОЗУ/aufs
: наложение/dir1
и/dir2
Внутри /tmpfs
мы создаем те каталоги, которые вы хотите сохранить:
mkdir -p /tmpfs/{etc,usr,boot,bin}
Обратите внимание, мы делаем это, когда уже объединяем два каталога. То есть, когда дерево каталогов /aufs
уже существует. Однако теперь мы делаем одно монтирование aufs на каталог, который должен быть сохранен:
mount -t aufs -o dirs=/tmpfs/etc=rw:/dir2/etc=ro none /aufs/etc
mount -t aufs -o dirs=/tmpfs/usr=rw:/dir2/usr=ro none /aufs/usr
mount -t aufs -o dirs=/tmpfs/boot=rw:/dir2/boot=ro none /aufs/boot
mount -t aufs -o dirs=/tmpfs/bin=rw:/dir2/bin=ro none /aufs/bin
Теперь у вас есть дерево каталогов в , /aufs
где вы можете записывать файлы везде, но когда вы пишете в , /etc
например, это будет записано в /tmpfs/etc
, который находится в оперативной памяти, поэтому не переживет перезагрузку. Другие файлы в , /home
например, записываются в /dir2/home
, которая является файловой системой, доступной для чтения и записи, и поэтому переживет перезагрузку.
Другое решение: Я также использую клиентскую систему, которая использует файловую систему наложения и сохраняет пользовательские данные. Вот как я решил эту проблему: просто файловая система только для чтения и tmpfs, которая монтируется поверх нее. Позже, когда пользователь входит в систему, я монтирую его домашний каталог с сервера samba с возможностью чтения и записи. Таким образом, все его пользовательские данные хранятся и сохраняются в /home
, а остальное не переживает перезагрузку. В вашем случае вы могли бы просто поместить его /home
в другой физический раздел, который доступен для чтения и записи, и смонтировать его позже в /aufs/home
.