Sie sollten sich btrfs quota
und btrfs qgroups
(Quotengruppen) ansehen .
qgroups
Machen Sie im Grunde genau das, was Sie angefordert haben. Sie verfolgen, wie viel Speicherplatz von Subvolumes zugewiesen wird. Um die qgroup
Funktionalität für ein btrfs
Dateisystem zu aktivieren, müssen Sie
# btrfs quota enable /path/to/btrfs/filesystem
Bevor 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 des qgroups
mit bereits überprüfen
# btrfs qgroup show /path/to/btrfs/filesystem
Dies gibt Ihnen eine Ausgabe wie folgt:
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 843.69GiB 61.91MiB
0/4881 811.06GiB 9.34GiB
0/7990 867.32GiB 329.91MiB
0/8400 867.17GiB 37.64MiB
(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 des qgroup
. Jedes Subvolumen qgroup
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 mit
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Weisen Sie dann das neu erstellte qgroup
übergeordnete qgroups
Element den Subvolumes zu, mit denen Sie löschen möchten
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Dies löst einen weiteren erneuten Scan der Kontingentinformationen aus, der eine Weile dauern kann. Wenn es fertig ist und Sie jetzt ausstellen
# btrfs qgroup show -p /path/to/btrfs/filesystem
Sie erhalten eine Ausgabe wie folgt:
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 1.38TiB 2.51GiB ---
0/4881 1.11TiB 10.86GiB 1/0
0/7990 1.23TiB 502.41MiB 1/0
0/8400 1.34TiB 1.69GiB 1/0
1/0 1.51TiB 132.23GiB ---
(Ich habe das -p
Flag hinzugefügt , um die parent
Spalte zur Ausgabe hinzuzufügen, die die Eltern-Kind-Beziehung von zeigt qgroups
.)
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.
Ich frage mich auch, warum sie sagen, dass es so langsam sein würde?
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.