Этот ответ и сообщение электронной почты указывают на то, что в Ubuntu 11.10 доступно что-то под названием «OverlayFS» и принудительно заменит aufs в Ubuntu 12.04.
Как мне это использовать? Где его документация?
Этот ответ и сообщение электронной почты указывают на то, что в Ubuntu 11.10 доступно что-то под названием «OverlayFS» и принудительно заменит aufs в Ubuntu 12.04.
Как мне это использовать? Где его документация?
Ответы:
Изменить: После написания этого ответа некоторые вещи изменились в overlayfs, а именно добавление обязательного параметра workdir
, см . Ответ Totti ниже для подробного описания этого нового параметра.
Мне наконец удалось найти это. Я нашел ссылки на него в исходном коде ядра, но по какой-то причине он не отображается в дереве git на kernel.org. Но! Если вы извлечете исходный код ядра Ubuntu следующим образом: 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
.
Поскольку настоящая справочная документация - это скорее «как она работает», а не «как монтировать ее», вот краткое изложение (в документации по ядру есть один пример):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Где [варианты монтирования] могут быть:
Поначалу меня смутила одна вещь, поэтому я должен пояснить, что монтирование оверлеев фактически не монтирует файловую систему. Я пытался смонтировать файловую систему squashfs с помощью монтирования overlayfs, но это не так. Сначала вы должны смонтировать (в моем случае squashfs) файловую систему в произвольный каталог, а затем использовать overlayfs для объединения точки монтирования (каталога) и другого каталога в третичный каталог (точку монтирования overlayfs) (edit: этот «третичный» каталог) на самом деле может быть каталогу upperdir =). Третичный каталог - это место, где вы увидите объединенные файловые системы (или деревья каталогов - это гибко).
Я работал над гибридным загрузочным диском Ubuntu, где базовая система Ubuntu существует в виде filesystem.squashfs, и у меня есть файлы с именами ubuntu.overlay kubuntu.overlay xubuntu.overlay и 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
over /
.
В процессе восстановления живого 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, но при этом я могу использовать их так, как будто они физически существуют в каждом месте.
overlay
не сoverlayfs
С 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
«Рабочий каталог» должен быть пустым каталогом в той же файловой системе, что и каталог верхнего каталога.
Затем всякий раз, когда поиск запрашивается в таком объединенном каталоге, поиск выполняется в каждом фактическом каталоге, и объединенный результат кэшируется в dentry, принадлежащем оверлейной файловой системе. Если оба фактических поиска находят каталоги, оба сохраняются и создается объединенный каталог, в противном случае сохраняется только один: верхний, если он существует, иначе нижний.
Только списки имен из каталогов объединяются. Другое содержимое, такое как метаданные и расширенные атрибуты, сообщается только для верхнего каталога. Эти атрибуты нижнего каталога скрыты.
Я расширил эти статьи, добавив в них скрипт для оверлеев, который устанавливает корень fs только для чтения.
Надеюсь, это поможет.
Минимальный исполняемый пример
# 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
Выход первого 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.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Помимо этого я невежественен. Я работаю с ним в живой системе, но мне пока не удалось заставить его работать. Хотелось бы мне узнать, что именно означают «upperdir» и «lowerdir». Я ничего не нашел