Ngắt kết nối giá treo mà không ảnh hưởng đến giá đỡ ban đầu


11

Đã hỏi về serverfault nhưng không nhận được đủ sự chú ý, vì vậy đã đăng lại ở đây, với hy vọng một số người ở đây biết câu trả lời.

Có một câu hỏi khác thảo luận về việc gắn kết rbind gắn kết, nhưng giải pháp có hiệu quả không mong muốn. Hãy xem xét cách bố trí thư mục sau:

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

Bây giờ tôi ràng buộc C_dirđể B_dir/mount_cvà 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

Bây giờ umount A_dir/mount_bsẽ thất bại, điều này không đáng ngạc nhiên. Theo các câu trả lời ở khắp mọi nơi trên web, umount A_dir/mount_b/mount_ctrước tiên chúng ta cần phải có umount A_dir/mount_b. Tuy nhiên, umount A_dir/mount_b/mount_ccũng sẽ ngắt kết nối B_dir/mount_c, điều không mong muốn:

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

Bây giờ câu hỏi của tôi là, làm thế nào để unmount A_dir/mount_bnhưng lại B_dirkhông bị ảnh hưởng, tức là vẫn còn một ràng buộc B_dir/mount_cđể C_dir?

EDIT: vấn đề này dường như không xuất hiện trong Ubuntu. Cụ thể hơn, nó hoạt động tốt trên Ubuntu 14.04 của tôi nhưng không hoạt động trên Fedora 23 và CentOS 7. Tại sao có sự khác biệt và những gì đang diễn ra xung quanh Fedora và CentOS?

EDIT: một số thông tin thêm về vấn đề thực tế mà tôi đang cố gắng giải quyết. Tôi đã cố gắng tạo ra một hộp cát và được sử dụng --rbindđể gắn /dev/procvào hộp cát. Khi phá hủy hộp cát, có vẻ như tôi không thể phá hủy nó một cách sạch sẽ vì việc ngắt kết nối <sandbox-root>/dev/ptstrong FC23 và CentOS7 sẽ ngắt kết nối /dev/pts, sau đó các kết nối vỏ và SSH của tôi bị treo và tôi phải khởi động lại máy. Đó là lý do tại sao tôi hỏi liệu có cách nào để tháo gỡ các gắn kết --rbind mà không ảnh hưởng đến các mục phụ.


Vấn đề này cũng đã được đưa lên tại bugs.launchpad.net/ubuntu/+source/util-linux/+bug/759394
imz - Ivan Zakharyaschev

Câu trả lời:


9

Tôi tự tìm giải pháp. Tôi chỉ cần sử dụng --make-rslaveđể thực hiện bất kỳ thay đổi nào trong việc A_dir/mount_bkhông truyền trở lại B_dir:

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

Xem phần người đàn ông gắn kết Các hoạt động cây con được chia sẻ .


1
Trong một số hệ thống, người ta thậm chí có thể kết hợp mount --rbind src target --make-rslavetrong một cuộc gọi; một số hệ thống được sử dụng để không cho phép điều này cho tôi.
imz - Ivan Zakharyaschev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.