AuFS (другая файловая система объединения) позволяет нам объединять два дерева в одно, даже если эти деревья перекрываются. Затем мы можем направить запись в объединенное дерево в одну из ветвей и чтение в другую.
Классическое использование этого - с файловой системой flash и RAM-диском, например этот (ссылка 1) для создания корневой файловой системы только для чтения, которая не нарушает работу Linux. Все записи файлов идут в оперативную память. После перезагрузки система восстановит исходную конфигурацию.
/dir1
= только чтение/dir2
= читать / писать/aufs
= слияние /dir1
и /dir2
/aufs
затем повторно монтируется с --move
сделать это /
(корень)
Упрощенно, пример в (ссылка 1) просто делает это
mount -t aufs br=/dir2:/dir1 /aufs
mount --move /aufs /
Однако я хочу использовать его так, чтобы записываемый (/dir2
) находится на реальном диске, а не на RAM-диске. Таким образом, после перезагрузки данные сохранятся.
Но мне нужно убедиться, что определенные файлы в dir2 не сохраняются и восстанавливаются в их (/dir1
) по умолчанию. Это гарантирует, что в будущих загрузках всегда будут использоваться файлы при поставке. Без потери данных о пользователях и журналах.
например Измененные файлы в /etc
, /bin
, /boot
, /usr
не должен пережить перезагрузку.
В Веб-страница AUFS (ссылка 2) очень мало примеров.
Итак, на вопрос: как правильно это сделать с помощью AuFS?
Я могу думать о следующем:
/dir2
во время загрузкиetc, bin, boot, lib, etc
) в tmpfs
Ссылка 1: https://help.ubuntu.com/community/aufsRootFileSystemOnUsbFlash
Ссылка 2: http://aufs.sourceforge.net/aufs.html
Опция 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
.