Gibt es eine Möglichkeit zu berechnen, wie viel Speicherplatz ich freigeben würde, wenn ich ein (oder mehrere) Subvolumes auf einer Btrfs-Festplatte entfernen würde (ohne sie tatsächlich zu entfernen)? Ich weiß, dass es "derzeit keinen Code gibt, der die Berechnung für Sie übernimmt" , aber wie würden Sie das tun?
Ich frage mich auch, warum sie sagen, dass es so langsam sein würde? Sowohl das Entfernen eines Subvolumens als auch das Fragen nach freiem Speicherplatz ist meiner Erfahrung nach sehr schnell. Warum sollte das gleiche hypothetisch so viel langsamer sein?
Antworten:
Sie sollten sich
btrfs quota
undbtrfs qgroups
(Quotengruppen) ansehen .qgroups
Machen Sie im Grunde genau das, was Sie angefordert haben. Sie verfolgen, wie viel Speicherplatz von Subvolumes zugewiesen wird. Um dieqgroup
Funktionalität für einbtrfs
Dateisystem zu aktivieren, müssen SieBevor Sie dies tun, sollten Sie jedoch gewarnt werden, dass dies eine vollständige
qgroup
Neuberechnung der Daten auslöst, was insbesondere bei großen Dateisystemen mit vielen Subvolumes einige Zeit in Anspruch nimmt. Dieser Prozess läuft asynchron im Hintergrund. Sie können den Status desqgroups
mit bereits überprüfenDies gibt Ihnen eine Ausgabe wie folgt:
(Die Warnung in der ersten Zeile ist vorhanden, solange der Rescan noch ausgeführt wird.)
Btrfs erstellt automatisch ein
qgroup
für jedes Subvolume. In diesem Fall gibt es drei Subvolumes mit den Subvolume-IDs 4881, 7990 und 8400. Der Teil vor dem Schrägstrich ist der Pegel desqgroup
. Jedes Subvolumenqgroup
befindet sich auf Stufe 0. Zusätzlich gibt es ein speziellesqgroup
auf Ebene 0, das immer die ID 5 hat und dem Stammverzeichnis des btrfs-Dateisystems entspricht.Für jedes
qgroup
zeigt die obige Ausgabe, wie viel Speicherplatz von ihr referenziert wird. Das bedeutet, dass das entsprechende Teilvolumen Dateien enthält, deren Gesamtgröße der angezeigten Anzahl entspricht.Aufgrund von Snapshots und der Copy-on-Write-Natur von btrfs-Subvolumes können jedoch Dateien gemeinsam genutzt werden. Dies bedeutet, dass der Inhalt (oder tatsächlich der Umfang) von Dateien von mehr als einem Subvolume referenziert werden kann. Dies wird durch die zweite Zahl ausgedrückt, die angibt , wie viel Speicherplatz ausschließlich von jedem Teilvolumen zugewiesen wird und nicht mit einem anderen Teilvolumen geteilt wird. Wenn Sie ein Subvolume löschen, ist dies der Speicherplatz, der tatsächlich freigegeben wird.
Wenn Sie herausfinden möchten, wie viel Speicherplatz beim Löschen mehrerer Subvolumes frei wird, können Sie die oben genannten Ebenen verwenden.
qgroups
sind in einer Hierarchie organisiert und Gruppen auf oberen Ebenen (höher als 0) aggregieren die Informationen der unteren Ebenen.Um herauszufinden, wie viel Speicherplatz freigegeben würde, wenn die Subvolumes 4881 und 7990 (im obigen Beispiel) gelöscht würden, erstellen Sie eine neue
qgroup
(willkürlich mit der ID 0, aber Sie können hier wählen, was Sie möchten ) auf Ebene 1 mitWeisen Sie dann das neu erstellte
qgroup
übergeordneteqgroups
Element den Subvolumes zu, mit denen Sie löschen möchtenDies löst einen weiteren erneuten Scan der Kontingentinformationen aus, der eine Weile dauern kann. Wenn es fertig ist und Sie jetzt ausstellen
Sie erhalten eine Ausgabe wie folgt:
(Ich habe das
-p
Flag hinzugefügt , um dieparent
Spalte zur Ausgabe hinzuzufügen, die die Eltern-Kind-Beziehung von zeigtqgroups
.)In der Zeile mit
qgroup
1/0
erfahren Sie nun, wie viel Speicherplatz von beiden zu löschenden Subvolumes referenziert wird, und, was noch wichtiger ist, wie viel Speicherplatz ausschließlich von ihnen zugewiesen wird . Dies ist die Menge an Speicherplatz, die freigegeben wird, wenn Sie beide Subvolumes löschen.Dies liegt an der Copy-on-Write-Natur von btrfs zusammen mit Snapshots. Wenn Sie in btrfs (normalerweise) einen Snapshot erstellen, werden alle tatsächlichen Daten in dem neu erstellten Subvolume, das den Snapshot enthält, für die Quelle des Snapshots freigegeben. Nur wenn eine Datei in der Quelle geändert oder ersetzt wird, verweist sie auf unterschiedliche Inhalte (Extents). Dies macht es sehr schwierig zu beurteilen, wie viel Speicherplatz tatsächlich freigegeben würde, wenn ein Subvolume gelöscht wird, da Sie den gesamten Speicherplatz berücksichtigen müssen, der mit anderen Subvolumes geteilt wird.
quelle