LINUX.ORG.RU

overlay fs и «невидимые» точки монтирования

 , ,


0

1

Всем привет!

Вопрос из любопытства. Вот значит включил я OverlayFS в МалинкеПи3Б и обнаружил любопытную особенность монтирования, нет папок upper и work. А как это? Выглядит всё вот так:

root@rasp:/home/pi # mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=243284k,nr_inodes=60821,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=76332k,mode=755)
overlay on / type overlay (rw,noatime,lowerdir=/lower,upperdir=/upper/data,workdir=/upper/work)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
none on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=76328k,mode=700,uid=1000,gid=1000)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,relatime)

можно видеть, что / (root) монтирован в overlay, где в скобочках видно lowerdir=/lower,upperdir=/upper/data,workdir=/upper/work
но если сделать так:
root@rasp:/ # ls -la /
total 36
drwxr-xr-x   1 root root   160 Jan  1  1970 .
drwxr-xr-x   1 root root   160 Jan  1  1970 ..
lrwxrwxrwx   1 root root     7 Jan 11 18:50 bin -> usr/bin
drwxr-xr-x   4 root root  4096 Jan  1  1970 boot
drwxr-xr-x  17 root root  3720 Jul  6 12:49 dev
drwxr-xr-x   1 root root   120 Jul  6 16:15 etc
drwxr-xr-x   1 root root    60 Jan 11 18:52 home
lrwxrwxrwx   1 root root     7 Jan 11 18:50 lib -> usr/lib
drwx------   2 root root 16384 Jan 11 19:08 lost+found
drwxr-xr-x   2 root root  4096 Jan 11 18:50 media
drwxr-xr-x   2 root root  4096 Jan 11 18:50 mnt
drwxr-xr-x   3 root root  4096 Jan 11 18:52 opt
dr-xr-xr-x 194 root root     0 Jan  1  1970 proc
drwx------   1 root root   120 Jul  6 16:19 root
drwxr-xr-x  20 root root   700 Jul  6 17:38 run
lrwxrwxrwx   1 root root     8 Jan 11 18:50 sbin -> usr/sbin
drwxr-xr-x   2 root root  4096 Jan 11 18:50 srv
dr-xr-xr-x  12 root root     0 Jan  1  1970 sys
drwxrwxrwt   1 root root   340 Jul  6 17:17 tmp
drwxr-xr-x   1 root root   100 Jan 11 18:50 usr
drwxr-xr-x   1 root root   140 Feb 12 21:19 var

то папки /lower или /upper тут нет. А где они?! А как это?

папки /lower и /upper находятся в initramfs образе, откуда был смонтирован overlayfs корень файловой системы.

то есть, мы загрузились в линукс с initramfs, в initramfs создали /lower, /upper, смонтировали их как lowerdir и upperdir соответственно, затем сделали switch_root в новый корень, а папки «чисто физически» остались уровнем выше, но при этом доступа к initramfs тоже уже нету.

и это работает.

только в таком случае нормальные пацаны (Я) делают ещё mount --move чтобы переместить /lower и /upper на новый уровень, куда делался switch_root.

ну или --bind тоже сойдёт.

https://github.com/sp00f1ng/booty/blob/master/booty-init.in#L330-L338

ну а в твоём случае для «чистоты картины» так сказать, эти папки /lower и /upper решили так и оставить висеть в памяти в initramfs уровнем выше.

ничего страшного, просто так сделали.

Spoofing ★★★★★ ()
Последнее исправление: Spoofing (всего исправлений: 1)
Ответ на: комментарий от Spoofing

Вау. Спасибо за пережеваное объяснение.
Как то не красиво выглядит по мне так... Каким то висящим хвостом.

Spider55 ()
Ответ на: комментарий от Spoofing

то есть, мы загрузились в линукс с initramfs

Там необязательно может быть initramfs, можно просто /sbin/init подменить, который будет overlayfs монтировать.

UVV ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.