Frage Ist die Ausführung von sync (8) noch erforderlich, bevor Linux heruntergefahren wird?


Ich sehe immer noch, dass Leute die Verwendung von empfehlen sync; sync; sync; sleep 30; halt Beschwörungen, wenn es darum geht, Linux herunterzufahren oder neu zu starten.

Ich betreibe Linux seit seiner Einführung und obwohl dies das empfohlene Verfahren in den Tagen BSD 4.2 / 4.3 und SunOS 4 war, kann ich mich nicht erinnern, dass ich das mindestens während der letzten zehn Jahre tun musste, während denen ich wahrscheinlich durch Shutdown / Reboot von Linux vielleicht tausende Male gegangen.

Ich vermute, dass dies ein Anachronismus seit den Tagen ist, an denen der Kernel das Root-Dateisystem und andere kritische Dateisysteme auch im Einzelbenutzermodus (zB / tmp) nicht aushängen und synchronisieren konnte und es daher explizit zum Leeren angewiesen war so viele Daten wie möglich auf die Festplatte.

Heutzutage, ohne den relevanten Code in der Kernelquelle zu finden (durchforsten) http://lxr.linux.no und google), ich vermute, dass der Kernel schlau genug ist, um auch das Root-Dateisystem sauber zu entfernen, und das Dateisystem ist schlau genug, um eine Synchronisierung (2) durchzuführen, bevor es sich während eines normalen Prozesses ausschaltet shutdown/reboot/poweorff.

Das "sync; sync; sync" ist nur in extremen Fällen notwendig, in denen das Dateisystem nicht sauber aushängen kann (zB physischer Plattenfehler) oder das System sich in einem Zustand befindet, in dem nur ein direkter Neustart erzwungen wird (zB zu hohe Last) um es den Shutdown-Befehl planen zu lassen).

Ich mache auch nie das sync Verfahren vor dem Aushängen von Wechseldatenträgern und nie ein Problem zu treffen.

Ein weiteres Beispiel - Xen erlaubt es der DomU, gesendet zu werden shutdown Befehl aus dem Dom0, dies gilt als "sauberes Herunterfahren", ohne dass sich jemand einloggen und das Magische eingeben muss sync; sync; sync zuerst.

Habe ich recht oder hatte ich Glück für ein paar tausend Systemabschaltungen?


18
2018-02-21 08:05


Ursprung


Wie wäre es, ein readonly-Dateisystem als Read / Write neu zu montieren? Ich habe rootfs als readonly gemountet und ich montiere es als lesen / schreiben mit diesem Befehl: mount -o remount, rw / und wenn ich rootfs geändert habe, starte ich mount -o remount, ro / aber ich sehe einige Probleme, wenn ich fs überprüfe mit fsck. Ruft der zweite Befehl SYNC vor dem Mounten als Readonly auf?


Antworten:


Der Grund, warum Leute rennen würden sync; sync vor einem halt ist weil die halt Der Befehl würde das System bei älteren Linux-Systemen nicht sauber herunterfahren. Der richtige Weg, dies auf SYSVr4-Systemen zu tun, besteht immer darin, init anzuweisen, zu einer anderen Ausführungsebene zu wechseln.

BSD und SunOS 4 sind keine SYSVr4-Betriebssysteme, weshalb sie sich unterscheiden. Solaris (SunOS 5) ist SYSVr4 und Linux wählt die Bits des SYSVr4-Standards aus, den es verwenden möchte.

Die Verwendung von halt ist auf den meisten UNIX-Systemen eine ziemlich schlechte Methode (Linux ist eine der Ausnahmen), da es die Init-Skripte nicht ausführt, um Vorgänge wie das Anhalten von Prozessen und das Unmounten von Festplatten auszuführen.

Wenn Sie das garantieren können noch nie Verwenden Sie niemals ein UNIX-System als Linux, das Sie weiterhin verwenden können halt - Wenn es eine Chance gibt, dass Sie andere Unixe verwenden, dann würde ich empfehlen, sich daran zu gewöhnen init _runlevel_ oder shutdown.

Das shutdown Befehl sagt dem init Prozess, um seine Run-Ebene zu ändern Run Level - In diesem Fall führt init dann die Ausführung jedes der K * init-Skripte und S * init-Skripte aus, die dieser Ausführungsebene zugeordnet sind. Eines der Skripts in Run-Level 0 führt das Unmounten der Dateisysteme durch.

Unter Linux halt Befehl ruft nur die shutdown Befehl, es sei denn, der Run-Level ist bereits 0 (herunterfahren) oder 6 (Neustart) sowieso; also kein Verlust da.

Das Aushängen eines Dateisystems mit umount synchronisiert die Daten mit der Festplatte, bevor sie sie aushängen.

