Пример использования OverlayFS

Я использую Ubuntu 14.04 с ядром 3.19, которое должно поддерживать OpenFS (начиная с ядра 3.18). Я читал о OverlayFS, но не понимаю, как на самом деле реализовать его. Похоже, что это может быть действительно полезной альтернативой LVM, позволяющей записывать изменения где-то еще во время создания резервной копии исходной файловой системы, которая наложена?

Может ли кто-нибудь дать мне пример команд монтирования для использования (если возможно) в следующих случаях:

  • С необработанным образом диска (созданным с использованием dd if=/dev/zero of=$HOME/filestystem1.img bs=4096 count=1024000) выступать в качестве наложенной файловой системы, смонтировать ее поверх файловой системы моего хоста по адресу $HOME/mount который уже должен содержать некоторые случайные файлы, такие как file1.txt а также file2.txt, После подключения я верю, что все еще смогу увидеть свои уже существующие файлы, и любые файлы, которые я сейчас создаю, будут фактически храниться внутри filesystem1.img файл, который я мог бы переместить в другую систему?

  • Создайте еще один необработанный образ диска и смонтируйте его поверх другого, который мы только что создали. Я делаю это как вторую команду монтирования, которая выполняется после команды монтирования, которую мы выполнили в предыдущем примере, или я могу указать оба монтирования за один раз?

Я не могу сказать, является ли OverlayFS реальной файловой системой, которую мне нужно создать на образах дисков с mkfs -t xxx /path/to/raw/disk/image, или это специальный метод монтирования, и необработанные образы дисков фактически используют что-то вроде ext4, но они монтируются особым образом mount -t OverlayFS? Когда я бегу:

cd /sbin
ls mkfs*

Я получаю следующие, которые не показывают возможность сделать оверлейную файловую систему.

mkfs      mkfs.cramfs  mkfs.ext3  mkfs.ext4dev  mkfs.minix  mkfs.ntfs
mkfs.bfs  mkfs.ext2    mkfs.ext4  mkfs.fat      mkfs.msdos  mkfs.vfat

1 ответ

Решение

Я не могу сказать, является ли OverlayFS реальной файловой системой, которую мне нужно создать на образах дисков с помощью mkfs -t xxx /path/to/raw/disk/image, или это особый метод монтирования, и необработанные образы дисков фактически используют что-то как ext4, но они монтируются особым образом с помощью mount -t OverlayFS?

Не нужно запускать какую-либо команду mkfs для overlayFS, это всего лишь способ монтирования.

После подключения я верю, что все еще смогу увидеть свои уже существующие файлы, и любые файлы, которые я сейчас создаю, на самом деле будут храниться в файле filesystem1.img, который я мог бы переместить в другую систему?

Да, для более подробного объяснения того, как работает OverlayFS, вы можете обратиться к "Docker и OverlayFS на практике".

Примеры

Создание наложенного монтирования может быть сделано исключительно с каталогами, если это необходимо, как показано здесь:

cd /tmp
mkdir lower upper workdir overlay
sudo mount -t overlay -o \
lowerdir=/tmp/lower,\
upperdir=/tmp/upper,\
workdir=/tmp/workdir \
none /tmp/overlay

Вы можете добавить [виртуальные] блочные устройства с их собственными файловыми системами (любого типа), которые будут выступать в качестве нижних и верхних файловых систем, если хотите. Единственное ограничение заключается в том, что "рабочий каталог" должен быть пустым каталогом в той же файловой системе, что и верхний каталог. Пример использования файловой системы для upperdir и lowerdir может быть показан ниже:

cd /tmp

# Create the necessary directories.
mkdir lower upper overlay

# Lets create a fake block device to hold our "lower" filesystem
dd if=/dev/zero of=lower-fs.img bs=4096 count=102400
dd if=/dev/zero of=upper-fs.img bs=4096 count=102400

# Give this block device an ext4 filesystem.
mkfs -t ext4 lower-fs.img
mkfs -t ext4 upper-fs.img

# Mount the filesystem we just created and give it a file
sudo mount lower-fs.img /tmp/lower
sudo chown $USER:$USER /tmp/lower
echo "hello world" >> /tmp/lower/lower-file.txt

# Remount the lower filesystem as read only just for giggles
sudo mount -o remount,ro lower-fs.img /tmp/lower

# Mount the upper filesystem
sudo mount upper-fs.img /tmp/upper
sudo chown $USER:$USER /tmp/upper

# Create the workdir in the upper filesystem and the 
# directory in the upper filesystem that will act as the upper
# directory (they both have to be in the same filesystem)
mkdir /tmp/upper/upper
mkdir /tmp/upper/workdir

# Create our overlayfs mount
sudo mount -t overlay -o \
lowerdir=/tmp/lower,\
upperdir=/tmp/upper/upper,\
workdir=/tmp/upper/workdir \
none /tmp/overlay

Приведенные выше примеры взяты из моего поста об использовании оверлеев.

Вложенность OverlayFS

... еще один необработанный образ диска и смонтируйте его поверх другого, который мы только что создали. Я делаю это как вторую команду монтирования, которая выполняется после команды монтирования, которую мы выполнили в предыдущем примере, или я могу указать оба монтирования за один раз?

Вы можете вкладывать overlayFS. Например, вы можете вложить приведенный выше пример в качестве нижнего каталога в другую систему overlayFS, выполнив:

mkdir -p /tmp/upperdir2/upper /tmp/upperdir2/workdir /tmp/overlay2
sudo mount -t overlay -o \
lowerdir=/tmp/overlay,\
upperdir=/tmp/upperdir2/upper,\
workdir=/tmp/upperdir2/workdir \
none /tmp/overlay2

Когда Ubuntu получит ядро ​​4.0+, мы сможем объединить несколько нижних каталогов в одну команду, используя символ двоеточия в качестве разделителя, например:

sudo mount -t overlay -o \
lowerdir=/tmp/lower:/tmp/lowest,\
upperdir=/tmp/upper,\
workdir=/tmp/workdir \
none /tmp/overlay

В этом случае у вас есть не два рабочих каталога, а один, и вы сохраняете тот же объединенный путь /tmp/overlay, Нижние каталоги будут расположены справа налево. Вы также можете опустить upperdir= полностью, что приводит к монтированию только для чтения.

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