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,