วิธียกเลิกการต่อเชื่อมระบบไฟล์ chroot'd เดิม?


17

ฉันใช้ระบบช่วยเหลือชีวิต (คล้ายกับ live-cd) เพื่อแก้ไขปัญหาบางอย่างกับเซิร์ฟเวอร์ Debian ของฉันเช่นนั้น:

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

ตอนนี้ฉันสามารถ chroot ถึง/mnt/rescue- แต่หลังจากฉันทำเสร็จแล้วจะยกเลิกการต่อเชื่อมระบบไฟล์อีกครั้งได้อย่างไร?

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

ผมคิดว่ามันเป็นเพราะdev, procและsysจะผูกพันที่จะติดตั้งระบบไฟล์ แต่มันเป็นไปไม่ได้ที่จะยกเลิกการต่อเชื่อมกับพวกเขา ...


เกิดอะไรขึ้นเมื่อคุณพยายามที่จะยกเลิกการต่อเชื่อม/mnt/rescue/proc? คุณแน่ใจว่าคุณไม่ได้ยังคงมีกระบวนการทำงานในการที่chroot?
จ้า

ลองlsof /mnt/rescueดูว่ากระบวนการใดใช้โฟลเดอร์นั้น
Martín Canaval

คุณต้องออกจากเปลือก chrooted ก่อนที่จะปิด
vonbrand

คำตอบ:


15
  1. คุณต้องออกจากเซสชัน chroot ก่อนโดยปกติแล้ววิธีการง่าย ๆexit:

    exit
    
  2. จากนั้นถอนติดตั้งไดเรกทอรีที่ผูกมัดทั้งหมด:

    umount /mnt/rescue/dev/
    umount /mnt/rescue/proc/
    umount /mnt/rescue/sys/
    
  3. แล้ว:

    umount /mnt/rescue
    

ในกรณีที่คุณกังวลsyncว่าไม่ได้ใช้ที่นี่โปรดทราบว่าไม่มีผลกระทบต่อการยกเลิกการต่อเชื่อมที่เป็นไปได้ การถอนติดตั้งฟลัชที่ค้างอยู่เขียนต่อไป (ต้องทำเพราะไม่มีที่ไหนให้พวกเขาทำหลังจากเลิกเมานท์) การมีอยู่ของกระบวนการ chrooted นั้นไม่เกี่ยวข้อง (ยกเว้นว่าจะป้องกันการยกเลิกการต่อเชื่อม) ในการทำงานของระบบปกติการซิงค์ไม่มีผลที่สังเกตได้ การซิงค์จะทำให้เกิดความแตกต่างถ้าอุปกรณ์ถูกตัดการเชื่อมต่อทางกายภาพโดยไม่ต้องถูกถอดออกหรือระบบล่มในขณะที่ติดตั้งอุปกรณ์


1
ขอบคุณนั่นแหล่ะ ... ความผิดพลาดของฉันคือพยายามเลิกเมานต์ / sys / แทน / mnt / rescue / sys / ...
Afr

2
syncเป็นไร้ประโยชน์โดยสิ้นเชิง
Gilles 'หยุดความชั่วร้าย'

@Gilles คุณสามารถอธิบายเพิ่มเติม abit เพิ่มเติมทำไมsyncไม่มีประโยชน์? มันไร้ประโยชน์ในเคอร์เนลปัจจุบันหรือไม่? หรือเฉพาะในกรณีนี้ (โหมดช่วยเหลือ)? ฉันใส่มันในกรณีที่มีขนาดใหญ่รอเขียนไปยังดิสก์ที่จะป้องกันไม่ให้นับหลังจากออก chroot
John Siu

4
@JohnSiu syncไม่มีผลกระทบต่อการยกเลิกการต่อเชื่อมที่เป็นไปได้ การถอนติดตั้งฟลัชที่ค้างอยู่เขียนต่อไป (ต้องทำเพราะไม่มีที่ไหนให้พวกเขาทำหลังจากเลิกเมานท์) การมีอยู่ของกระบวนการ chrooted นั้นไม่เกี่ยวข้อง (ยกเว้นว่าจะป้องกันการยกเลิกการต่อเชื่อม) ในการทำงานของระบบปกติsyncไม่มีผลกระทบที่สังเกตได้ syncสร้างความแตกต่างก็ต่อเมื่ออุปกรณ์ถูกตัดการเชื่อมต่อทางกายภาพโดยไม่ถูกถอดออกหรือระบบล่มในขณะที่ติดตั้งอุปกรณ์
Gilles 'หยุดความชั่วร้าย'

@Gilles ฉันเข้าใจประเด็นของคุณตอนนี้ ขอขอบคุณ!!
John Siu

14

ดำเนินการคำสั่งด้านล่างเพื่อบังคับและแยกระบบไฟล์ออกจากลำดับชั้นของระบบไฟล์และล้างการอ้างอิงทั้งหมดไปยังระบบไฟล์ทันทีที่ไม่ได้ยุ่งอีกต่อไป

umount -lf /mnt/rescue

4

สาเหตุที่ทำให้คุณได้รับ 'เป้าหมายไม่ว่าง' ข้อความเป็นเพราะจุดเชื่อมต่อ ( /mnt/rescue) เปิดในเบราว์เซอร์ไฟล์หรือในเทอร์มินัลเซสชั่นและยังลำดับของกระบวนการ unmounting (ที่นี่ฉันหมายถึงdev/ptsควร umounted ก่อนdev/)

เพื่อที่จะประสบความสำเร็จในการติดตั้ง fs ทั้งหมดที่นั่น:

  • ตรวจสอบให้แน่ใจว่าจุดเมานท์ไม่เปิดในเบราว์เซอร์ไฟล์!
  • หลังจากออกจากไดเรกทอรีการเปลี่ยนแปลง chroot ออกจาก chroot dir ( cd)!
  • จำนวน fs เคารพคำสั่งdev/pts => dev/ => proc/ => sys/:

    sudo umount / mnt / กู้ภัย / dev / pts
    sudo umount / mnt / กู้ภัย / dev
    sudo umount / mnt / กู้ภัย / proc
    sudo umount / mnt / กู้ภัย / sys
    sount umount / mnt / กู้ภัย


2

นี่คือวิธีที่ฉันทำกับschrootคำสั่งบน Ubuntu เวอร์ชัน 10.04 ขึ้นไป:

# 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

ออกจาก chroot ในระบบโฮสต์คำสั่ง 'mount' จะแสดงพา ธ ที่เมาท์ทั้งหมด (รวมเส้นทางเหล่านั้นซึ่งติดตั้งใน chroot) ตัวอย่างเช่น:

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

จากนั้นเข้าสู่สภาพแวดล้อม chroot ในสภาพแวดล้อม chroot ให้เรียก unmount เพื่อ unmount path ทั้งหมดตามลำดับ (พา ธ ย่อยต้องยกเลิกการต่อเชื่อมก่อนพา ธ พาเรนต์)

unmount /proc/sys/fs/binfmt_misc
unmount /proc/sys
unmount /proc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.