Journaling -Dateisystem

A Journaling -Dateisystem ist ein Dateisystem Das verfolgt Veränderungen, die sich noch nicht für die befasst haben Dateisystem"Hauptteil durch Aufzeichnung des Ziels solcher Änderungen in einer als als" bekannten Datenstruktur "Tagebuch", was normalerweise a ist Zirkulularprotokoll. Im Falle eines Systemabsturzs oder Stromausfalls können solche Dateisysteme schneller online mit einer geringeren Wahrscheinlichkeit zurückgebracht werden, sich zu beschädigen.[1][2]

Abhängig von der tatsächlichen Implementierung kann ein Journaling -Dateisystem möglicherweise nur den gespeicherten Überblick verfolgen Metadaten, was zu einer verbesserten Leistung auf Kosten einer erhöhten Möglichkeit für die Datenversorgung führt. Alternativ kann ein Journaling -Dateisystem sowohl gespeicherte Daten als auch verwandte Metadaten verfolgen, während einige Implementierungen diesbezüglich ausgewählbares Verhalten ermöglichen.[3]

Geschichte

1990 wurde IBM eingeführt JFS in AIX 3.1 als eines der ersten UNIX -kommerziellen Dateisysteme, die Journaling implementierten.[4] Im nächsten Jahr wurde die Idee in einem weit verbreiteten Papier auf Protokoll-strukturierten Dateisystemen populär gemacht.[5] Dies wurde anschließend in Microsofts implementiert Windows NT's NTFS Dateisystem im Jahr 1993 und in Linux's ext3 Dateisystem im Jahr 2001.[6]

Begründung

Aktualisieren von Dateisystemen, um Änderungen an Dateien und Verzeichnissen widerzuspiegeln, erfordert normalerweise viele separate Schreibvorgänge. Dies ermöglicht eine Unterbrechung (wie ein Stromausfall oder ein System Absturz) zwischen Schreibvorgängen, um Datenstrukturen in einem ungültigen Zwischenzustand zu lassen.[1]

Das Löschen einer Datei auf einem UNIX -Dateisystem umfasst beispielsweise drei Schritte:[7]

  1. Entfernen des Verzeichniseintrags.
  2. Freigeben Inode zum Pool der freien Inodes.
  3. Rückgabe aller Festplattenblöcke in den Pool der freien Festplattenblöcke.

Wenn nach Schritt 1 und vor Schritt 2 ein Absturz auftritt, gibt es einen verwaisten Inode und daher a Speicherleck; Wenn ein Absturz zwischen den Schritten 2 und 3 auftritt, können die zuvor von der Datei zuvor verwendeten Blöcke nicht für neue Dateien verwendet werden, was die Speicherkapazität des Dateisystems effektiv verringert. Die Neuarranging der Schritte hilft auch nicht. Wenn Schritt 3 Schritt 1 vorausgeht, kann ein Absturz zwischen ihnen die Wiederverwendung der Blöcke der Datei für eine neue Datei ermöglichen, was bedeutet, dass die teilweise gelöschte Datei einen Teil des Inhalts einer anderen Datei enthalten würde, und Änderungen an beiden Dateien würden in beiden angezeigt. Wenn andererseits Schritt 2 Schritt 1 vorausgeht, würde ein Absturz zwischen ihnen dazu führen, dass die Datei nicht zugänglich ist, obwohl es zu scheinen.

Die Erkennung und Wiederherstellung von solchen Inkonsistenzen erfordert normalerweise eine vollständige Spaziergang seiner Datenstrukturen, zum Beispiel durch ein Tool wie z. fsck (die Dateisystemprüfung).[2] Dies muss in der Regel vor dem nächsten MOT-System des Dateisystems für den Zugang zu Schreiben erfolgen. Wenn das Dateisystem groß ist und eine relativ wenig E/A -Bandbreite vorliegt, kann dies lange dauern und zu längeren Abflüssen führen, wenn es den Rest des Systems daran hindert, wieder online zu kommen.

Um dies zu verhindern, verteilt ein Journaled -Dateisystem einen speziellen Bereich - das Journal -, in dem es die Änderungen aufzeichnet, die es im Voraus ergeben wird. Nach einem Absturz beinhaltet die Wiederherstellung lediglich das Lesen des Journals aus dem Dateisystem und die Wiederholung von Änderungen aus diesem Journal, bis das Dateisystem wieder konsistent ist. Die Änderungen sollen daher sein Atomic (nicht teilbar), da sie entweder erfolgreich sind (ursprünglich erfolgreich oder während der Genesung vollständig wiedergegeben werden) oder überhaupt nicht wiedergegeben werden (werden übersprungen, weil sie vor dem Absturz noch nicht vollständig in das Journal geschrieben wurden).

