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

46

Этот ответ и

задан ændrük 02.03.2012 в 16:05
источник

3 ответа

55

Изменить: с момента написания этого ответа некоторые вещи изменились в 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]

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

  • lowerdir = somedir: lowerdir - это каталог, в который вы собираетесь заложить свою новую файловую систему, если есть дубликаты, они перезаписываются (фактически, скрыты в пользу) версии upperdir
  • upperdir = somedir: upperdir - это каталог, в который вы хотите наложить нижний регистр. Если дубликаты имен файлов существуют в нижнем регистре и 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 обрезанной (для экономии места). Затем я изменил скрипты 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 над / .

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

    
ответ дан Chuck R 02.03.2012 в 17:32
источник
17

От Ссылка :

  

Верхний и нижний

     

Оверлейная файловая система объединяет две файловые системы - «верхнюю» файловую систему   и «нижняя» файловая система. Когда имя существует в обеих файловых системах,   объект в «верхней» файловой системе отображается, пока объект в   «нижняя» файловая система либо скрыта, либо, в случае каталогов,   сливается с «верхним» объектом.

     

Правильнее было бы обратиться к верхнему и нижнему каталогу   tree ', а не «файловой системы», поскольку это вполне возможно для обоих   деревья каталогов должны находиться в одной файловой системе, и нет   требование о том, чтобы корень файловой системы был задан для верхнего или   ниже.      

Нижняя файловая система может быть любой файловой системой, поддерживаемой Linux, и делает   не нужно записывать. Более низкая файловая система может быть даже другой   overlayfs. Верхняя файловая система, как правило, доступна для записи, и если она   он должен поддерживать создание доверенных. * расширенных атрибутов и   должен предоставить действительный d_type в ответах readdir, поэтому NFS не подходит.

     

Оверлей только для чтения двух файловых систем только для чтения может использовать любой   тип файловой системы.

     

Каталоги

     

Наложение в основном включает каталоги. Если данное имя отображается в обоих   верхней и нижней файловых систем и ссылается на не-каталог в любом случае,   то нижний объект скрыт - имя относится только к верхнему   объект.      

Если оба верхних и нижних объектов являются каталогами, объединенный каталог   .

     

При времени монтирования два каталога, заданные в качестве параметров монтирования «lowerdir» и   «upperdir» объединяются в объединенный каталог:

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
     

«Workdir» должен быть пустым каталогом в той же файловой системе   как upperdir.

     

Затем всякий раз, когда запрос запрашивается в таком объединенном каталоге,   поиск выполняется в каждом фактическом каталоге и объединенном результате   кэшируется в дентине, принадлежащей файловой системе overlay. Если оба   фактические поиски находят каталоги, оба хранятся и объединены   создается каталог, в противном случае сохраняется только один: верхний, если он   существует, иначе нижний.

     

Только списки имен из каталогов объединяются. Другое содержание   такие как метаданные и расширенные атрибуты, сообщаются для верхнего   только каталог. Эти атрибуты нижней директории скрыты.

    
ответ дан totti 23.06.2014 в 12:07
7

Я расширил эти артикулы, включив в него скрипт для overlayfs, который устанавливает корневой файл только для чтения.

Надеюсь, это поможет.     

ответ дан Floyd42 22.03.2012 в 16:30