🗄️ Введение в OverlayFS

Что такое OverlayFS

by itisgood

Псевдо-файловая система OverlayFS была впервые включена в релиз 3.18 ядра Linux: она позволяет объединять два дерева каталогов или файловых систем (“верхнее” и “нижнее”) совершенно прозрачно для пользователя, который может обращаться к файлам и каталогам на “объединенном” уровне точно так же, как и на стандартной файловой системе.

В этом руководстве мы изучим основные концепции OverlayFS и увидим демонстрацию ее использования.

В этом руководстве вы узнаете:

  • Основные концепции OverlayFS
  • Как объединить две файловые системы с помощью OverlayFS

Введение

Все мы должны быть знакомы со стандартным поведением ядра Linux при монтировании файловой системы: файлы и каталоги, существующие в каталоге, используемом в качестве точки монтирования, маскируются и становятся недоступными для пользователя, в то время как файлы, существующие в смонтированной файловой системе, отображаются.

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

Это также происходит тогда, когда мы монтируем несколько файловых систем в одном каталоге.

Когда используется псевдо-файловая система OverlayFS, вместо этого файлы, существующие на разных слоях, объединяются, и результирующая файловая система может быть смонтирована самостоятельно.

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

OverlayFS также лежит в основе драйверов хранения “overlay” и “overlay2” Docker.

Что происходит при удалении файла или каталога?

Если удаляемый файл принадлежит верхнему слою, то он удаляется на месте; если же он принадлежит нижнему слою, то удаление имитируется с помощью файла whiteout (или непрозрачного каталога – каталога с расширенным атрибутом trusted.overlay.opaque), который создается в слое с возможностью записи и заслоняет исходный элемент.

OverlayFS является основой драйверов Docker overlay и overlay2.

В такой реализации нижний, доступный только для чтения, слой представлен образами; верхний, доступный для записи, представлен контейнерами на их основе.

Образы неизменяемы: все изменения происходят внутри контейнеров и теряются при их удалении (именно поэтому для сохранения данных используются тома).

Использование OverlayFS

Давайте посмотрим, как использовать OverlayFS.

Для данного примера я предположу, что мы хотим объединить две файловые системы: нижнюю, существующую на разделе /dev/sda1, и ту, которая будет использоваться в режиме чтения-записи, на разделе /dev/sda2.

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

$ sudo mkdir /lower /overlay

Теперь смонтируем файловую систему /dev/sda1 в каталоге /lower в режиме только для чтения:

$ sudo mount -o ro /dev/sda1 /lower

Команда ls показывает, что файловая система содержит только один файл:

$ ls -l /lower
total 20
-rw-r--r--. 1 root root 23 Sep 1 10:43 file1.txt
drwx------. 2 root root 16384 Sep 1 10:40 lost+foun

Файлы содержат всего одну строку:

$ cat /lower/file1.txt 
this is the first line

Теперь давайте продолжим.

В качестве следующего шага мы смонтируем файловую систему /dev/sda2 в каталог /overlay:

$ sudo mount /dev/sda2 /overlay

Когда файловая система смонтирована, мы создаем на ней две директории: upper и work.

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

$ sudo mkdir /overlay/{upper,work}

Теперь мы можем “собрать” и смонтировать оверлей.

Для выполнения этой задачи мы используем следующую команду:

$ sudo mount overlay -t overlay -o lowerdir=/lower,upperdir=/overlay/upper,workdir=/overlay/work  /media

Мы вызвали mount, передав “overlay” в качестве аргумента опции -t (сокращение от –types), тем самым указав тип файловой системы, которую мы хотим смонтировать (в данном случае псевдо-файловую систему), затем мы использовали флаг -o для перечисления опций монтирования: в данном случае “lowerdir”, “upperdir” и “workdir”, чтобы указать: каталог, в который монтируется файловая система только для чтения, каталог, содержащий файлы верхнего, записываемого слоя, и расположение “рабочего” каталога, соответственно. Наконец, мы указали точку монтирования для “объединенной” файловой системы: /media, в данном случае.

С помощью команды mount мы можем просмотреть сводную информацию о настройке оверлея:

$ mount | grep -i overlay
overlay on /media type overlay (rw,relatime,seclabel,lowerdir=/lower,upperdir=/overlay/upper,workdir=/overlay/work)

Если мы перечислим файлы в каталоге /media, то увидим, что существует только файл file1.txt, который, как мы знаем, принадлежит нижнему уровню:

$ ls -l /media
total 20
-rw-r--r--. 1 root root 23 Sep 1 10:43 file1.txt
drwx------. 2 root root 16384 Sep 1 10:40 lost+found

Теперь давайте попробуем добавить строку в файл и посмотрим, что произойдет:

$ echo "this is the second line" | sudo tee -a /media/file1.txt

Если мы проверим содержимое файла, то увидим, что строка была добавлена успешно:

$ cat /media/file1.txt
this is the first line
this is the second line

Однако оригинальный файл file1.txt не был изменен:

$ cat /lower/file1.txt
this is the first line

IВместо этого в верхний слой был добавлен файл с тем же именем:

$ ls -l /overlay/upper
-rw-r--r--. 1 root root 47 Sep 1 14:36 file1.txt

Теперь, если мы удалим файл /media/file1.txt, /overlay/upper/file1.txt станет таким файлом whiteout :

$ sudo rm /media/file1.txt
$ ls -l /overlay/upper
c---------. 2 root root 0, 0 Sep 1 14:45 file1.txt

Как указано в официальной документации, файл whiteout является символьным устройством (это отражено в выводе ls – см. выделенную ведущую “c”) с номером устройства 0/0.

Заключение

В этом руководстве мы поговорили о OverlayFS: мы узнали основные концепции ее использования, увидели, как она может быть использована для объединения двух файловых систем или деревьев каталогов, и каковы некоторые из возможных случаев ее использования.

Наконец, мы увидели, как на самом деле создать установку OverlayFS на Linux.

см. также:

You may also like

Leave a Comment