Techniken

Einige Dateisysteme ermöglichen es dem Journal, gleichzeitig als reguläre Datei zu wachsen, zu schrumpfen und neu zugeteilt zu werden, während andere das Journal in einen zusammenhängenden Bereich oder eine versteckte Datei einfügen, die garantiert die Größe nicht verschieben oder ändert, während das Dateisystem montiert ist. Einige Dateisysteme können auch zulassen externe Zeitschriften auf einem separaten Gerät wie a Festkörperantrieb oder nicht flüchtiger Batterie-Rückenlehre. Änderungen an der Zeitschrift können selbst für eine zusätzliche Redundanz oder das Journal auf mehrere physische Volumina verteilt werden, um vor Gerätenversagen zu schützen.

Das interne Format des Journals muss sich gegen Abstürze schützen, während das Journal selbst geschrieben wird. Viele Journalimplementierungen (wie die JBD2 -Ebene in ext4) Klammern Sie jede Änderung, die mit einer Prüfsumme protokolliert ist, und das Verständnis, dass ein Absturz eine teilweise geschriebene Änderung mit einer fehlenden (oder nicht übereinstimmenden) Prüfsumme hinterlassen würde, die einfach ignoriert werden kann, wenn das Tagebuch beim nächsten Remount wiederholt wird.

Physische Zeitschriften

A Physische Zeitschrift Melden Sie sich eine Vorab -Kopie jedes Blocks an, der später in das Hauptdateisystem geschrieben wird. Wenn ein Absturz vorliegt, wenn das Hauptdateisystem geschrieben wird, kann das Schreiben einfach auf die Fertigstellung wiedergegeben werden, wenn das Dateisystem als nächstes montiert wird. Wenn ein Absturz vorliegt, wenn das Schreiben beim Tagebuch angemeldet wird, wird das Teilschreiber eine fehlende oder nicht übereinstimmende Prüfsumme haben und kann am nächsten Mount ignoriert werden.

Physische Zeitschriften verhängen eine erhebliche Leistungsstrafe, da jeder veränderte Block begangen werden muss zweimal zur Lagerung, kann aber akzeptabel sein, wenn absoluter Fehlerschutz erforderlich ist.[8]

Logische Zeitschriften

A Logisches Journal Speichert nur Änderungen an der Datei Metadaten In der Zeitschrift und Handelsverwerfungstoleranz für wesentlich bessere Schreibleistung.[9] Ein Dateisystem mit einem logischen Journal erholt sich nach einem Absturz immer noch schnell, kann jedoch zulässt, dass nichtjournalte Dateidaten und die Journal -Metadaten nicht miteinander synchronisiert werden, was zu einer Datenversorgung führt.

Zum Beispiel kann ein Anhängen an eine Datei drei separate Schreibvorgänge an:

  1. Die Dateien Inodezu beachten, dass in den Metadaten der Datei die Größe zugenommen hat.
  2. Die freie Speicherkarte, um eine Platzallokation für die zu beauftragten Daten zu markieren.
  3. Der neu zugewiesene Raum, um die angehängten Daten tatsächlich zu schreiben.

In einem Metadata-Journal würde Schritt 3 nicht protokolliert. Wenn Schritt 3 nicht ausgeführt wurde, aber die Schritte 1 und 2 während der Wiederherstellung wiedergegeben werden, wird die Datei mit Müll angehängt.

Schreiben Sie Gefahren

Der Schreibcache in den meisten Betriebssystemen sortiert seine Schreibvorgänge (mit der Aufzugsalgorithmus oder ein ähnliches Schema), um den Durchsatz zu maximieren. Um eine außerordentliche Schreibgefahr mit einem Metadata-Journal zu vermeiden, müssen die Schreibvorgänge für Dateidaten sortiert werden, damit sie sich vor ihren zugehörigen Metadaten zur Speicherung verpflichtet haben. Dies kann schwierig zu implementieren sein, da die Koordination innerhalb des Kernels des Betriebssystems zwischen dem Dateisystemtreiber und dem Schreibcache erforderlich ist. Eine Schreibgefährdung außerhalb der Reihenfolge kann auch auftreten, wenn ein Gerät keine Blöcke unmittelbar in den zugrunde liegenden Speicher schreiben kann, das heißt, es kann seine Schreibschachtel nicht auf die Festplatte ausspülen, da aufgeschriebene Schreibweise aktiviert werden.

Um die Angelegenheit zu komplizieren, haben viele Massenspeichergeräte ihre eigenen Schreibcaches, in denen sie möglicherweise aggressiv nachbestellen, um eine bessere Leistung zu erzielen. (Dies tritt besonders häufig bei magnetischen Festplatten auf, die große Latenzen haben, die mit dem Aufzugsortieren minimiert werden können.) Einige Journaling-Dateisysteme nehmen konservativ an Cache an bestimmten Stellen in der Zeitschrift (als Hindernisse in als Barrieren bezeichnet ext3 und ext4).[10]

Alternativen

Weiche Updates

Etwas UFS Implementierungen vermeiden Journaling und stattdessen implementieren weiche Updates: Sie bestellen ihre Schreibvorgänge so, dass das On-Disk-Dateisystem niemals inkonsistent ist oder dass die einzige Inkonsistenz, die im Falle eines Absturzes erstellt werden kann, ein Speicherleck ist. Um sich von diesen Lecks zu erholen, wird die freie Speicherkarte mit einem vollständigen Spaziergang des Dateisystems am nächsten Mount abgeglichen. Dies Müllsammlung wird normalerweise im Hintergrund gemacht.[11]

Protokollierte Dateisysteme

Im Protokollierte DateisystemeDie Strafe für Schreib-Twice gilt nicht, weil die Zeitschrift selbst selbst ist Das Dateisystem: Es nimmt das gesamte Speichergerät ein und ist so strukturiert, dass es wie ein normales Dateisystem durchquert werden kann.

Kopie-On-Write-Dateisysteme

Voll Kopieren auf dem Schreiben Dateisysteme (wie z. ZFS und Btrfs) Vermeiden Sie Änderungen der Dateidaten, indem Sie die Daten in neu zugewiesenen Blöcken schreiben, gefolgt von aktualisierten Metadaten, die auf die neuen Daten und die alten verweigert werden, gefolgt von Metadaten, die darauf hinweisen, und so weiter bis zum Superblock. oder das Stamm der Dateisystemhierarchie. Dies hat die gleiche korrektheitspräftigende Eigenschaften wie eine Zeitschrift, ohne den Schreib-Twice-Overhead.

Siehe auch

Verweise

  1. ^ a b Jones, M Tim (4. Juni 2008), Anatomie der Linux -Journaling -Dateisysteme, IBM Developerworks, archiviert Aus dem Original am 21. Februar 2009, abgerufen 13. April, 2009
  2. ^ a b Arpaci-Dusseau, Remzi H.; Arpaci-Dusseau, Andrea C. (21. Januar 2014), Crashkonsistenz: FSCK und Journaling (PDF), Arpaci-Dusseau-Bücher, archiviert (PDF) Aus dem Original am 24. Januar 2014, abgerufen 22. Januar, 2014
  3. ^ "Tune2FS (8) - Linux Man Page". Linux.die.net. Archiviert Aus dem Original am 25. Februar 2015. Abgerufen 20. Februar, 2015.
  4. ^ Chang, A.; Mergen, M.F.; Rader, R.K.; Roberts, J.A.; Porter, S.L. (Januar 1990), "Entwicklung von Speichereinrichtungen in AIX Version 3 für RISC -System/6000 Prozessoren" (PDF), IBM Journal of Research and Development, 34: 1: 105–109, doi:10.1147/rd.341.0105
  5. ^ Rosembaum, Mendel; OUSTERHOUT, John (Februar 1991). Das Design und die Implementierung eines Protokollstrukturdateisystems (PDF). ACM 13. jährliches Symposium für Betriebssystemprinzipien.
  6. ^ "'2.4.15 -final' - marc '. marc.info. Abgerufen 24. März, 2018.
  7. ^ Dateisysteme aus Tanenbaum, A.S. (2008). Moderne Betriebssysteme (3. Aufl., S. 287). Upper Saddle River, NJ: Prentice Hall.
  8. ^ Tweedie, Stephen (2000), "Ext3, Journaling -Dateisystem", Verfahren des Ottawa Linux Symposiums: 24–29
  9. ^ Prabhakaran, Vijayan; Arpaci-Dusseau, Andrea C; Arpaci-Dusseau, Remzi H,, "Analyse und Entwicklung von Journaling -Dateisystemen" (PDF), 2005 Usenix jährliche technische Konferenz, Usenix Association, archiviert (PDF) Aus dem Original am 26. September 2007, abgerufen 27. Juli, 2007.
  10. ^ Corbet, Jonathan (21. Mai 2008), Barrieren und Journaling -Dateisysteme, archiviert Aus dem Original am 14. März 2010, abgerufen 6 März, 2010
  11. ^ Seltzer, Margo I; Ganger, Gregory R; McKusick, m Kirk, "Journaling versus Soft Updates: Asynchroner Meta-Datenschutz in Dateisystemen", 2000 Usenix jährliche technische Konferenz, Usenix Association, archiviert Aus dem Original am 26. Oktober 2007, abgerufen 27. Juli, 2007.