Powinieneś spojrzeć na btrfs quota
i btrfs qgroups
(grupy przydziałów).
Zasadniczo qgroups
rób dokładnie to, o co prosiłeś, śledzą, ile miejsca przydzielają podwolumny. Aby włączyć qgroup
funkcjonalność btrfs
systemu plików, musisz
# btrfs quota enable /path/to/btrfs/filesystem
Jednak zanim to zrobisz, należy ostrzec, że spowoduje to całkowite ponowne obliczenie qgroup
danych, co zajmie trochę czasu, szczególnie w przypadku dużych systemów plików z wieloma podwoluminami. Ten proces przebiega asynchronicznie w tle. Możesz już sprawdzić status za qgroups
pomocą
# btrfs qgroup show /path/to/btrfs/filesystem
To da ci trochę takich wyników:
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
(Ostrzeżenie w pierwszym wierszu jest obecne tak długo, jak trwa ponowne skanowanie).
Btrfs automatycznie tworzy qgroup
dla każdej podobjętości. W tym przypadku istnieją trzy podwolumny o podobjętościach ID 4881, 7990 i 8400. Część przed ukośnikiem to poziom qgroup
. Każda podobjętość qgroup
znajduje się na poziomie 0. Dodatkowo istnieje specjalna qgroup
na poziomie 0, która zawsze ma identyfikator 5 i odpowiada katalogowi głównemu systemu plików btrfs.
Dla każdego qgroup
powyższego wyjścia pokazuje, ile miejsca odnosi się do niego. Oznacza to, że odpowiednie podobjętość zawiera pliki, których całkowity rozmiar jest równy podanej liczbie.
Jednak ze względu na migawki i charakter woluminów btrfs kopiowania przy zapisie mogą udostępniać pliki. Oznacza to, że do treści (lub w rzeczywistości zakresu) plików może odnosić się więcej niż jedna podwolumna. Jest to wyrażone przez drugą liczbę, która pokazuje, ile miejsca jest przydzielane wyłącznie przez każdą podobjętość i nie jest dzielone z żadną inną podobjętością. W przypadku usunięcia podobjętości jest to miejsce, które zostanie faktycznie zwolnione.
Jeśli chcesz dowiedzieć się, ile miejsca zostanie zwolnione, jeśli usuniesz wiele podwoluminów, możesz użyć wyżej wymienionych poziomów. qgroups
są zorganizowane w hierarchię, a grupy na wyższych poziomach (powyżej 0) agregują informacje o niższych poziomach.
Tak więc, aby dowiedzieć się, ile miejsca zostałoby zwolnione, gdyby podwoluminy 4881 i 7990 (w powyższym przykładzie) zostałyby usunięte, utwórz nowy qgroup
(dowolnie z ID 0, ale możesz wybrać, co chcesz tutaj) na poziomie 1 za pomocą
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Następnie przypisz nowo utworzony qgroup
element nadrzędny do qgroups
podwoluminów, które chcesz usunąć
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Spowoduje to kolejne ponowne skanowanie informacji o przydziale, co może chwilę potrwać. Jeśli jest zakończony, a teraz wydajesz
# btrfs qgroup show -p /path/to/btrfs/filesystem
otrzymujesz taki wynik:
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 ---
(Dodałem -p
flagę, aby dodać parent
kolumnę do wyniku, który pokazuje relację nadrzędny / podrzędny qgroups
.)
Teraz linia z qgroup
1/0
informuje o tym, ile miejsca odnoszą się do obu podwoluminów, które chcesz usunąć, a co ważniejsze, mówi, ile miejsca przydzielają wyłącznie one . Jest to ilość miejsca, które zostanie zwolnione, jeśli usuniesz oba podwoluminy.
Zastanawiam się także, dlaczego mówią, że byłoby tak wolno?
Jest to spowodowane naturą btrfs podczas kopiowania i zapisu wraz z migawkami. Jeśli utworzysz migawkę w btrfs (normalnie), wszystkie rzeczywiste dane w nowo utworzonym podwolumnie zawierającym migawkę są współdzielone ze źródłem migawki. Tylko gdy plik zostanie zmieniony lub zamieniony w źródle, wskazuje to na inną zawartość (zakres). To sprawia, że bardzo trudno jest oszacować, ile miejsca faktycznie zostałoby zwolnione, gdyby podobjętości zostały usunięte, ponieważ trzeba uwzględnić całe miejsce, które jest współdzielone z innymi podobjętościami.