Этот ответ и filesystem overlayfs
Изменить: с момента написания этого ответа некоторые вещи изменились в overlayfs, а именно добавление требуемого параметра workdir
, см. totti's answer ниже для подробного описания этого нового параметра.
Наконец-то мне удалось найти его. Я нашел ссылки на него в источнике ядра, но по какой-то причине он не появляется в дереве 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]
р>
Где [параметры монтирования] могут быть:
Одна вещь, которая сначала смутила меня, поэтому я, вероятно, должен уточнить, заключается в том, что установка overlayfs фактически не монтирует файловую систему. Я пытался монтировать файловую систему squashfs с помощью монтирования overlayfs, но это не так, как это работает. Сначала вы должны монтировать файловую систему (в моем случае squashfs) в произвольный каталог, а затем использовать overlayfs для объединения точки монтирования (каталога) и другой директории в третичный каталог (точка монтирования overlayfs) (изменить: этот «третичный» каталог фактически может быть папкой upperdir =). Третичный каталог - это место, где вы увидите объединенные файловые системы (или деревья каталогов - они гибкие).
Я работал над гибридным загрузочным диском Ubuntu, где базовая система Ubuntu существует как filesystem.squashfs, и у меня есть файлы, называемые ubuntu.overlay kubuntu.overlay xubuntu.overlay и lubuntu.overlay. Файлы .overlay являются базовыми установками указанных систем с содержимым файловой системы.squashfs обрезанной (для экономии места). Затем я изменил скрипты init, чтобы наложить файл .overlay правильного дистрибутива (из параметра загрузки) с помощью overlayfs и вышеперечисленных параметров, и он работает как заклинание!
Это строки, которые я использовал в сценариях init (после перевода всех переменных):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Обратите внимание, что приведенная выше файловая система.squashfs представляет собой каталог , созданный casper, а не файл.
Эти три оператора создают каталог /overlay
, монтируют файловую систему squashfs в каталоге /overlay
, а затем используют OverlayFS для существенного слияния содержимого /overlay
над /
.
В процессе восстановления моего live USB для каждой версии я использую OverlayFS, чтобы сохранить кучу времени. Я начинаю с каталога под названием ubuntu-base, который содержит содержимое образа ubuntu-core, которое является самой базовой установкой. Затем я создам каталоги, называемые ubuntu, kubuntu, lubuntu и xubuntu.
Затем я использую OverlayFS, чтобы файлы из базы ubuntu отображались в отдельных каталогах. Я бы использовал что-то вроде этого:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Это приводит к тому, что файлы из ubuntu-базы отображаются в папке kubuntu. Затем я могу chroot
в папку kubuntu и сделать что-то вроде apt-get install kubuntu-desktop
. Любые изменения, сделанные во время этого монтирования OverlayFS, останутся в верхней папке, в этом случае папке kubuntu. Затем, как только я отключу OverlayFS, смонтируйте файлы, которые действительно существуют в базе ubuntu, но «зеркалируются» в папку kubuntu, исчезнут, если они не были изменены. Это мешает мне иметь несколько копий файлов в базе ubuntu, все еще имея возможность использовать их, как если бы они физически существовали в каждом месте.
От Ссылка :
Верхний и нижний
Оверлейная файловая система объединяет две файловые системы - «верхнюю» файловую систему и «нижняя» файловая система. Когда имя существует в обеих файловых системах, объект в «верхней» файловой системе отображается, пока объект в «нижняя» файловая система либо скрыта, либо, в случае каталогов, сливается с «верхним» объектом.
Правильнее было бы обратиться к верхнему и нижнему каталогу tree ', а не «файловой системы», поскольку это вполне возможно для обоих деревья каталогов должны находиться в одной файловой системе, и нет требование о том, чтобы корень файловой системы был задан для верхнего или ниже. р>
Нижняя файловая система может быть любой файловой системой, поддерживаемой Linux, и делает не нужно записывать. Более низкая файловая система может быть даже другой overlayfs. Верхняя файловая система, как правило, доступна для записи, и если она он должен поддерживать создание доверенных. * расширенных атрибутов и должен предоставить действительный d_type в ответах readdir, поэтому NFS не подходит.
Оверлей только для чтения двух файловых систем только для чтения может использовать любой тип файловой системы.
Каталоги
Наложение в основном включает каталоги. Если данное имя отображается в обоих верхней и нижней файловых систем и ссылается на не-каталог в любом случае, то нижний объект скрыт - имя относится только к верхнему объект. р>
Если оба верхних и нижних объектов являются каталогами, объединенный каталог .
При времени монтирования два каталога, заданные в качестве параметров монтирования «lowerdir» и «upperdir» объединяются в объединенный каталог:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
«Workdir» должен быть пустым каталогом в той же файловой системе как upperdir.
Затем всякий раз, когда запрос запрашивается в таком объединенном каталоге, поиск выполняется в каждом фактическом каталоге и объединенном результате кэшируется в дентине, принадлежащей файловой системе overlay. Если оба фактические поиски находят каталоги, оба хранятся и объединены создается каталог, в противном случае сохраняется только один: верхний, если он существует, иначе нижний.
Только списки имен из каталогов объединяются. Другое содержание такие как метаданные и расширенные атрибуты, сообщаются для верхнего только каталог. Эти атрибуты нижней директории скрыты.