Czy jest jakiś sposób, aby obliczyć, ile miejsca zwolnię, gdybym usunął jedno (lub kilka) podwolumny z dysku Btrfs (bez ich faktycznego usuwania)? Wiem, że „nie ma obecnie kodu, który wykonałby dla ciebie obliczenia” , ale jak byś to zrobił?
Zastanawiam się także, dlaczego mówią, że byłoby tak wolno? Zarówno usuwanie podobjętości, jak i pytanie o wolne miejsce jest z mojego doświadczenia bardzo szybkie, dlaczego robienie tego samego hipotetycznie byłoby o wiele wolniejsze?
Odpowiedzi:
Powinieneś spojrzeć na
btrfs quota
ibtrfs 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, musiszJednak 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 zaqgroups
pomocąTo da ci trochę takich wyników:
(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 poziomqgroup
. Każda podobjętośćqgroup
znajduje się na poziomie 0. Dodatkowo istnieje specjalnaqgroup
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ąNastępnie przypisz nowo utworzony
qgroup
element nadrzędny doqgroups
podwoluminów, które chcesz usunąćSpowoduje to kolejne ponowne skanowanie informacji o przydziale, co może chwilę potrwać. Jeśli jest zakończony, a teraz wydajesz
otrzymujesz taki wynik:
(Dodałem
-p
flagę, aby dodaćparent
kolumnę do wyniku, który pokazuje relację nadrzędny / podrzędnyqgroups
.)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.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.
źródło