Wie kann ich ein früher chroot-basiertes Dateisystem aushängen?


17

Ich benutze ein Rescue-Live-System (ähnlich einer Live-CD), um einige Probleme mit meinem Debian-Server zu beheben:

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

Jetzt kann ich chroot to /mnt/rescue- aber wie kann ich das Dateisystem wieder aushängen, nachdem ich fertig bin?

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

Ich denke, es liegt daran dev, procund syssind an das gemountete Dateisystem gebunden. Aber es ist auch nicht möglich, sie abzunehmen ...


Was passiert, wenn Sie versuchen, die Verbindung zu trennen /mnt/rescue/proc? Sind Sie sicher, dass darin noch keine Prozesse ausgeführt werden chroot?
Mat

Versuchen Sie festzustellen lsof /mnt/rescue, welcher Prozess diesen Ordner verwendet.
Martín Canaval

Sie müssen die Chroot-Shell vor dem Herunterfahren verlassen.
Vonbrand

Antworten:


14
  1. Sie müssen zuerst die chroot-Sitzung beenden, normalerweise reicht ein einfacher exitBefehl aus:

    exit
    
  2. Dann mounten Sie ALLE gebundenen Verzeichnisse:

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

    umount /mnt/rescue
    

Falls Sie befürchtet haben, dass syncdas hier nicht verwendet wird, beachten Sie, dass es keinen Einfluss darauf hat, ob das Abhängen möglich ist. Das Aufheben des Ladevorgangs für ausstehende Schreibvorgänge muss auf jeden Fall erfolgen (da sie nach dem Aufheben des Ladevorgangs nirgendwo mehr hingehen können). Das Vorhandensein eines Chroot-Prozesses ist irrelevant (mit der Ausnahme, dass dadurch das Aushängen verhindert wird). Im normalen Systembetrieb hat die Synchronisierung keinen erkennbaren Effekt. Die Synchronisierung macht nur dann einen Unterschied, wenn ein Gerät physisch getrennt wird, ohne dass es abgemeldet wurde, oder wenn das System abstürzt, während das Gerät gemountet ist.


1
danke, das war's ... mein fehler war es, / sys / anstatt / mnt / rescue / sys / ... zu
entfernen

2
Das syncist total nutzlos.
Gilles 'SO- hör auf, böse zu sein'

@ Gilles Kannst du ein bisschen mehr ausarbeiten, warum synces nutzlos ist? Wird es im aktuellen Kernel unbrauchbar? Oder nur in diesem Fall (Rettungsmodus)? Ich lege es dort nur für den Fall, dass es riesige ausstehende Schreibvorgänge auf die Festplatte gibt, die ein Umount nach dem Beenden von chroot verhindern.
John Siu

4
@JohnSiu synchat keinen Einfluss darauf, ob eine Demontage möglich ist. Das Aufheben des Ladevorgangs für ausstehende Schreibvorgänge muss auf jeden Fall erfolgen (da sie nach dem Aufheben des Ladevorgangs nirgendwo mehr hingehen können). Das Vorhandensein eines Chroot-Prozesses ist irrelevant (mit der Ausnahme, dass dadurch das Aushängen verhindert wird). Hat im normalen Systembetrieb synckeine feststellbaren Auswirkungen. syncDies macht nur dann einen Unterschied, wenn ein Gerät physisch getrennt wird, ohne dass es abgemeldet wurde, oder wenn das System abstürzt, während das Gerät gemountet ist.
Gilles 'SO- hör auf böse zu sein'

@ Gilles Ich verstehe deinen Punkt jetzt. Vielen Dank!!
John Siu

14

Führen Sie den folgenden Befehl aus, um das Dateisystem zu erzwingen und von der Dateisystemhierarchie zu trennen und alle Verweise auf das Dateisystem zu bereinigen, sobald es nicht mehr ausgelastet ist.

umount -lf /mnt/rescue

4

Der Grund, warum Sie das Ziel erhalten, ist beschäftigt. Meldung ist, weil der Mount Point ( /mnt/rescue) in einem Dateibrowser oder in einer Terminalsitzung geöffnet ist, und auch die Reihenfolge des Unmounting-Vorgangs (hier meine ich, dev/ptssollte vorher umounted werden dev/)

Nun, um alle fs dort erfolgreich umounten zu können:

  • Stellen Sie sicher, dass der Mountpoint in einem Dateibrowser nicht geöffnet ist!
  • Nach dem Verlassen von chroot wechsle das Verzeichnis aus chroot dir ( cd)!
  • Anzahl bei Einhaltung der Bestellung dev/pts => dev/ => proc/ => sys/:

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


2

So mache ich mit dem schrootBefehl unter Ubuntu ab Version 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 verlassen. Auf dem Host-System zeigt der Befehl 'mount' den gesamten gemounteten Pfad an. (Beinhaltet den Pfad, der in chroot eingebunden ist.) Zum Beispiel:

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

Dann betreten Sie die Chroot-Umgebung. Führen Sie in der Chroot-Umgebung "Unmount" aus, um die Bereitstellung aller Pfade in der angegebenen Reihenfolge aufzuheben. (Der Unterpfad muss vor dem übergeordneten Pfad deaktiviert werden.)

unmount /proc/sys/fs/binfmt_misc
unmount /proc/sys
unmount /proc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.