Lepaskan mount rbind tanpa memengaruhi mount asli

11

Ditanyakan pada serverfault tetapi tidak mendapatkan perhatian yang cukup, jadi mem-posting ulang di sini, dengan harapan beberapa orang di sini tahu jawabannya.

Ada pertanyaan lain yang membahas tentang umounting rbind mounts, tetapi solusinya memiliki efek yang tidak diinginkan. Pertimbangkan tata letak direktori berikut:

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

Sekarang saya ikat C_dirke B_dir/mount_cdan ikat B_dirke 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

Sekarang umount A_dir/mount_bakan gagal, yang tidak mengejutkan. Menurut jawaban di mana-mana di web, kita harus umount A_dir/mount_b/mount_cterlebih dahulu umount A_dir/mount_b. Namun, umount A_dir/mount_b/mount_cjuga akan melepas B_dir/mount_c, yang tidak diinginkan:

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

Sekarang pertanyaan saya adalah, bagaimana cara unmount A_dir/mount_btetapi meninggalkan B_dirterpengaruh, yaitu masih mengikat B_dir/mount_cke C_dir?

EDIT: masalah ini tampaknya tidak muncul di Ubuntu. Lebih khusus, ini berfungsi dengan baik pada Ubuntu 14.04 saya tetapi tidak bekerja pada Fedora 23 dan CentOS 7. Mengapa ada perbedaan dan apa yang bekerja untuk Fedora dan CentOS?

EDIT: beberapa informasi lebih lanjut tentang masalah aktual yang saya coba selesaikan. Saya mencoba membuat kotak pasir dan digunakan --rbinduntuk memasang /devdan /procke kotak pasir. Saat menghancurkan kotak pasir, sepertinya saya tidak bisa menghancurkannya dengan bersih karena <sandbox-root>/dev/ptsmelepas di FC23 dan CentOS7 akan melepas /dev/pts, setelah itu koneksi shell dan SSH saya hang dan saya harus me-reboot mesin. Itu sebabnya saya bertanya apakah ada cara untuk meng-unmount mount --rbind tanpa memengaruhi submount.

dapat saya lakukan
sumber
Masalah ini juga telah diangkat di bugs.launchpad.net/ubuntu/+source/util-linux/+bug/759394
imz - Ivan Zakharyaschev

Jawaban:

9

Saya menemukan solusinya sendiri. Saya hanya perlu menggunakan --make-rslaveuntuk membuat perubahan A_dir/mount_btidak menyebar kembali ke B_dir:

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

Lihat bagian man mount page Operasi subtree bersama .

dapat saya lakukan
sumber
1
Dalam beberapa sistem, seseorang bahkan dapat menggabungkan mount --rbind src target --make-rslavedalam satu panggilan; beberapa sistem digunakan untuk melarang ini untuk saya.
imz - Ivan Zakharyaschev