"Mount: / is busy", wenn ich versuche, als schreibgeschützt zu mounten, damit ich null ausführen kann

36

Ich versuche zerofreeunter Ubuntu 11.04 zu laufen, damit ich das VirtualBox-VDI-Image komprimieren kann:

VBoxManage modifyhd Ubuntu.vdi --compact

Zum Ausführen muss zerofreedas Disk-Image als schreibgeschützt gemountet sein. Ich folge diesen Anweisungen, die besagen, dass diese verwendet werden müssen, um die Bereitstellung im Wiederherstellungsmodus als schreibgeschützt wieder aufzunehmen (Aufforderung "In Root-Shell ablegen"):

mount -n -o remount,ro -t ext2 /dev/sda1 /

Aber wenn ich das tue, bekomme ich den Fehler:

mount: / is busy

Irgendwelche Ideen, wie das geht?

Follow-up : Das Befolgen der Antwort von Jari und dieses Posts durch Ausführen dieser Befehle behebt das Problem.

service rsyslog stop
service network-manager stop
killall dhclient
Wellenförmige Krabbe
quelle
4
Die Manpage für ZeroFree schlägt vor zu laufen telinit 1und das hat das Problem für mich gelöst.
Alex Ryan

Antworten:

23

Einige Prozesse halten Dateien zum Schreiben offen. Dies können zum Beispiel Programme sein, die Protokolle schreiben, wie zum Beispiel rsyslogdNetzwerktools dhclientoder ähnliches . Das Herunterfahren nacheinander und das Ausprobieren des Remounts könnten funktionieren.

Sie können Prozesse finden, die bestimmte Dateien verwenden, indem Sie das Programm verwenden fuser. Beispielsweise fuser -v -m /wird eine Liste von Prozessen zurückgegeben. Ich bin mir jedoch nicht sicher, ob es einer davon ist, der das Dateisystem beschäftigt.

Jari Laamanen
quelle
2
Bei Prozessen, bei denen Dateien im Schreibmodus geöffnet sind, werden Fdie Zugriffsflags in der fuserAusgabe groß geschrieben.
Jan Hudec
21

Sie können das Dateisystem nur dann schreibgeschützt erneut bereitstellen, wenn kein Prozess vorhanden ist, bei dem eine Datei zum Schreiben geöffnet ist. Führen Sie lsof /den Befehl aus, um festzustellen, für welche Prozesse Dateien im Root-Dateisystem geöffnet sind. Zum Schreiben geöffnete Dateien werden in der FDSpalte angezeigt . Sie können diese mit filtern

lsof / | awk '$4 ~ /[0-9].*w/'

Um die Prozess-IDs automatisch zu filtern, analysieren Sie die Ausgabe von lsof -F pa:

lsof -F pa /home | awk '/^p/ {pid = substr($0, 2)} /^a.*w/ {print pid}'
Gilles 'SO - hör auf böse zu sein'
quelle
1
Mit dieser Lösung versucht, noch beschäftigt, kann es sein, dass eine Ressource auf diese Weise nicht angezeigt werden kann. Nachdem einige laufende Dienste gestoppt wurden, können Sie die fs erneut als schreibgeschützt bereitstellen.
Sam Liao
Ich habe alle Prozesse geschlossen, bei denen eine Datei zum Lesen, Schreiben oder für beide geöffnet war ( u), und es wird weiterhin "beschäftigt" angezeigt.
Hubro
12

Peter Antwort verbessern:

Ich konnte keine Prozesse beenden, die meinen Bereitstellungspunkt verwenden. Also habe ich das gemacht:

  • Bearbeiten /etc/fstab, um beim nächsten Start schreibgeschützt zu starten. Ex:/dev/sda1 / ext2 ro 0 1
  • Starten Sie eine Shell neu und öffnen Sie sie (z. B. Host-Taste + F2)
  • Führen Sie nullfrei aus

So stellen Sie Ihr System wieder her:

  • Einhängen mit Lese- / Schreiboption: $ mount -o remount,rw /dev/sda1
  • Bearbeiten Sie /etc/fstaberneut und stellen Sie Ihren ursprünglichen Wert wieder her

Extra: Öffnen Sie ggf. den Wiederherstellungsmodus in einem beliebigen Schritt:

  • Starten Sie neu
  • Halten Sie die Umschalttaste gedrückt, während die VM geladen wird
  • Erweiterte Optionen> Kernel-Option mit Wiederherstellungsmodus> Aufforderung zum Ablegen an die Root-Shell
Topera
quelle
2
Captain Obvious möchte hinzufügen: Stellen Sie sicher, dass Sie ZeroFree installieren, bevor Sie im Ro-Modus neu
starten
mit "Drop to Root Shell Prompt" und nullfrei: Dateisystem gemountet rw. Aber ich hatte kein Problem in anderen VM
Pawel Cioch
Dies hat nur bei mir funktioniert, als der /dev/sda1 / ext2 ro 0 1Eintrag ganz oben auf der Liste stand. Als ich es zum ersten Mal als letzten Eintrag eingegeben habe, hatte ich immer noch den Fehler "Bereitstellungspunkt belegt".
Afilina
6

