AUFS: Как создать ветку для чтения/записи только части дерева каталогов?

AUFS: Как создать ветку для чтения/записи только части дерева каталогов?

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?

Я могу придумать следующее:

  1. Измените первую команду монтирования каким-либо образом.
  2. Добавьте больше команд монтирования, используя aufs add/del перед вторым монтированием
  3. Просто удалите деревья, которые не нужно сохранять /dir2во время загрузки.
  4. Частичное дерево ( 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.

Связанный контент