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