Es gibt manchmal so viele Prozesse, die den Mount beschäftigen, dass es einfacher sein kann, einfach mit dem Mount-Schreibschutz neu zu starten.

Ändern Sie den Eintrag für das Root-Dateisystem in /etc/fstab, zum Beispiel:

/dev/sda1 / ext2 relatime,rw,errors=remount-ro 0 1

wird:

/dev/sda1 / ext2 noatime,ro 0 1

Beim Neustart wird das Dateisystem schreibgeschützt bereitgestellt, sodass Sie es ausführen zerofreekönnen.

Wenn Sie fertig sind, hängen Sie das Dateisystem mit Lese- / Schreibzugriff erneut ein ( mount -o remount,rw /) und machen Sie Ihre Änderungen an rückgängig /etc/fstab.

Inspiriert von https://wiki.debian.org/ReadonlyRoot#Enable_readonly_root

Peter Nowee
quelle
Groß! Zu /dev/sda1 / ext2 ro 0 1Ihrer Information , ich habe genau das verwendet und konnte im schreibgeschützten Modus booten.
Topera
5

Wenn Sie Ihr Gerät nach dem Beenden aller Dienste und Prozesse mit geöffneten Dateien immer noch nicht trennen oder erneut bereitstellen können, ist möglicherweise eine Auslagerungsdatei oder eine Auslagerungspartition vorhanden, die Ihr Gerät beschäftigt. Dies wird nicht mit fuseroder angezeigt lsof. Swap deaktivieren mit:

sudo swapoff -a

Sie könnten vorher prüfen und eine Zusammenfassung aller Swap-Partitionen oder Swap-Dateien anzeigen mit:

swapon -s

oder:

cat /proc/swaps

Alternativ zur Verwendung des Befehls sudo swapoff -akönnen Sie den Swap möglicherweise auch deaktivieren, indem Sie einen Dienst oder eine Systemeinheit stoppen . Beispielsweise:

sudo systemctl stop dphys-swapfile

oder:

sudo systemctl stop var-swap.swap

In meinem Fall war das Deaktivieren von Swap erforderlich, zusätzlich zum Stoppen aller Dienste und Prozesse mit zum Schreiben geöffneten Dateien, damit ich meine Root-Partition erneut als schreibgeschützt bereitstellen konnte, um sie fsckauf meiner Root-Partition ohne Neustart auszuführen . Dies war auf einem Raspberry Pi mit Raspbian Jessie notwendig.

Simon Gould
quelle
4

Wenn Sie systemd verwenden, werden die Schreibvorgänge auf der Festplatte durch Stoppen von systemd-journald gestoppt.

# systemctl stop systemd-journald.socket
# systemctl stop systemd-journald.service
# mount -o ro,remount /
Artur Pędziwilk
quelle
1
Bei mir starten beide Geräte sofort neu.
rld.
arbeitete für mich in "Erweiterte Optionen> Kernel-Option mit Wiederherstellungsmodus> Drop to Root Shell Prompt"
Pawel Cioch
3

Ok, da ist was ich getan habe

Zunächst war mein Ziel , meine /( ROOT) -Partition zu verkleinern , um eine weitere auf meiner Festplatte hinzuzufügen.

  • Nach dem Ausführen der Sitzung wird alles gesäubert und gesichert:

    init 1
    

    Mein Desktop verschwindet und ich bin jetzt auf der Linux-Konsole ...

    ...
    Give root password for maintenance or press CTRL+D to continue
    TheRootPassword_SomethingLike1234
    
  • Versuchen Sie nun, /im schreibgeschützten Modus bereitzustellen:

    mount -o remount,ro /
    mount: / is busy
    
  • Ok, von jetzt an bin ich dabei theoretisch im Einzelbenutzermodus , ps axzeige aber eine Menge anderer Prozesse !!

    Sie alle zu töten ist nicht wirklich möglich oder gefährlich ... ( kill 1ist verboten ... Ich habe keine Zeit zum Spielen psdoom :-)

    Das Einzige, was ich tun kann, ist System Request, dass ich zwei Möglichkeiten kenne: (siehe Documentation/sysrq.txtDatei in den Kerneldokumenten):

    1. Verwenden Sie zuerst den magic SysRq keyTastaturkernel-Trap:

      • AltGrgedrückt halten , dann gedrückt halten,
      • traf PrtScnnur einmal, aber nicht freigeben AltGr,
      • Wenn Sie snur einmal drücken, wird eine Emergency syncAnfrage an den Kernel und gesendet
      • Treffer u, dies wird eine Umount allAnfrage senden , dies wird alle eingebundenen Dateisysteme wieder einbinden,
      • Dann loslassen AltGr
    2. Oder über die Befehlszeile:

      echo s >/proc/sysrq-trigger
      echo u >/proc/sysrq-trigger
      
  • Dann könnte ich jetzt

    fsck -fC0 /dev/mapper/MyDisk-ROOT
    

    ....

