Оverlayfs - инструкция, которая позволяет реализовать наложение деревьев каталогов одного на другое

Материал из Wiki AlterOS
Перейти к: навигация, поиск

Overlayfs позволяет реализовать наложение деревьев каталогов одного на другое. Обычный кейс - наложение на дерево в режиме "чтение" другого дерева в режиме "чтение+запись". Возможно применение в реализации послойной записи изменений. Например в docker-подобных приложениях или в Live-CD/USB.

На AlterOS:
[root@wsxx ~]# uname -a Linux wsxx 5.16.2-1.el7.alteros.x86_64 #1 SMP PREEMPT Mon Feb 7 02:40:56 EST 2022 x86_64 x86_64 x86_64 GNU/Linux

Для использования ovrtlayfs нужно подгрузить соответствующий модуль. Изначально он не загружен:
[root@wsxx ~]# lsmod |grep overlay
[root@wsxx ~]# modprobe overlay
[root@wsxx ~]# lsmod |grep overlay
overlay 135168 0

Для перманентного использования:
echo "overlay" > /etc/modules-load.d/overlay.conf

Для тестирования создадим структуру каталогов в /tmp:
[root@wsxx ~]# cd /tmp
[root@wsxx ~]# mkdir lower upper workdir overlay

и структуру файлов в них:
[root@wsxx tmp]# touch /tmp/lower/{low_00,low_01,low_02}
[root@wsxx tmp]# touch /tmp/upper/{up_00,up_01,up_02}

Смонтируем /tmp/upper над /tmp/lower
(где /tmp/workdir каталог на том же уровне, что и /tmp/upper, /tmp/overlay - результирующий каталог)
[root@wsxx tmp]# mount -t overlay -o lowerdir=/tmp/lower,upperdir=/tmp/upper,workdir=/tmp/workdir none /tmp/overlay

Видим, что в overlay смонтировано содержимое из upper и lower:
[root@wsxx tmp]# ls ./overlay/
low_00 low_01 low_02 up_00 up_01 up_02

Создадим файлы в overlay и проверим, где они создадутся:
[root@wsxx tmp]# touch /tmp/overlay/{up_03,up_04}
[root@wsxx tmp]# ls ./overlay/
low_00 low_01 low_02 up_00 up_01 up_02 up_03 up_04
[root@wsxx tmp]# ls /tmp/upper/
up_00 up_01 up_02 up_03 up_04
[root@wsxx tmp]# ls /tmp/lower/
low_00 low_01 low_02

Отмонтируем и проверим:
[root@wsxx tmp]# umount /tmp/overlay/
[root@wsxx tmp]# ls /tmp/lower/
low_00 low_01 low_02
[root@wsxx tmp]# ls /tmp/upper/
up_00 up_01 up_02 up_03 up_04
[root@wsxx tmp]# ls /tmp/overlay/
[root@wsxx tmp]#