Wenn du gerannt bist sync; sync; halt Unter Linux haben Sie mit dem Status des Dateisystems recht, weil die Entwickler dafür gesorgt haben halt macht das Recht Ding; Es wäre jedoch korrekter zu verwenden: shutdown now


17
2018-02-21 09:43



Danke für die Erklärung. Nur um zu verdeutlichen, was du sagst - "die Entwickler haben sichergestellt, dass halt das Richtige macht" bedeutet, dass "halt" auch "sync" aufruft oder dass es die richtigen init-Skripte ausführt, die schließlich "sync" nennen? Wie wäre es, bereits im Einzelbenutzermodus zu sein und nur "halt" zu nennen? Bin ich in meiner Annahme richtig, dass das Linux Kernel ist einfach schlau genug, um nicht wirklich abrupt herunterzufahren, sondern wird alle Dateisysteme aushängen, bevor es herunterfährt? - Amos Shapira
halt Anrufe shutdown welches anruft umount die eine Synchronisierung durchführt. - DaveG
Danke DaveG. Sie sagen also, dass alles auf Benutzerebene geschieht und der Kernel nicht eigenständig Dateisysteme umount und synchronisiert? Auf jeden Fall klingt es, als wäre die Zeremonie "sync; shutdown" heute überflüssig. - Amos Shapira


Die Verwendung von mehreren sync Anrufe sollten dem Betriebssystem und den Festplatten Zeit zum Löschen der Schreibwarteschlangen geben. "sync; sync; sync" wurde nicht als nützlich erachtet; man hat es getan "sync<cr> sync<cr> sync<cr" und die Verzögerung, während Ihre ASR-33 den Zeilenumbruch / Zeilenumbruch sorgte, sorgte für genügend Verzögerung. Halt hat immer Sync aufgerufen; Die Frage war, ob es genug Zeit geben würde, die Warteschlangen zu löschen, bevor die Stromversorgung unterbrochen wurde.

Das Original-Poster sync; sleep 30 entspricht mehr dem, was beabsichtigt war.


7
2018-02-21 13:26





ich kann nur sprich, warum du ausgeben würdest sync mehrmals. Der Befehl plant die Flush-Operation auf die Festplatte, kehrt jedoch zurück, bevor die eigentliche Flush-Operation abgeschlossen ist. Irgendwelche nachfolgenden sync Der Befehl wird solange blockiert, bis ein offener Flush ausgeführt wird, bevor ein weiterer Flush geplant und beendet wird. Deshalb, sync; sync sorgt für eine synchrone Spülung. Sie müssen es nicht mehr als 2 Mal tun, noch bringen sleep in die Mischung.


7
2017-10-18 19:03





Diejenigen von euch sagen uns alle, dass „sync; sync; sync“ hat keinen Zweck, Ihr Alter sind aufschlussreich.

In den guten alten Zeiten, bevor Unix etwas für Teenager war, mussten wir TAPE für unsere Streaming / Backup-Bedürfnisse verwenden. Häufig würden wir ein bandbasiertes Dateisystem zum Streamen von Backups einrichten und so weiter. Dieses eine lange dünne Band aus magnetischem Plastikband war alles, was einige von uns hatten, um unsere Dateien zu speichern.

Der Befehl "sync; sync; sync" war eine Möglichkeit, dass diese alten Bandmaschinen aufgefordert wurden, sich selbst bis zum Ende zurückzuspulen (vor dem Herunterfahren) - sie hatten Firmware an Bord, die den Sync-Befehl empfangen würde (wie alle guten Dateisysteme) tun), und wenn es fast sofort von zwei weiteren Sync-Buffer-Befehlen gefolgt wäre, würde das Bandlaufwerk selbst dies so interpretieren, dass es "das Band zurückspulen und unmounten" bedeutet. Es gab keine Möglichkeit, das Bandlaufwerk über diese Methode zurückzuspulen, und es blieb irgendwie hängen. Diese Angewohnheit ging dann in das Wort über, als Festplatten verfügbarer wurden - uns verkrustete alte Operatoren nicht einfach neu zuordnen ( ) unser Muskelgedächtnis weißt du! Ich glaube, dass es Folklorestatus erreicht hat, kurz nachdem Bänder seltener geworden sind und Festplatten mehr verfügbar wurden, aber es hat immer noch seine Verwendung für diejenigen von uns mit Bandlaufwerken.


4
2018-03-22 09:57



Bänder sind Zeichengeräte. "mount" funktioniert auf Block-Geräten. Ich war dort (läuft "Dump" auf Vax 11/750 mit BSD 4.2 in der Mitte der 80er) und es gab keine solche Sache und läuft "Sync" auf dem Bandgerät. Das Band wird automatisch zurückgespult, wenn Sie es als einen Gerätenamen öffnen und dort bleiben, wo es war, wenn Sie es mit einem anderen geöffnet haben, und Sie könnten explizite Befehle mit "mt" senden, wenn Sie müssen. - Amos Shapira