...

F. Hauri
quelle
Hinweis: In Ordnung, wenn meine fsckerfolgreich war, habe ich ein Live-USB gebootet, um laufen zu können resize2fs... Diese Funktion ist nicht bereits implementiert ...
F. Hauri
Ich fsckweiß es nicht -f; Was würde das tun, null nicht referenzierte Blöcke?
16.
1
@ ᴠɪɴᴄᴇɴᴛ: Sein Schalter: Überprüfung erzwingen ext2, auch wenn das Dateisystem sauber zu sein scheint. fsck-f
F. Hauri
1

Für alle, die nur nach einer schnellen Lösung suchen, um sie in Ihr Terminal einzufügen ...

(Bevor Sie die folgenden Befehle ausführen, stellen Sie sicher, dass Sie die anderen Schritte wie ausgeführt haben telinit 1 .)

Fand dies :

fuser -mv /dev/sda1 > /tmp/sda1.pids
kill `cat /tmp/sda1.pids`

Befehle können Ihre Sitzung beenden, aber nachdem Sie zurückgekehrt sind, kann Ihre Partition erneut bereitgestellt werden.

DustWolf
quelle
1

Hängen Sie die VDI-Datei als zusätzliches und systemfremdes Volume an eine andere VirtualBox an. Dort können Sie es nach Bedarf (neu) mounten und die Nullung durchführen.

Angenommen , Sie möchten die VDI-Festplatte von VM1 (Virtual Machine 1) komprimieren . Dann brauchst du eine zweite VM2 . Das ist, :

  • Stellen Sie sicher, dass weder VM1 noch VM2 ausgeführt werden.
  • Vom VirtualBox Manager aus:

    • Wählen Sie VM2,
    • "Einstellungen" -> "Storage" -> "Add Hard Disk": "Wählen Sie es als zusätzliche Festplatte",

    • Wählen Sie die VDI-Datei von VM1 aus, die Sie komprimieren möchten. Tipp: Stellen Sie sicher, dass die gerade zu VM2 hinzugefügte Festplatte in der Startreihenfolge nach der Originalfestplatte von VM2 an zweiter Stelle steht.

    • VM2 starten: Jetzt können Sie das Volume von VM1 als zusätzliche Festplatte für VM2 (neu) mounten, da es in VM2 von keinem Prozess verwendet wird. Tipp: Öffnen Sie zuerst das Volume mit dem Folebrowser von Linux, der das Volume automatisch bereitstellt. Verwenden Sie dann, um mount -lzu ermitteln, welches _Device_im Befehl enthalten ist sudo mount -o remount,ro _Device_. In meinem Fall war das / dev / sdb1 . Der Befehl lautete also (1) sudo mount -o ro,remount /dev/sdb1und dann (2) sudo zerofree /dev/sdb1.

Anstelle von VM2 sollte man in der Lage sein, von einer Installationsdiskette wie einem .iso-Image zu booten und dies zu erreichen, ABER ich habe es nicht ausprobiert.

Löwe
quelle
0

Ich gehe davon aus, dass Sie versuchen, den mountBefehl in der VM auszuführen . Wie auch immer, Sie haben wahrscheinlich eine andere Root-Partition als der Autor des Forumsbeitrags.

Versuchen:

mount -o ro,remount /

Was nicht von der Option fs oder mount abhängt. Wenn dies nicht funktioniert, können Sie auch versuchen, Ihre Root-Fs mit grep " / " /proc/mountsoder zu ermitteln cat /proc/cmdline. Wenn Ihr Root-Dateisystem beispielsweise / dev / mapper / system-rootfs ist, können Sie Folgendes verwenden:

mount -o ro,remount /dev/mapper/system-rootfs /
Ulrich Dangel
quelle
0

Ich hatte dieses Problem, das mich davon abhielt, meinen Computer in den schreibgeschützten Modus zu versetzen. Die Lösung des Problems hat länger gedauert, als ich zugeben wollte ... Ich glaube, mein Problem war, dass ich Apache-Zeppelin am Laufen gelassen und vergessen habe. Stellen Sie sicher, dass Sie nicht dasselbe mit einem anderen Hosting-Dienst tun. Um das Problem zu lösen fuser -kill /, beendete ich alle Prozesse, die das Problem verursachen könnten, und konnte in den Ro-Modus zurückkehren.

ob1
quelle
0

Die Lösung für mich war, das Betriebssystem neu zu starten und "Wiederherstellungsmodus" aus dem GRUB-Startmenü zu wählen. Ab dem "Wiederherstellungsmodus" werden weniger Prozesse ausgeführt, und das erneute Bereitstellen mit Lesezugriff funktioniert einwandfrei.

Verfügt das System über eine Auslagerungsdatei im Root-Dateisystem (anstelle einer Auslagerungspartition), muss die Auslagerungsdatei auch vorübergehend mit ausgeschaltet werden swapoff -a.

Boann
quelle