Wie kann ich die Dateien auflisten, die verhindern, dass sie erneut schreibgeschützt bereitgestellt werden?
A) fuser
finden Sie in der psmisc
Packung; Dies ist ein Anwendungsfall, in dem ich fuser
Shines & als nützlicher empfinde lsof
.
# fuser -v -m / 2>&1 | grep '[Ff]r.e'
Daraufhin werden alle Prozesse angezeigt, bei denen Dateien zum Lesen (f) und Schreiben (F) geöffnet sind. Die Dateien, die verhindern würden, dass sie wieder in den schreibgeschützten Zustand versetzt werden, sind solche, die zum Schreiben geöffnet werden (F).
Tötet die Prozesse , die ein sind ausführbar ist , laufen mit Root - Verzeichnis - Dateien zum Schreiben geöffnet ., Dh
# for fupid in $(fuser -v -m / 2>&1 | grep Fr.e | awk '{print $2}'); do kill $fupid; done
Das steht über den systemd
Kommentaren mit einer Einschränkung. Wennsystemd
es init
dann ist, fuser
wird es sehen und es gibt andere Überlegungen. Beim systemd
Laufen können Prozesse hinter Ihrem Rücken (neu) gestartet werden, auch wenn sie gerade identifiziert und getötet wurden fuser
. systemd
ist viel weiter fortgeschritten als die traditionelle sysvinit
.
B) Das UPDATE in der Beschreibung gibt an, dass das System nur ... init
und getty
noch läuft ...
Ich sehe den Kommentar, der besagt, dass das System nicht verwendet systemd
, sondern verwendet init
. Auf der Strecke systemd
ist init
. In dem Kommentar wurde nicht ausdrücklich darauf hingewiesen sysvinit
, daher gehe ich davon aus, dass das betreffende System möglicherweise die Standardausdehnung systemd
für verwendet init
. Oder dass andere Leute, die über diesen Beitrag stolpern und Stretch verwenden systemd
, diesen Teil nützlich finden.
Per dem Debian - Wiki ,
Der Systeminitialisierungsprozess wird vom init-Daemon ausgeführt. In Squeeze und früheren Versionen wird dieser Dämon vom sysvinit-Paket bereitgestellt, und es werden keine Alternativen unterstützt. In Wheezy ist der Standard-Init-Daemon immer nochsysvinit
, aber eine "Technologie-Vorschau" von systemd ist verfügbar. In Jessie und stretch ist das Standard-Init-Systemsystemd
, der Wechsel zu sysvinit wird jedoch unterstützt.
Seit Jessie wird nur systemd vollständig unterstützt. sysvinit wird meistens unterstützt, aber Debian-Pakete sind nicht erforderlich, um sysvinit-Startskripte bereitzustellen. runit ist ebenfalls im Paket enthalten, hat jedoch nicht die gleiche Test- und Unterstützungsstufe wie die anderen erhalten und wird derzeit nicht als PID 1 unterstützt.
Mit systemd
Laufen müssen einige zusätzliche Schritte unternommen werden, um das Programm freizugeben, damit es problemlos erneut bereitgestellt werden kann.
Es ist wahrscheinlich system.slice
, dass Dateien für systemd-journald.service
oder geöffnet sind systemd-udevd.service
(beide haben Socket-Abhängigkeiten). Oder, wenn NetworkManager
es läuft, kann es erneut erscheinen, dhclient
was Leases in / var / ... schreibt (& / var / ist nicht immer sein eigenes Gerät), etc. findet fuser
möglicherweise & Sie töten dhclient
aberNetworkManager
es beginnt gleich wieder nach oben.
Die Moral ist, dass viele Dinge automatisiert sind, die "wollen" (und noch mehr mit "wollen") systemd
).
Um sicherzugehen, wenn es machbar ist, wird das systemd
Äquivalent von Laufstufe 1 mit rescue.target
(und) abgeglichenrunlevel1.target
ist ein symbolischer Link zu rescue.target
) .
1) Beginnen Sie, indem Sie das System von isolieren rescue.target
# systemctl isolate rescue.target
Es sollte Sie auffordern, das root-Passwort einzugeben. Folgen Sie den Anweisungen auf dem Bildschirm.
2) Finde in der Rettungshülle heraus, was du willst.
# systemctl show -p Wants /
Normalerweise ist es system.slice
; alles aufhalten, was will. z.B
# systemctl stop system.slice
3) An diesem Punkt sollte die Remount nicht berichten mount: / is busy
und mount -o remount,ro /
soll funktionieren. Wenn nicht, überprüfen Sie erneut mit fuser
.
4) FWIW; Ich habe auch mal gesehen, wann ein umount
Fehler auftritt, wenn / wenn ein anderes Gerät in einem Unterverzeichnis eines anderen Mounts gemountet ist, dh verschachtelte Mounts. Zum Beispiel umount /
würde fehlschlagen, wenn / var / oder / boot / auf einem anderen Gerät (und gemountet) ist. Sollte mount -o remount,ro /
aber in diesem Fall noch funktionieren.
lsblk
kann hilfreich sein, um verschachtelte Reittiere zu visualisieren.
Warum listet lsof + L1 keine offenen Dateien mehr auf, deren Verknüpfung aufgehoben wurde?
Da sie nicht verfügbar sind (Sockets oder die meisten FIFOs und Pipes), sind sie nicht mehr geöffnet (der übergeordnete Prozess hat den Dateideskriptor geschlossen) oder sie haben (immer noch) eine Linkanzahl größer als 1.
man lsof (8) details ...
+ | -L [l]
Diese Option aktiviert ('+') oder deaktiviert ('-') die Auflistung der Dateiverknüpfungszahlen, sofern diese verfügbar sind - z. B. sind sie nicht für Sockets oder die meisten FIFOs und Pipes verfügbar.
Wenn + L ohne folgende Nummer angegeben wird, werden alle Verbindungszählungen aufgelistet. Wenn -L angegeben ist (Standardeinstellung), werden keine Verbindungszählungen aufgelistet.
Wenn auf + L eine Zahl folgt, werden nur Dateien aufgelistet, deren Linkanzahl unter dieser Zahl liegt . (Auf -L darf keine Nummer folgen.) Eine Angabe der Form '' + L1 '' wählt offene Dateien aus, die nicht verknüpft wurden. Eine Spezifikation des Formulars +aL1 <file_system>
wählt nicht verknüpfte geöffnete Dateien im angegebenen Dateisystem aus.
w
oderu
in derFD
Spalte derlsof
Ausgabe oder beispielsweise nachF
in der Ausgabe vonfuser -vm /
. Ich kann Ihnen jedoch keine vollständige Liste geben. Möglicherweise möchten Sie auch das Needrestart- Paket installieren .