Bagaimana cara meng-unmount sistem file chroot sebelumnya?

17

Saya menggunakan rescue-live-system (mirip dengan live-cd) untuk memperbaiki beberapa masalah dengan server Debian saya, seperti itu:

# 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/

Sekarang saya bisa chroot ke /mnt/rescue- tetapi setelah saya selesai, bagaimana cara unmount sistem file lagi?

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))

Saya kira itu karena dev, procdan systerikat pada sistem file yang dipasang. Tapi tidak mungkin untuk melepas mereka juga ...

Afr
sumber
Apa yang terjadi ketika Anda mencoba meng-unmount /mnt/rescue/proc? Apakah Anda yakin tidak memiliki proses yang berjalan di dalamnya chroot?
Mat
Coba lsof /mnt/rescuelihat proses apa yang menggunakan folder itu.
Martín Canaval
Anda harus meninggalkan cangkang chroot sebelum dimatikan.
vonbrand

Jawaban:

14
  1. Anda harus terlebih dahulu keluar dari sesi chroot, biasanya yang sederhana exitakan dilakukan:

    exit
    
  2. Kemudian umount SEMUA direktori yang diikat:

    umount /mnt/rescue/dev/
    umount /mnt/rescue/proc/
    umount /mnt/rescue/sys/
    
  3. Kemudian:

    umount /mnt/rescue
    

Jika Anda khawatir synctidak digunakan di sini, perhatikan bahwa itu tidak mempengaruhi apakah pelepasan kemungkinan dilakukan. Mengosongkan flushes yang tertunda tetap menulis (itu harus, karena tidak ada tempat bagi mereka untuk pergi setelah unmount) Kehadiran proses chroot tidak relevan (kecuali karena mencegah unmount). Dalam operasi sistem normal, sinkronisasi tidak memiliki efek yang dapat diamati. sinkronisasi hanya membuat perbedaan jika perangkat terputus secara fisik tanpa di-unmount atau jika sistem crash saat perangkat dipasang.

John Siu
sumber
1
terima kasih, itu saja ... kesalahan saya mencoba untuk meng-unmount / sys / bukan / mnt / rescue / sys / ...
Afr
2
Ini syncsama sekali tidak berguna.
Gilles 'SO- stop being evil'
@Gilles Bisakah Anda menjelaskan lebih lanjut mengapa synctidak berguna? Apakah itu menjadi tidak berguna di kernel saat ini? Atau hanya dalam hal ini (mode penyelamatan)? Saya meletakkannya di sana kalau-kalau ada menulis besar ke disk yang akan mencegah umount setelah keluar dari chroot.
John Siu
4
@JohnSiu synctidak memengaruhi apakah unmount bisa dilakukan. Mengosongkan flushes yang tertunda tetap menulis (itu harus, karena tidak ada tempat bagi mereka untuk pergi setelah unmount) Kehadiran proses chroot tidak relevan (kecuali karena mencegah unmount). Dalam operasi sistem normal, synctidak memiliki efek yang dapat diamati. synchanya membuat perbedaan jika perangkat terputus secara fisik tanpa di-unmount atau jika sistem crash saat perangkat dipasang.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Saya mengerti maksud Anda sekarang. Terima kasih!!
John Siu
14

Jalankan perintah di bawah ini untuk memaksa dan Melepaskan sistem file dari hierarki sistem file, dan membersihkan semua referensi ke sistem file segera setelah tidak lagi sibuk.

umount -lf /mnt/rescue
shgnInc
sumber
4

Alasan mengapa Anda mendapatkan 'target sedang sibuk.' pesan adalah karena titik mount ( /mnt/rescue) terbuka di browser file atau dalam sesi terminal, dan juga urutan proses unmount (di sini maksud saya dev/ptsharus di-umount sebelumnya dev/)

Nah, agar berhasil melakukan umount semua fs di sana:

  • Pastikan mountpoint tidak terbuka di browser file!
  • Setelah keluar dari chroot, ubah direktori keluar dari chroot dir ( cd)!
  • Umount fs menghormati pesanan dev/pts => dev/ => proc/ => sys/ :

    sudo umount / mnt / penyelamatan / dev / pts
    sudo umount / mnt / penyelamatan / dev
    sudo umount / mnt / penyelamatan / proc
    sudo umount / mnt / penyelamatan / sys
    sudo umount / mnt / penyelamatan

Jonah
sumber
2

Inilah yang saya lakukan dengan schrootperintah pada Ubuntu versi 10.04 ke atas:

# 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
biocyberman
sumber
0

Keluar dari chroot. Di sistem host, perintah 'mount' akan menampilkan semua jalur yang dipasang. (Termasuk jalur yang dipasang di chroot.) Misalnya:

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

Kemudian masukkan lingkungan chroot. Dalam lingkungan chroot, jalankan unmount untuk meng-unmount semua jalur secara berurutan. (Sub jalur harus dilepas sebelum jalur induk.)

unmount /proc/sys/fs/binfmt_misc
unmount /proc/sys
unmount /proc
Sulit Ditebak
sumber