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ć?

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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.