Sind disk-Sektor schreibt atomic?
Geklärt Frage:
Wenn das OS sendet den Befehl zum schreiben eines Sektors auf der Festplatte ist es atomic? d.h. Schreiben von neuen Daten erfolgreich ist voll oder alte Daten, die intakt bleibt, sollte den power-fail-unmittelbar nach dem write-Befehl. I don ' T care, was passiert, in mehreren Sektor schreibt zerrissenen Seiten akzeptabel sind.
Alte Frage:
Sagen, Sie haben alte Daten X auf der Festplatte, die Sie schreiben, die neuen Daten Y über es, und ein Baum fällt auf Stromleitung während das schreiben. Mit keine Lust USV oder battery-backed-disk-controller, können Sie am Ende mit einer gerissenen Seite, wo die Daten auf der Festplatte ist ein Teil X und ein Teil Y Können Sie immer am Ende mit einer situation, wo die Daten auf der Festplatte ist, Teil X, Teil Y und Teil Müll?
Ich habe versucht zu verstehen, das design des SÄURE-Systeme wie Datenbanken, und zu meinem naiven denken, es scheint, firebird, welche nicht mit einem write-ahead-log setzt, dass ein bestimmtes schreiben nicht zerstören, die alten Daten (X) - nur nicht zu voll schreiben neuer Daten (Y). Das bedeutet, dass, wenn ein Teil von X überschrieben wird, wird nur der Teil von X, der überschrieben wird, kann geändert werden, nicht der Teil von X, die wir halten wollen.
Zu klären, das heißt, wenn Sie eine Seite Größe Puffer, sagen 4096 bytes, gefüllt mit der Hälfte von Y, die Hälfte von X, die wir halten wollen - und wir sagen dem OS zu schreiben, der Puffer über X, es gibt keine situation kurz von serious Festplatte Fehler, wo die Hälfte von X, die wir behalten möchten, ist beschädigt, während das schreiben.
- Ich würde sagen, dass die schlechteste was würde sein, dass der Kopf vibriert nur genug von der abstürzenden Baum zu schleudern mit dem Kopf Voraus in die zerbrechliche Keramik-Platte, so dass es zu zerspringen in eine million Stücke. Es geschah vor.
- Ja, das wäre ziemlich schlecht. Das ist vermutlich, warum haben Sie backups, spiegelung und vielleicht sogar die Replikation. Aber es ist nicht etwas, die software, wie eine Datenbank, sparen Sie aus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, zerrissene Seiten sind nicht das problem. Soweit ich weiß, alle Laufwerke haben genug Energie gespeichert, um fertig zu schreiben, den aktuellen Sektor, wenn der Strom ausfällt.
Das problem ist, dass alle Lügen.
Zumindest, wenn es um die Datenbank zu wissen, wenn eine Transaktion auf die Platte geschrieben, jeder liegt. Die Datenbank gibt einen fsync, und das Betriebssystem wird nur zurückgegeben, wenn alle ausstehenden schreibt begangen wurden, auf die Festplatte, richtig? Vielleicht auch nicht. Es ist üblich, vor allem mit RAID-Karten und/oder SATA-Laufwerke, für Ihr Programm gesagt werden, alles begangen hat (das ist, fsync gibt) und dennoch gibt es Daten, die noch nicht auf der Festplatte.
Können Sie versuchen, mit Brad diskchecker, um herauszufinden, ob die Plattform, die Sie verwenden werden für Ihre Datenbank überleben können, ziehen Sie den Stecker, ohne Daten zu verlieren. The bottom line: Wenn diskchecker ausfällt, die Plattform ist nicht sicher für die Ausführung einer Datenbank. Datenbanken mit SÄURE stützen, zu wissen, wenn eine Transaktion begangen wurde, zu sichern /speichern und wenn es nicht hat. Dies gilt unabhängig davon, ob die Datenbanken verwendet write-ahead-loggin (und wenn die Datenbank liefert dem Anwender die zimmerreserviereung, ohne das geschehen ein fsync, dann Transaktionen verloren gehen können, im Falle einer Panne, so sollte es nicht den Anspruch stellt, dass es ACID-Semantik).
Gibt es eine langer thread auf die Postgresql mailing-Liste diskutieren Haltbarkeit. Es beginnt Gespräch über SSDs, aber dann wird es in einen SATA-Laufwerke, SCSI-Laufwerke und Dateisysteme. Sie werden vielleicht überrascht sein zu erfahren, wie ausgesetzt, können Ihre Daten zum Verlust. Es ist ein guter thread für alle, die mit einer Datenbank, die Bedürfnisse der Haltbarkeit, nicht nur jene, auf denen Postgresql.
Niemand scheint zu vereinbaren, auf diese Frage. So verbrachte ich viel Zeit damit verschiedene Google-Anfragen, bis ich endlich eine Antwort gefunden.
von Dr. Stephen Tweedie, RedHat Mitarbeiter und linux-kernel-Dateisystem und virtueller Speicher-Entwickler in einer talk auf ext3 (die er selbst entwickelt) Transkript hier. Wenn jemand weiß, es würde ihn.
"Es reicht nicht aus nur zu schreiben, was zu der Zeitschrift, da gibt es doch einige mark in der Zeitschrift, die sagt: gut, (hat diese Zeitschrift Datensatz tatsächlich) ist diese Zeitschrift Datensatz wirklich repräsentiert eine vollständige Konsistenz der Festplatte? Und die Art und Weise Sie das tun, ist, indem er einige Atomare operation, die markiert, dass die Transaktion komplett auf Festplatte" [23m, 14s]
"Nun, Festplatten in diesen Tagen eigentlich machen diese garantiert. Wenn Sie beginnen, einen Schreibvorgang auf einer Festplatte, wenn dann auch noch der Strom ausfällt, in der Mitte des Sektors schreiben, die Festplatte hat genug Leistung zur Verfügung, und es kann tatsächlich stehlen Energie aus der Rotationsenergie der Spindel; es hat genug Kraft, um komplett das schreiben von der Branche, der gerade geschrieben wurde. In allen Fällen werden die Platten machen, die Garantie." [23m, 41s]
Nein, sind Sie nicht. Schlimmer noch, die Festplatten liegen kann und sagen: "die Daten werden geschrieben, wenn es ist in der Tat in den disk-cache, Sie unter Standard-Einstellungen. Aus performance-Gründen, dies kann wünschenswert sein, die (tatsächliche Haltbarkeit ist bis zu einer Größenordnung langsamer), aber es bedeutet, dass wenn Sie die macht verlieren, und der disk-cache wird nicht physisch geschrieben, deine Daten Weg sind.
Echte Haltbarkeit ist sowohl schwer und langsam leider, da Sie brauchen, um mindestens eine volle umdrehung pro schreiben, oder 2+ mit journalling/rückgängig machen. Diese Grenzen, die Sie um ein paar hundert DB-Transaktionen pro Sekunde, und erfordert die Deaktivierung von write-caching auf einem relativ geringen Niveau.
Für praktische Zwecke aber, der Unterschied ist nicht , dass große Sache in den meisten Fällen.
Finden Sie unter:
Menschen scheinen nicht zu Stimmen auf das, was passiert, während ein Sektor schreiben, wenn der Strom ausfällt. Vielleicht, weil es hängt von der verwendeten hardware, und auch das Dateisystem.
Aus der wikipedia (http://en.wikipedia.org/wiki/Journaling_file_system):
Scheint zu vermuten, dass einige Festplatten nicht fertig zu schreiben, Sektor -, sondern, dass ein journaling-Dateisystem schützen Sie vor Datenverlust die gleiche Weise die xlog schützt eine Datenbank.
Vom linux-kernel-Mailingliste in einer Diskussion auf ext3-journaling-Dateisystem:
Ich würde dazu neigen, zu glauben, dass über die wiki-Kommentar. Tatsächlich, die Existenz einer Datenbank (firebird) mit keine xlog impliziert, dass der Sektor schreiben atomar ist, dass es nicht clobber Daten, die Sie nicht bedeuten, zu ändern.
Da ist einiges in der Diskussion Hier über die Unteilbarkeit der Sektor schreibt, und wieder keine Einigung. Aber die Menschen, die uneins zu sein scheinen sprechen über multiple-Sektor schreibt (die nicht atomar auf viele moderne Festplatten.) Diejenigen, die sagen, Sektor schreibt, sind von atomic zu tun scheinen mehr zu wissen, was Sie reden.
Die Antwort auf die erste Frage hängt von der hardware beteiligt. Zumindest bei einigen älteren hardware, die Antwort war ja-bei einem Stromausfall führen könnte es Müll auf den Datenträger geschrieben werden. Die meisten aktuellen Festplatten jedoch haben ein bisschen eine "USV" eingebaut, die Scheibe selbst -- einen Kondensator, der groß genug ist, um die Stromversorgung der Festplatte lange genug zum schreiben der Daten in der on-disk-cache aus auf der Platte. Sie haben auch schaltkreise zur Erkennung, ob die Stromversorgung ist immer noch gut, also, wenn Sie die macht bekommt, schuppige, Sie schreiben die Daten im cache auf die Platte, und Müll ignorieren, die Sie erhalten könnten.
Soweit eine "zerrissene Seite" geht, eine typische Festplatte akzeptiert nur Befehle zu schreiben eine gesamte Branche in einer Zeit, so was bekommst du normalerweise eine Integrale Anzahl von Sektoren korrekt geschrieben, und die andere unverändert bleiben. Wenn, jedoch, Sie sind mit einer logischen Seitengröße, die größer als einen einzigen Sektor, Sie können sicherlich am Ende mit einer Seite, die teilweise geschrieben wird.
Die aber meist gilt für eine direkte Verbindung zu einem normalen moving-Plattenteller-Typ-Festplatte. Mit fast alles andere, die Regeln kann und oft anders sein wird. Nur für ein offensichtliches Beispiel, wenn Sie schreiben, über das Netzwerk, sind Sie meistens auf die Gnade der Netzwerk-Protokoll. Wenn Sie Daten senden über TCP Daten, die nicht übereinstimmen mit dem CRC wird verworfen, aber die gleichen Daten, übertragen über UDP mit der gleichen Korruption, könnte angenommen werden.
Ich vermute, dass diese Annahme falsch ist.
Moderne Festplatten die Daten zu codieren, die in Branchen - und schützen zusätzlich mit ECC. Daher können Sie am Ende mit garbaging alle des Sektors Inhalte - es wird einfach keinen Sinn machen, die mit der Kodierung verwendet.
Als für immer poplular SSDs, die situation ist sogar noch Grausiger - block deaktiviert ist, bevor Sie überschrieben werden, so dass, abhängig von der firmware verwendet wird und die Menge des freien Speicherplatzes, ganz losgelöst Sektoren beschädigt werden kann.
Durch die Art und Weise, ein Betriebssystem crash wird nicht dazu führen, dass Daten beschädigt werden innerhalb von single-Sektor.
Ich würde erwarten, dass eine zerrissene Seite aus Teil X, Teil Y und Teil unlesbaren Sektor. Wenn ein Kopf in der Mitte des schreiben ein-Sektor, wenn der Strom ausfällt, das Laufwerk sollte park, die sofort leitet, so dass der rest der Fahrt (abgesehen davon, dass ein Sektor) wird unbeschädigt bleiben.
In einigen Fällen würde ich erwarten, dass mehrere zerrissene Seiten, bestehend aus Teil X und Teil Y, sondern nur eine zerrissene Seite umfassen würde, die einen nicht lesbaren Sektor. Der Grund für mehrere zerrissene Seiten ist, dass die Festplatte Puffern kann viel schreibt intern, und die Reihenfolge der schreiben könnte interleave verschiedene Sektoren von verschiedenen Seiten.
Ich gelesen habe widersprüchliche Geschichten darüber, ob ein neues schreiben zu den nicht lesbaren Sektor wird es wieder lesbar. Selbst wenn die Antwort ja ist, werden neue Daten Z weder X noch Y.
beim aktualisieren der
Datenträger, der nur garantieren Laufwerk herstellt, ist, dass ein einzelnes 512-
byte schreiben ist atomar (d.h., es wird entweder in seiner Gesamtheit oder es wird nicht
vollständig); so, wenn ein vorzeitiges Verlustleistung entsteht, nur ein Teil
eine größere schreiben kann (manchmal genannt eine zerrissene Schreibzugriff).