обнаружение привязки монтируется на Linux - PullRequest
4 голосов
/ 03 января 2012

Я ищу способ определить, является ли данный путь точкой привязки (в linux).Стандартные методы определения обычных точек монтирования, похоже, не работают.Даже команда mountpoint не может обнаружить привязки.

Ответы [ 3 ]

6 голосов
/ 03 января 2012

Я не уверен, что должен быть способ сделать это (за исключением, возможно, через /etc/mtab или /etc/fstab), потому что я понимаю, что bind mounts - это своего рода "жесткие ссылки" в пространстве монтирования (не файловой иерархии), и нет способа (после монтирования привязки) различить исходную и целевую точки монтирования.

И зачем это спрашивать? Bind mounts (IMHO) в основном полезны для скрытия таких вещей с точки зрения приложения (в противном случае вы использовали бы символические ссылки - или даже жесткие ссылки, в редких случаях они возможны - для каталогов)

И mountpoint, который я только что обнаружил благодаря вашему вопросу, кажется, что-то видит:

% grep /home /etc/fstab
UUID=000008-0003-000c-9ecd-0f1a /home           ext3    defaults        0       2
% grep /usr/src /etc/fstab
/home/Src /usr/src none bind 0 0
% mountpoint /usr/src
/usr/src is a mountpoint
% mountpoint /home/Src
/home/Src is not a mountpoint

По strace -ing mountpoint Я считаю, что он выполняет системные вызовы lstat, stat и fstat для таких каталогов, как /usr/src & /usr/src/..


(добавлено в ноябре 2016 г .:)

См. Также /proc/mounts Например. proc (5) и nftw (3)

0 голосов
/ 03 ноября 2016

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

Вот краткая демонстрация командной строки:

$ cut -d ' ' -f2 /proc/mounts | xargs stat -c '%d %n'
18 /sys
4 /proc
6 /dev
19 /dev/pts
20 /run
2049 /
7 /sys/kernel/security
21 /dev/shm
22 /run/lock
23 /sys/fs/cgroup
24 /sys/fs/cgroup/unified
25 /sys/fs/cgroup/systemd
26 /sys/fs/pstore
27 /sys/fs/cgroup/perf_event
28 /sys/fs/cgroup/cpu,cpuacct
29 /sys/fs/cgroup/pids
30 /sys/fs/cgroup/blkio
31 /sys/fs/cgroup/memory
32 /sys/fs/cgroup/cpuset
33 /sys/fs/cgroup/net_cls,net_prio
34 /sys/fs/cgroup/devices
35 /sys/fs/cgroup/freezer
39 /proc/sys/fs/binfmt_misc
17 /dev/mqueue
8 /sys/kernel/debug
37 /dev/hugepages
2066 /home
39 /proc/sys/fs/binfmt_misc
44 /run/user/1000
45 /sys/fs/fuse/connections
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d
4 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/proc
18 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/sys
6 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev
19 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/dev/pts
2066 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/home
2049 /run/schroot/mount/my-chroot-cb43935e-0812-45ea-af4f-965a1e2de91d/tmp

Как только вы узнаете, что это точка монтирования, то, если ее идентификатор устройства является общим для нескольких записей в /proc/mounts, вы можете предположить, что одна из них является монтированием с привязкой. Выяснение того, кто является связующим, а какое - привязанным, до сих пор отсутствует в этом ответе.

0 голосов
/ 05 января 2012
$ mount | grep bind

Мне не очень понятно, что вы хотите, эта команда подходит вам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...