Этот ответ и в сообщении электронной почты указывают, что в Ubuntu 11.10 доступно что-то, называемое «OverlayFS», и принудительно заменит aufs в Ubuntu 12.04.
Как мне это использовать? Где его документация?
Из https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Верхний и Нижний
Наложение Файловая система объединяет две файловые системы - «верхнюю» файловую систему и «нижнюю» файловую систему. Когда имя существует в обеих файловых системах, объект в «верхней» файловой системе виден, в то время как объект в «нижней» файловой системе либо скрыт, либо, в случае каталогов, объединяется с «верхним» объектом.
Было бы более правильно сослаться на верхнее и нижнее «дерево каталогов», а не на «файловую систему», поскольку вполне возможно, что оба дерева каталогов находятся в одной и той же файловой системе, и не требуется, чтобы корень файловой системы быть дано для верхнего или нижнего.
Нижняя файловая система может быть любой файловой системой, поддерживаемой Linux, и не требует записи. Нижняя файловая система может быть даже другим оверлеем. Верхняя файловая система обычно доступна для записи, и если она есть, она должна поддерживать создание расширенных атрибутов доверенных. * И должна предоставлять допустимый d_type в ответах readdir, поэтому NFS не подходит.
Только для чтения наложение двух файловых систем только для чтения может использовать любой тип файловой системы.
Каталоги
Наложение в основном включает каталоги. Если данное имя появляется как в верхней, так и в нижней файловых системах и ссылается на не каталог в любом из них, то нижний объект скрыт - имя относится только к верхнему объекту.
Если верхний и нижний объекты являются каталогами, создается объединенный каталог.
Во время монтирования две директории, указанные как опции монтирования «lowerdir» и «upperdir», объединяются в объединенную директорию:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
«Рабочий каталог» должен быть пустым каталогом в одной и той же директории. файловая система как upperdir.
Затем всякий раз, когда поиск запрашивается в таком объединенном каталоге, поиск выполняется в каждом фактическом каталоге, и объединенный результат кэшируется в dentry, принадлежащем оверлейной файловой системе. Если оба фактических поиска находят каталоги, оба сохраняются и создается объединенный каталог, в противном случае сохраняется только один: верхний, если он существует, иначе нижний.
Объединяются только списки имен из каталогов. Другое содержимое, такое как метаданные и расширенные атрибуты, сообщается только для верхнего каталога. Эти атрибуты нижнего каталога скрыты.
BLOCKQUOTE>
Я расширил эти статьи, добавив в них скрипт для оверлеев, который устанавливает корень fs только для чтения.
116 Lesen_Root-DateisystemНадеюсь, это поможет.
Минимальный выполнимый пример
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
GitHub в восходящем направлении.
Вывод первого ls
с монтированием:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Вывод второго ls
без монтирования:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Интерпретация:
work/
каталог) мы не должны заботиться оПример, адаптированный от: Пример Использование OverlayFS
Вот более сложный пример с несколькими нижними уровнями: Overlayfs перезагружают с несколькими слоями (миграция далеко от aufs)
Протестированный на Ubuntu 18.04, ядро Linux 4.15.0.
Редактировать: После написания этого ответа некоторые вещи изменились в оверлеях, а именно добавление обязательного параметра workdir
, подробное описание этого нового параметра см. В ответе totti ниже.
apt-get source linux-image-3.0.0-16-generic
вы можете найти его в linux-3.0.0/Documentation/overlayfs.txt
. Он также доступен в пакете linux-doc в /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Поскольку настоящая справочная документация - это скорее «как она работает», а не «как монтировать ее», вот краткое изложение (в документации по ядру есть один пример):
[ 116]
Где [опции монтирования] могут быть:
Одна вещь, которая поначалу меня смутила, поэтому я должен пояснить, что монтирование overlayfs фактически не монтирует файловую систему. Я пытался смонтировать файловую систему squashfs с помощью монтирования overlayfs, но это не так. Сначала вы должны смонтировать (в моем случае squashfs) файловую систему в произвольный каталог, а затем использовать overlayfs для объединения точки монтирования (каталога) и другого каталога в третичный каталог (точку монтирования overlayfs) (edit: этот «третичный» каталог) на самом деле может быть каталогу upperdir =). Третичный каталог - это место, где вы увидите объединенные файловые системы (или деревья каталогов - это гибко).
Я работал на гибридном загрузочном диске Ubuntu, где базовая система Ubuntu существует как filesystem.squashfs, и у меня есть файлы с именем ubuntu.overlay kubuntu.overlay xubuntu. наложение и lubuntu.overlay. Файлы .overlay - это базовые установки указанных систем с сокращением содержимого filesystem.squashfs (для экономии места). Затем я изменил сценарии инициализации так, чтобы они перекрывали файл .overlay правильного дистрибутива (из параметра загрузки), используя overlayfs и вышеуказанные параметры, и он работает как шарм!
Это строки, которые я использовал в моих сценариях инициализации. (как только все переменные переведены):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Обратите внимание, что файл filesystem.squashfs выше - это каталог , созданный casper, а не файл.
Эти три оператора создают каталог /overlay
, монтируют файловую систему squashfs в каталог /overlay
и затем используют OverlayFS для существенного объединения содержимого /overlay
с /
.
В процессе перестройки моего живого USB для каждого выпуска я использую OverlayFS, чтобы сэкономить кучу времени. Я начну с каталога под названием ubuntu-base, который содержит содержимое образа ядра ubuntu, который является самой базовой установкой. Затем я создам каталоги с именами ubuntu, kubuntu, lubuntu и xubuntu.
Затем я использую OverlayFS, чтобы файлы из базы ubuntu отображались в отдельных каталогах. Я бы использовал что-то вроде этого:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Это заставит файлы из ubuntu-base появляться в папке kubuntu. Затем я могу chroot
перейти в папку kubuntu и сделать что-то вроде apt-get install kubuntu-desktop
. Любые изменения, сделанные во время этого монтирования OverlayFS, останутся в верхнем каталоге, в этом случае в папке kubuntu. Затем, когда я размонтирую OverlayFS, смонтируйте файлы, которые действительно существуют в ubuntu-base, но «зеркально отражаются» в папке kubuntu, исчезают, если они не были изменены. Это избавляет меня от необходимости иметь несколько копий файлов в Ubuntu-Base, но при этом я могу использовать их, как если бы они физически существовали в каждом месте.