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

Этот ответ и в сообщении электронной почты указывают, что в Ubuntu 11.10 доступно что-то, называемое «OverlayFS», и принудительно заменит aufs в Ubuntu 12.04.

Как мне это использовать? Где его документация?

54
задан 13 October 2017 в 07:08

4 ответа

Из 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, принадлежащем оверлейной файловой системе. Если оба фактических поиска находят каталоги, оба сохраняются и создается объединенный каталог, в противном случае сохраняется только один: верхний, если он существует, иначе нижний.

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

0
ответ дан 13 October 2017 в 07:08

Я расширил эти статьи, добавив в них скрипт для оверлеев, который устанавливает корень fs только для чтения.

116 Lesen_Root-Dateisystem
    • Надеюсь, это поможет.

  • 0
    ответ дан 13 October 2017 в 07:08

    Минимальный выполнимый пример

    # 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
    

    Интерпретация:

    • ниже: было неизменно после записи в наложение
    • верхний: полученный модификация для накладывания
    • наложение: выставочные файлы и от верхнего и от ниже
    • работа: содержит некоторое случайное содержание (a work/ каталог) мы не должны заботиться о

    Пример, адаптированный от: Пример Использование OverlayFS

    Вот более сложный пример с несколькими нижними уровнями: Overlayfs перезагружают с несколькими слоями (миграция далеко от aufs)

    Протестированный на Ubuntu 18.04, ядро Linux 4.15.0.

    2
    ответ дан 13 October 2017 в 07:08

    Редактировать: После написания этого ответа некоторые вещи изменились в оверлеях, а именно добавление обязательного параметра workdir, подробное описание этого нового параметра см. В ответе totti ниже.

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

    Поскольку настоящая справочная документация - это скорее «как она работает», а не «как монтировать ее», вот краткое изложение (в документации по ядру есть один пример):

    [ 116]

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

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

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

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

    Я работал на гибридном загрузочном диске 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 с /.

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

    В процессе перестройки моего живого 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, но при этом я могу использовать их, как если бы они физически существовали в каждом месте.

    0
    ответ дан 13 October 2017 в 07:08

    Другие вопросы по тегам:

    Похожие вопросы: