btrfs
ist ein Dateisystem der nächsten Generation - es umfasst viele der gleichen Zwecke wie frühere Layering-Modelle, die zwischen ihnen verarbeitet wurden. btrfs
ist auch ein erstaunlich umfangreicher Stapel - die FAQ empfiehlt, ihn auf eine nicht partitionierte Festplatte * [s] * zu schreiben und alle Partitionierungen, Kontingente, Komprimierungen, Imaging-, Striping-, Copy-on-Write-, Deduplizierungs- und wahrscheinlich 10 andere Dinge Ich vergesse, nur als Qualitäten des Dateisystems behandelt zu werden. Es kann all diese Dinge und noch viel mehr.
btrfs
Festplatten-Arrays sind dynamisch - sie können problemlos auf einem Live-System hinzugefügt und daraus gelöscht werden. Dies funktioniert, weil btrfs
Speicherblockgruppen nur dann aufgeteilt werden, wenn sie gewünscht werden - und sie sich möglicherweise auf einem bestimmten Gerät in seinem aktuellen Array befinden, wenn dies der Fall ist. Die FAQ haben dazu einige Dinge zu sagen - insbesondere dort, wo es um die Unzuverlässigkeit von Schätzungen des freien Speicherplatzes geht:
Wenn Sie beispielsweise ein Subvolume als "einzeln" und eines als RAID-1 haben, verbraucht das erste Subvolume Rohspeicher mit einer Rate von einem Byte für jedes geschriebene Datenbyte. Das zweite Teilvolumen benötigt zwei Bytes Rohdaten für jedes Byte geschriebener Daten. Wenn also 30 GB Rohspeicher verfügbar sind, können wir 30 GB Daten im ersten Teilvolumen oder 15 GB Daten im zweiten Teilvolumen speichern, und es gibt keine Möglichkeit zu wissen, welche Daten vorhanden sind, bis der Benutzer diese Daten schreibt.
Daher ist es im Allgemeinen unmöglich, eine genaue Schätzung der Menge an freiem Speicherplatz in einem btrfs-Dateisystem vorzunehmen. Ja, das ist scheiße . Wenn Sie eine wirklich gute Idee haben, wie Sie Benutzern das Verstehen des verbleibenden Speicherplatzes vereinfachen können, teilen Sie uns dies bitte mit. Beachten Sie jedoch auch, dass die besten Köpfe in der Entwicklung von btrfs über dieses Problem nachgedacht haben seit mindestens ein paar Jahren, und wir haben noch keine einfache Lösung gefunden.
Wenn Sie den entsprechenden Abschnitt btrfs
lesen, erhalten Sie spezifischere Beispiele, aber es wird sehr deutlich, dass Geräte in ihrer Anzahl variabel, in ihrer Persistenz epehemeral, einzeln oder zusammen blockiert und gestreift sein können und ... nun, es geht weiter. Ein weiteres Zitat aus den FAQ:
Geräteverwaltung ist ein komplexes Thema, und es gibt viele verschiedene Meinungen darüber, wie dies am besten funktioniert. Intern trennt der Btrfs-Code Komponenten, die sich mit der Geräteverwaltung befassen, und verwaltet für sie eigene Ebenen. Die überwiegende Mehrheit der Dateisystem-Metadaten hat keine Ahnung, dass mehrere Geräte beteiligt sind.
Es sagt dies über RAID:
btrfs unterstützt RAID-0, RAID-1 und RAID-10. Ab Linux 3.9 unterstützt btrfs auch RAID-5 und RAID-6, obwohl dieser Code noch experimentell ist.
btrfs kombiniert zuerst alle Geräte in einem Speicherpool und dupliziert dann die Chunks, wenn Dateidaten erstellt werden. RAID-1 ist derzeit als "2 Kopien aller Daten auf verschiedenen Geräten" definiert. Dies unterscheidet sich von MD-RAID und dmraid darin, dass diese genau n Kopien für n Geräte erstellen. In einem btrfs-RAID-1 auf drei 1-TB-Geräten erhalten wir 1,5 TB verwendbare Daten. Da jeder Block nur auf 2 Geräte kopiert wird, müssen für das Schreiben eines bestimmten Blocks nur genau 2 Geräte geschrieben werden. Lesen kann nur von einem gemacht werden.
Datenwiederherstellung:
Der Vorteil von btrfs-raid 5/6 besteht darin, dass btrfs im Gegensatz zu MD-RAID weiß, welche Blöcke tatsächlich von Daten / Metadaten verwendet werden, und diese Informationen in einer Wiederherstellungs- / Wiederherstellungssituation verwenden kann, um nur die tatsächlich verwendeten Blöcke auf einem zu synchronisieren / wiederherzustellen Erneutes Hinzufügen oder Ersetzen des Geräts, Überspringen von Blöcken, die an erster Stelle völlig unbenutzt / leer waren.
MD-RAID kann das nicht, da es versucht, eine dateisystemunabhängige Schicht zu sein, die weder weiß noch sich darum kümmert, welche Blöcke auf den darüber liegenden Schichten tatsächlich verwendet oder leer waren. Der Versuch, dies zu verfolgen, wäre ein Verstoß gegen die Ebenen und würde den Code ernsthaft komplizieren und / oder die Verwendung nur auf die Dateisysteme oder andere Ebenen beschränken, die darüber unterstützt / verstanden / ordnungsgemäß verfolgt werden könnten.
Natürlich btrfs
ist es von Grund auf so konzipiert, dass es Schichten überschreitet . Dazu muss ein prüfsummender, wiederherstellbarer und hoffentlich zumindest etwas redundanter Baum gepflegt werden, der alle derzeit integrierten Geräte umfasst. btrfs
ist in vielerlei Hinsicht eine Dateidatenbank sowie ein Dateisystem. Es verlässt sich nicht auf Geräte für ecc zugrunde liegen , weil zu einem großen Teil, ist es nicht der Ansicht , dass es sind zugrunde liegenden Geräte. Sie könnten es sich vielleicht wie einen Disk Kudzu vorstellen.
In jedem Fall ist es genau die ständige Prüfsumme und das Metadatenmanagement, die es ermöglichen btrfs
, so viele der interessanten Dinge zu tun, die es tut, und dies ohne große Rücksicht auf die zugrunde liegende Hardware.