Wyświetl wolne miejsce w systemie plików dostępne dla użytkownika root

12

Domyślnie Linux rezerwuje pewną część systemu plików dla użytkownika root, przynajmniej na ext4 (aby uniemożliwić zwykłym użytkownikom całkowite zapełnienie dysku i awarię systemu oraz zmniejszenie fragmentacji). Jednak dfwyświetla tylko wolne miejsce widoczne dla zwykłych użytkowników (nawet gdy jest uruchamiane jako root). Jak wyświetlić „rzeczywistą” wolną przestrzeń, którą można by zrootować?

Ślimak mechaniczny
źródło

Odpowiedzi:

6

Nie jestem pewien, czy jest wbudowane narzędzie, ale zakładając, że pozostawiłeś zarezerwowane domyślne 5%, to powie ci:

df / | grep dev | cut -f 3,6 -d\  | awk '{print ($1*.05)+$2}'

dfroot, grepdla wiersza z dev (w celu usunięcia nagłówka), cutrozmiar i dostępne pola, a następnie użyj awkskryptu, aby obliczyć 5% rozmiaru dysku dodanego do dostępnego.

Możesz pobrać aktualną rezerwację tune2fs -l <device>i połączyć to z powyższym w skrypcie.

Paweł
źródło
2
Dobra, więc następujące polecenie powie nam, ile przestrzeni działowej jest zarezerwowana dla privilegied użytkowników: tune2fs -l /dev/DEVICE | egrep "Block count|Reserved block count". Np. Dla mojej partycji „bufor multimedialny”: Block count: 2621440i Reserved block count: 128449: 4,9% dostępnych bloków (konserwatywne ustawienie, aby zapobiec fragmentacji).
tuk0z
Nie ma potrzeby używania cutpolecenia: pola można wybierać awkbezpośrednio. W rzeczywistości cutpolecenie nie działało dla mnie zgodnie z oczekiwaniami. W każdym razie dałem inną odpowiedź, która powinna dać bardziej precyzyjną odpowiedź.
jarno
1
Wykonaj, tune2fs -m <percentage> <device-name>aby zmienić miejsce na dysku zarezerwowane tylko dla użytkownika root.
luka5z
1
Zainspirowany powyższym wymyśliłem to, aby obliczyć zarezerwowane miejsce na woluminie katalogu głównego w MB:sudo tune2fs -l $(df | grep -E '/$' | cut -d\ -f 1) | egrep "Reserved block count|Block size" | paste -sd\ | awk '{print ($4 * $7 / ( 1024 * 1024 ) ), "MB"}'
mp3foley
To nie jest przenośna odpowiedź. Sprawdź poniżej, czy potrzebujesz odpowiedzi (spoiler: tune2fs /dev/sda1lub nawet lepiejstat -f -c '%a blocks free and %f blocks free for root (%S bytes per block)' /
trs
17

Za pomocą polecenia tune2fs (znajdującego się w / sbin / tune2fs ) możesz łatwo określić zarezerwowane miejsce : (i więcej!)

tune2fs -l /dev/sda1

Podam informacje o moim systemie w celach informacyjnych, zamierzam usunąć niepotrzebne linie, które nie są ważne dla tego pytania:

Nagłówek ... i nazwa woluminu, opisuję wszystkie dyski, ułatwia ich identyfikację w razie potrzeby.

tune2fs 1.42.4 (12-Jun-2012)
Filesystem volume name:   xenon
Last mounted on:          /
...

NAPRAWDĘ chcę, żeby to było „czyste”, gdy system jest uruchomiony. Szczery!

Filesystem state:         clean

W tym miejscu zaczynają się informacje o pojemności pamięci:

Tutaj możesz zobaczyć, że mam w sumie 121 179 648 bloków ... o rozmiarze bloku 4K (4096), który mnoży się do dużej liczby (462-GB GB). (Rozmiar bloku podano poniżej)

Block count:              121179648

I zarezerwowane bloki ... patrząc na liczbę powyżej i liczbę poniżej ... powinieneś być w stanie stosunkowo szybko dowiedzieć się, że mam 1% zarezerwowane. W tym przypadku (4,62 GB)

Reserved block count:     1211796

Ile obecnie wolnego miejsca jest dostępne? Tutaj!

Free blocks:              104090586
...

I najważniejszy rozmiar bloku. Przydatne do mnożenia.

Block size:               4096
...

Linie te mówią, KTO bloki są zarezerwowane dla ... użytkownika 0, w tym przypadku root

Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
...

Dostępnych jest znacznie więcej informacji, ale powinno to umożliwić szybkie ustalenie, ile jest dostępnych, a ile więcej jest zarezerwowanych dla użytkownika root. Prosta matematyka.

Mam nadzieję że to pomoże. Pamiętaj ... strony man są twoimi przyjaciółmi.

lornix
źródło
2

Wyświetla wolne miejsce w bajtach partycji związane z „/ path”

printf '%s' $(($(stat -f --format='%f*%S' /path)))

Aby go uruchomić, nie musisz być superużytkownikiem.

BTW Nie do końca rozumiem, na czym polega różnica

Rozmiar bloku% s (dla szybszych transferów)

Podstawowy rozmiar bloku% S (dla liczby bloków)

w użyciu stat.

jarno
źródło
Cool - czy to konto dla miejsca zarezerwowanego dla roota?
Paul
@Paul tak, to jest wliczone
jarno
Twoje dane wyjściowe są w rzeczywistości sumą - możesz więc bcprzeliczyć dane wyjściowe, aby uzyskać liczbę bajtów, a nawet użyć, --format='%f*%S/1024/1024/1024' | bcaby uzyskać kilobajty / megabajty / gigabajty, w zależności od liczby wybranych dywizji.
Paul
@Paul Cóż, nazwałbym to produktem. W przedrostków binarnych są nazywane kibibytes, mebibytes i gibibytes odpowiednio. Otaczające rozszerzenie arytmetyczne $(( ... )) wykonuje obliczenia, ale powoduje tylko całkowitą część ilorazu (jeśli dodasz dzielenie). A może masz na myśli, że twoja powłoka nie obsługuje arytmetyki?
jarno
@Paul Ale bczamiast tego możesz użyć ilorazu z dowolną precyzją, jeśli tego potrzebujesz.
jarno