Co zajmuje miejsce w Linuksie? Diagnostyka przez df, du i lsof

Komunikat o braku miejsca w Linuxie nie zawsze dotyczy całego dysku. Zapełnić może się osobny system plików montowany pod /, /home lub /boot. Bywa również, że wolne gigabajty jeszcze są, ale zabrakło inode’ów potrzebnych do tworzenia nowych plików.

Diagnostykę zacznij od ustalenia, która przestrzeń się skończyła. Polecenia poniżej służą do odczytu informacji. Nie zawierają usuwania plików ani automatycznego czyszczenia pakietów.

Najpierw df: sprawdź właściwy system plików

df -hT
df -h / /home /boot
df -i

df -hT pokazuje zajętość, typ i punkt montowania. Drugi wariant sprawdza systemy plików zawierające podane ścieżki; kilka ścieżek może należeć do tej samej partycji. Nie sumuj wtedy tych samych danych kilka razy. df -i pokazuje wykorzystanie inode’ów tam, gdzie system plików udostępnia takie informacje.

Przykładowo, duża liczba małych plików cache może wyczerpać inode’y mimo wolnej przestrzeni. Natomiast pełne /boot może przeszkadzać w aktualizacji jądra, choć na /home jest dużo miejsca. Oddziel takie przypadki, zanim zaczniesz przenosić filmy lub usuwać dokumenty.

Potem du: znajdź największe katalogi

W typowej dystrybucji z GNU coreutils można użyć:

du -h --max-depth=1 "$HOME"
sudo du -x -h --max-depth=1 /

Pierwsze polecenie podsumowuje katalog domowy, wraz z ukrytą zawartością. Drugie wymaga uprawnień administracyjnych do odczytu katalogów systemowych. Opcja -x utrzymuje pomiar w jednym systemie plików. Dzięki temu skanowanie głównego katalogu nie doliczy zawartości osobno zamontowanego dysku lub zasobu sieciowego.

Jeżeli największy jest /var, przejdź poziom niżej:

sudo du -x -h --max-depth=1 /var

Powtarzaj dla wybranego dużego katalogu. Nie skanuj całego systemu po każdej znalezionej pozycji. Przejście po wielu plikach może potrwać, szczególnie na wolnym nośniku. Błędy uprawnień albo pliki zmieniające się w trakcie pomiaru wpływają na wynik. Nie ukrywaj wszystkich komunikatów, jeśli próbujesz zrozumieć rozbieżność.

Opcja --max-depth dotyczy GNU du. W minimalnym środowisku opartym na BusyBox składnia może być inna. Sprawdź lokalne du --help zamiast kopiować polecenia przeznaczone dla innej implementacji.

Dlaczego df i du mogą się nie zgadzać?

df opisuje zajętość systemu plików, a du sumuje przestrzeń przypisaną do dostępnych plików i katalogów. Nie są to identyczne pomiary. Rozbieżność może wynikać z metadanych, rezerwacji, uprawnień, migawek albo usuniętego pliku, który proces nadal trzyma otwarty.

Ten ostatni przypadek można sprawdzić narzędziem lsof, jeśli jest zainstalowane:

sudo lsof +L1

Wynik pokazuje otwarte pliki pozbawione dowiązań. Zwróć uwagę na proces, rozmiar i urządzenie. Nie kończ wszystkich znalezionych procesów. Jeśli usługę trzeba ponownie uruchomić, zrób to świadomie po sprawdzeniu jej roli i możliwości przerwania pracy. Usunięcie kolejnej nazwy pliku nie zamknie już otwartego uchwytu.

Pliki rzadkie także mogą mieć większy rozmiar logiczny niż zajętość na dysku. Jeśli potrzebujesz tego porównania, sprawdź wybrany plik za pomocą du -h oraz du -h --apparent-size. Wynik nie oznacza automatycznie kompresji ani błędu.

Logi, pakiety i dane aplikacji sprawdzaj oddzielnie

Przykład: df pokazuje pełne /, ale osobne /home ma duży zapas. Przenoszenie zdjęć w obrębie /home nie pomoże partycji systemowej. Jeśli największy wynik du dotyczy /var, sprawdź jego podkatalogi. Duże /var/log prowadzi do historii logów, a duże dane konkretnej aplikacji — do jej własnej konfiguracji. Te same wolne gigabajty wymagają więc innego działania.

Nie usuwaj plików z /usr i /lib ręcznie, nawet jeśli wyglądają na stare. Składnikami zainstalowanymi z pakietów zarządza menedżer właściwy dla dystrybucji. Także porządki w /boot powinny uwzględniać aktywne jądro i możliwość awaryjnego startu. Zapisz, co zajmuje miejsce, zanim wybierzesz odpowiednią procedurę usuwania.

W systemie korzystającym z dziennika systemd zobacz jego zajętość:

journalctl --disk-usage

Duży wynik uzasadnia sprawdzenie retencji i przyczyny przyrostu. Zanim skrócisz historię logów, zachowaj dane potrzebne do bieżącej diagnozy. Nie kasuj przypadkowych plików dziennika ręcznie. Sposób ograniczania zależy od konfiguracji systemu.

W /var mogą znajdować się także bazy danych, poczta, obrazy maszyn i dane kontenerów. Usuń zasoby funkcją właściwej aplikacji dopiero po rozpoznaniu ich roli. W Dockerze najpierw sprawdź obrazy, kontenery i woluminy; nie uruchamiaj zbiorczego prune bez zrozumienia skutków.

Migawki i pliki, których pomiar nie obejmuje

W Btrfs lub ZFS przestrzeń może pozostawać zajęta przez migawki, choć pliki usunięto z bieżącego widoku. Zwykłe du nie wyjaśnia wszystkich zależności takich systemów. Korzystaj z ich własnych narzędzi do zajętości i zarządzania migawkami, odpowiednich do konfiguracji.

Po porządkach sprawdź ponownie df dla właściwego punktu montowania. Zanotuj, która aplikacja tworzyła dane i czy można ograniczyć ich przyrost. Gdy brak miejsca przerwał aktualizację i system ma kłopot ze startem, dopiero po odzyskaniu przestrzeni przejdź do poradnika diagnostyki Linuxa po aktualizacji.