Как мне использовать OverlayFS?

Редактировать: С момента написания этого ответа некоторые вещи изменились в overlayfs, а именно добавление требуемого параметра workdir, видишь ответ Тотти ниже приведено подробное описание этого нового параметра.

Наконец-то мне удалось его найти. Я нашел ссылки на него в исходном коде ядра, но по какой-то причине он не отображается в дереве 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]

Где [параметры монтирования] могут быть:

  • lowerdir =somedir: lowerdir - это каталог, в который вы собираетесь поместить свою новую файловую систему, если есть дубликаты, они будут перезаписаны (на самом деле, скрыты в пользу) версии upperdir
  • upperdir=somedir: верхний каталог - это каталог, на который вы хотите наложить нижний каталог. Если в lowerdir и upperdir существуют повторяющиеся имена файлов, версия upperdir имеет приоритет.
  • стандартные варианты крепления. Единственный, который я видел из кода, - это ro / rw, но вы можете поэкспериментировать.

Одна вещь, которая сначала смутила меня, поэтому я, вероятно, должен уточнить, заключается в том, что монтирование overlayfs на самом деле не монтирует файловую систему. Я пытался смонтировать файловую систему squashfs с помощью монтирования overlayfs, но это работает не так. Сначала вы должны смонтировать файловую систему (в моем случае squashfs) в произвольный каталог, затем использовать overlayfs для объединения точки монтирования (каталога) и другого каталога в третичный каталог (точка монтирования overlayfs) (редактировать: этот "третичный" каталог на самом деле может быть каталогом upperdir=). Третичный каталог - это то место, где вы увидите объединенные файловые системы (или деревья каталогов - это гибко).

Пример 1, наложение корневой файловой системы

Я работал над гибридным загрузочным диском Ubuntu, где базовая система Ubuntu существует как filesystem.squashfs, и у меня есть файлы под названием ubuntu.overlay kubuntu.overlay xubuntu.overlay и lubuntu.overlay. Файлы .overlay являются базовыми установками указанных систем с обрезанным содержимым файловой системы.squashfs (для экономии места). Затем я изменил сценарии инициализации, чтобы наложить файл .overlay правильного дистрибутива (из параметра загрузки), используя overlayfs и вышеуказанные параметры, и это работает как шарм!

Это строки, которые я использовал в своих сценариях инициализации (после перевода всех переменных):

mkdir -p /overlaymount -t squashfs /cdrom/casper/ubuntu.overlay /overlaymount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

Обратите внимание, что файловая система.squashfs выше представляет собой каталог создан Каспером, а не файлом.

Эти три утверждения создают /overlay каталог, смонтируйте файловую систему squashfs на /overlay каталог, а затем используйте OverlayFS, чтобы по существу объединить содержимое /overlay над /.

Пример 2, прозрачное слияние двух каталогов

В процессе перестройки моего 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-base отображаются в папке kubuntu. Тогда я смогу chroot в папку kubuntu и сделайте что-то вроде apt-get install kubuntu-desktop. Любые изменения, внесенные во время этого монтирования OverlayFS, останутся в верхнем каталоге, в данном случае в папке kubuntu. Затем, как только я размонтирую OverlayFS, файлы, которые действительно существуют в ubuntu-base, но "зеркально отражаются" в папке kubuntu, исчезают, если они не были изменены. Это избавляет меня от необходимости иметь несколько копий файлов в ubuntu-base, сохраняя при этом возможность использовать их так, как если бы они физически существовали в каждом месте.