Я смущен. Файловая система Linux является древовидной структурой с корневым узлом (стартовый узел) как корневой каталог. Теперь давайте предположим, что у меня есть папка abc
в местоположении /home/abc
и другая папка xyz
в местоположении /home/xyz
Папка xyz
состоит из некоторых других папок и файлов в нем. (исключая def
и mno
папки в нем),
xyz
/ \
def mno
Когда я выполняю команду
mount --rbind /home/xyz /home/abc
(rbind, рекурсивно связывают), я вижу все содержание папки xyz
в abc
. Теперь, когда я просто выполняю команду
mount --bind /home/xyz /home/abc
Я все еще вижу все содержание xyz
в abc
.
Почему это?
--bind
работать столь же так же к --rbind
.
Вы справедливо заметили, что, и с --bind
и с --rbind
, видите, что каталоги при связывании монтируются.
различие - то, что, с --rbind
, но не с --bind
, Вы видите , содержание другого связывать монтируется при связывании, монтируются.
В применении к Вашему примеру, предположите для простоты, что /home/xyz/def
и /home/xyz/mno
пустые каталоги. Предположим далее, что Вы затем используете их , как связывают, монтируется, т.е. Вы используете их в качестве точек монтирования в [1 111] или mount --rbind
. Это заставляет их казаться непустыми. Затем предположите, что Вы работаете:
mount --bind /home/xyz /home/abc
Затем /home/abc/def
и /home/abc/mno
оба существуют, но они кажутся пустыми, потому что Вы использовали mount --bind
, который нерекурсивен.
Напротив, предположите, что Вы вместо этого сделали /home/abc
, связывание монтируется путем выполнения этой команды:
mount --rbind /home/xyz /home/abc
Затем /home/abc/def
и /home/abc/mno
и существовать и они кажутся непустыми - у них есть содержание /home/xyz/def
, и /home/xyz/mno
связывают, монтируется - потому что Вы использовали mount --bind
, который является рекурсивным.
Вот полностью обработанный пример:
ek@Gnar:~$ mkdir original
ek@Gnar:~$ touch original/a-regular-file
ek@Gnar:~$ mkdir original/a-directory
ek@Gnar:~$ mkdir parent-of-mountpoint
ek@Gnar:~$ mkdir parent-of-mountpoint/mountpoint
ek@Gnar:~$ sudo mount --bind ~/original ~/parent-of-mountpoint/mountpoint
ek@Gnar:~$ mkdir nonrecursive-other-mountpoint recursive-other-mountpoint
ek@Gnar:~$ sudo mount --bind ~/parent-of-mountpoint ~/nonrecursive-other-mountpoint
ek@Gnar:~$ sudo mount --rbind ~/parent-of-mountpoint ~/recursive-other-mountpoint
ek@Gnar:~$ tree -F original/
original/
├── a-directory/
└── a-regular-file
1 directory, 1 file
ek@Gnar:~$ tree -F parent-of-mountpoint/
parent-of-mountpoint/
└── mountpoint/
├── a-directory/
└── a-regular-file
2 directories, 1 file
ek@Gnar:~$ tree -F nonrecursive-other-mountpoint/
nonrecursive-other-mountpoint/
└── mountpoint/
1 directory, 0 files
ek@Gnar:~$ tree -F recursive-other-mountpoint/
recursive-other-mountpoint/
└── mountpoint/
├── a-directory/
└── a-regular-file
2 directories, 1 file
ek@Gnar:~$ mount | grep ~
/dev/sda2 on /home/ek/parent-of-mountpoint/mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/nonrecursive-other-mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/recursive-other-mountpoint type ext4 (rw,relatime)
/dev/sda2 on /home/ek/recursive-other-mountpoint/mountpoint type ext4 (rw,relatime)
Читать man 8 mount
. Это говорит (добавленный акцент):
Свяжите монтируется
Повторно смонтируйте часть файловой иерархии где-то в другом месте. Вызов:
mount --bind olddir newdir
или при помощи этой fstab записи:
/olddir /newdir none bind
После этого вызова то же содержание доступно в двух местах. Можно также повторно смонтировать единственный файл (на единственном файле). Также возможно использовать связывание, монтируются для создания точки монтирования из обычного каталога, например:
mount --bind foo foo
Связывание монтирует, что вызов присоединяет только (часть) единственную файловую систему, не возможное подмонтирование. Вся файловая иерархия включая подмонтирование присоединяется второе место при помощи:
mount --rbind olddir newdir
Обратите внимание, что файловая система монтирует, что опции останутся тем же как опциями на исходной точке монтирования.