Làm cách nào để ngắt kết nối hệ thống tập tin trước đây của chroot'd?


17

Tôi đang sử dụng hệ thống cứu hộ (tương tự như đĩa CD trực tiếp) để khắc phục một số sự cố với máy chủ Debian của mình, như thế:

# mkdir -p /mnt/rescue
# mount /dev/md2 /mnt/rescue
# mount --bind /dev /mnt/rescue/dev/
# mount --bind /proc /mnt/rescue/proc/
# mount --bind /sys /mnt/rescue/sys/

Bây giờ tôi có thể chroot đến /mnt/rescue- nhưng sau khi tôi hoàn thành, làm thế nào để ngắt kết nối lại hệ thống tập tin?

umount: /mnt/rescue: target is busy.
    (In some cases useful info about processes that use
     the device is found by lsof(8) or fuser(1))

Tôi đoán đó là bởi vì dev, procsysbị ràng buộc với hệ thống tập tin được gắn kết. Nhưng cũng không thể gỡ chúng ra ...


Điều gì xảy ra khi bạn cố gắng để unmount /mnt/rescue/proc? Bạn có chắc là bạn vẫn không có quy trình chạy trong đó chrootkhông?
Mat

Hãy thử lsof /mnt/rescuexem quá trình đang sử dụng thư mục đó.
Martín Canaval

Bạn cần phải bỏ vỏ chroot trước khi tắt.
vonbrand

Câu trả lời:


14
  1. Trước tiên bạn phải thoát phiên chroot, thường exitthì sẽ đơn giản :

    exit
    
  2. Sau đó, umount TẤT CẢ các thư mục bị ràng buộc:

    umount /mnt/rescue/dev/
    umount /mnt/rescue/proc/
    umount /mnt/rescue/sys/
    
  3. Sau đó:

    umount /mnt/rescue
    

Trong trường hợp bạn lo lắng synckhông được sử dụng ở đây, hãy lưu ý rằng nó không ảnh hưởng đến việc có thể kết nối được không. Unmounting tuôn ra đang chờ xử lý bằng văn bản (nó phải như vậy, bởi vì sẽ không có nơi nào để họ đi sau khi không đếm được). Sự hiện diện của một quá trình chroot là không liên quan (ngoại trừ trong đó nó ngăn chặn việc không đếm được). Trong hoạt động hệ thống bình thường, đồng bộ hóa không có hiệu quả quan sát được. đồng bộ hóa chỉ tạo ra sự khác biệt nếu một thiết bị bị ngắt kết nối vật lý mà không bị ngắt kết nối hoặc nếu hệ thống gặp sự cố trong khi thiết bị được gắn.


1
cảm ơn, đó là ... lỗi của tôi là cố gắng ngắt kết nối / sys / thay vì / mnt / cứu / sys / ...
Afr

2
Điều syncnày là hoàn toàn vô dụng.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Bạn có thể giải thích nhiều hơn tại sao lại syncvô dụng? Nó trở nên vô dụng trong kernel hiện tại? Hay chỉ trong trường hợp này (chế độ cứu hộ)? Tôi đặt nó ở đó chỉ trong trường hợp có số lượng lớn ghi vào đĩa sẽ ngăn chặn sau khi thoát khỏi chroot.
John Siu

4
@JohnSiu synckhông có ảnh hưởng đến việc có thể vượt qua được không. Unmounting tuôn ra đang chờ xử lý bằng văn bản (nó phải như vậy, bởi vì sẽ không có nơi nào để họ đi sau khi không đếm được). Sự hiện diện của một quá trình chroot là không liên quan (ngoại trừ trong đó nó ngăn chặn việc không đếm được). Trong hoạt động hệ thống bình thường, synckhông có hiệu ứng quan sát. syncchỉ tạo sự khác biệt nếu thiết bị bị ngắt kết nối vật lý mà không bị ngắt kết nối hoặc nếu hệ thống gặp sự cố trong khi thiết bị được gắn.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Tôi hiểu quan điểm của bạn bây giờ. Cảm ơn bạn!!
John Siu

14

Thực hiện lệnh dưới đây để buộc và tách hệ thống tệp khỏi hệ thống phân cấp hệ thống tệp và dọn sạch tất cả các tham chiếu đến hệ thống tệp ngay khi nó không còn bận nữa.

umount -lf /mnt/rescue

4

Lý do tại sao bạn nhận được 'mục tiêu là bận rộn.' thông báo là bởi vì điểm gắn kết ( /mnt/rescue) được mở trong trình duyệt tệp hoặc trong phiên cuối và cũng là thứ tự của quá trình dev/ptsngắt kết nối (ở đây tôi muốn nói là nên được bỏ qua trước đó dev/)

Chà, để thành công vượt qua tất cả các fs ở đó:

  • Hãy chắc chắn rằng mountpoint không mở trong trình duyệt tệp!
  • Sau khi thoát khỏi thư mục thay đổi chroot ra khỏi chroot dir ( cd)!
  • Umount fs tôn trọng trật tự dev/pts => dev/ => proc/ => sys/:

    sudo umount / mnt / cứu / dev / pts
    sudo umount / mnt / cứu / dev
    sudo umount / mnt / cứu / Proc
    sudo umount / mnt / cứu / sys
    sudo umount / mnt / cứu


2

Đây là cách tôi thực hiện với schrootlệnh trên Ubuntu phiên bản 10.04 trở lên:

# list all sessions:
schroot --list --all-sessions
# if the above command does not work, just type `mount`. The bind mount
# points with something like this in the mount path is the session name you want to get:
precise-a4aac8e0-663c-4fec-8fb2-16e4b06557e3 (<chroot_name>-<id>)

# now run this to properly end the session:
schroot -e -c precise-ca6c72e4-0e9f-4721-8a0e-cca359e2c2fd

0

Thoát khỏi chroot. Trong hệ thống máy chủ, lệnh 'mount' sẽ hiển thị tất cả đường dẫn được gắn kết. (Bao gồm những đường dẫn được gắn trong chroot.) Ví dụ:

binfmt_misc on /home/user/projects/jsroot/proc/sys/fs/binfmt_misc

Sau đó vào môi trường chroot. Trong môi trường chroot chạy unmount để unmount tất cả các đường dẫn theo thứ tự. (Đường dẫn phụ phải được ngắt kết nối trước đường dẫn cha.)

unmount /proc/sys/fs/binfmt_misc
unmount /proc/sys
unmount /proc
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.