Размонтируйте rbind-монтирование, не затрагивая оригинальное монтирование

11

Отвечая на вопрос о сбое сервера, но не получил достаточного внимания, поэтому разместил здесь, с надеждой, что некоторые люди здесь знают ответ.

Есть еще один вопрос, касающийся размонтирования rbind mounts, но решение имеет нежелательный эффект. Рассмотрим следующую схему каталогов:

.
├── A_dir
│   └── mount_b
├── B_dir
│   └── mount_c
└── C_dir

Теперь я связываю C_dirс B_dir/mount_cи rbind B_dirк A_dir/mount_b:

[hidden]$ sudo mount --bind C_dir B_dir/mount_c
[hidden]$ sudo mount --rbind B_dir A_dir/mount_b
[hidden]$ mount | grep _dir | wc -l
3

Теперь не umount A_dir/mount_bполучится, что неудивительно. Согласно ответам повсюду в Интернете, мы должны umount A_dir/mount_b/mount_cсначала тогда umount A_dir/mount_b. Однако, umount A_dir/mount_b/mount_cтакже будет размонтироваться B_dir/mount_c, что нежелательно:

[hidden]$ sudo umount A_dir/mount_b/mount_c
[hidden]$ mount | grep _dir | wc -l
1

Теперь мой вопрос, как я могу отключить , A_dir/mount_bно оставляя B_dirнеизменным, то есть еще привязка B_dir/mount_cк C_dir?

РЕДАКТИРОВАТЬ: эта проблема не появляется в Ubuntu. Точнее говоря, он отлично работает на моем Ubuntu 14.04, но не работает на Fedora 23 и CentOS 7. Почему есть разница и как обходятся Fedora и CentOS?

РЕДАКТИРОВАТЬ: еще немного информации о реальной проблеме, которую я пытаюсь решить. Я пытался создать песочницу и использовал --rbindдля монтирования /devи /procв песочницу. При уничтожении песочницы кажется, что я не могу полностью уничтожить ее, потому что размонтирование <sandbox-root>/dev/ptsв FC23 и CentOS7 размонтируется /dev/pts, после чего мои оболочки и соединения SSH зависают, и я должен перезагрузить машину. Вот почему я спрашиваю, есть ли способ размонтировать монтирования --rbind, не затрагивая подмонтирования.

я могу сделать
источник
Этот вопрос также был поднят по адресу bugs.launchpad.net/ubuntu/+source/util-linux/+bug/759394
imz - Иван

Ответы:

9

Я нашел решение сам. Мне просто нужно использовать --make-rslaveдля внесения каких-либо изменений, чтобы A_dir/mount_bне распространяться обратно B_dir:

sudo mount --make-rslave A_dir/mount_b
sudo umount -R A_dir/mount_b

См. Раздел man-страницы по монтированию Общие операции с поддеревом .

я могу сделать
источник
1
В некоторых системах можно даже объединить mount --rbind src target --make-rslaveв одном вызове; некоторые системы раньше запрещали мне это.
imz - Иван Захарьящев