df mówi, że dysk jest pełny, ale nie jest


58

Na zwirtualizowanym serwerze z systemem Ubuntu 10.04, df zgłasza co następuje:

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.4G  7.0G     0 100% /
none                  498M  160K  498M   1% /dev
none                  500M     0  500M   0% /dev/shm
none                  500M   92K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock
none                  500M     0  500M   0% /lib/init/rw
/dev/sda3             917G  305G  566G  36% /home

Zastanawia mnie to z dwóch powodów: 1.) df mówi, że / dev / sda1, zamontowany w /, ma pojemność 7,4 gigabajta, z czego tylko 7,0 gigabajtów jest używanych, ale zgłasza / jest w 100 procentach pełny; i 2.) Mogę tworzyć pliki na /, więc wyraźnie pozostało wolne miejsce.

Być może istotne jest to, że katalog / www jest dowiązaniem symbolicznym do / home / www, który znajduje się na innej partycji (/ dev / sda3, zamontowany w / home).

Czy ktoś może zaproponować sugestie dotyczące tego, co się tutaj dzieje? Serwer wydaje się działać bez problemu, ale chcę się upewnić, że nie ma problemu z tablicą partycji, systemami plików lub czymś innym, co mogłoby później spowodować implozję (lub eksplozję).


Dziękujemy wszystkim za pomocne odpowiedzi. Nie mogę tworzyć plików jako zwykły użytkownik, więc wygląda na to, że to 5-procentowy bufor zapobiega katastrofie. Teraz muszę tylko dowiedzieć się, dlaczego dysk jest pełny (jestem trochę zaniepokojony, że dzieje się coś złośliwego, ponieważ żaden plik dziennika nie zajmuje tyle miejsca i nie ma zainstalowanego zbyt dużego oprogramowania, tylko prosty serwer LAMP) ...
Chris,

3
Najpierw zajrzałbym do / tmp. Inną możliwością jest to, że masz usunięty plik, który trzyma uruchomiony program. Myślę, że możesz uruchomić grep usunięty ”jako root, aby je znaleźć.
Scott

Odpowiedzi:


103

Możliwe, że proces otworzył duży plik, który został usunięty. Musisz zabić ten proces, aby zwolnić miejsce. Możesz być w stanie zidentyfikować proces za pomocą lsof. W systemie Linux usunięte, ale otwarte pliki są znane lsof i oznaczone jako (usunięte) w wynikach lsof.

Możesz to sprawdzić za pomocą sudo lsof +L1


8
To rozwiązało dla mnie tajemnicę. Usunąłem duży plik dziennika z uwsgi bez ponownego uruchamiania usługi. Po zapytaniu df -ahmam pełny dysk, ale du -sh /mówi, że powinienem mieć wolne miejsce. Po ponownym uruchomieniu uwsgi mam dużo wolnego miejsca!
Fabio Montefuscolo

Miałem dzienniki o wartości 40G utknięte w zawieszeniu, a lsof + L1 dał mi obraz rentgenowski, aby zobaczyć, co się stało ;-) Wszystko, co musiałem zrobić, to zrestartować usługę.
PJ Brunet,

46

5% (domyślnie) systemu plików jest zarezerwowane na przypadki, gdy system plików zapełnia się, aby zapobiec poważnym problemom. Twój system plików jest pełny. Z powodu 5% bufora nie dzieje się nic katastrofalnego - root może używać tego bufora bezpieczeństwa, a w twojej konfiguracji użytkownicy inni niż root nie mają powodu, aby pisać w tym systemie plików.

Jeśli masz demony działające jako użytkownik inny niż root, ale które muszą zarządzać plikami w tym systemie plików, wszystko się zepsuje. Jednym z powszechnych takich demonów jest named. Innym jest ntpd.


1
Na pytanie DLACZEGO twój dysk jest pełny, 7G naprawdę nie ma tyle miejsca. Wygląda na to, że wszystko zostało zrzucone w ramach jednej partycji / systemu plików ( /). Zasadniczo uważa się to za Złą Rzecz (ponieważ jeśli coś pójdzie szaleńczo, zapełni /się, a świat się skończy), ale dystrybucje Linuksa nadal to robią, ponieważ jest „prostsze”. Zacznę od szukania /var(szczególnie /var/log) dużych plików dziennika. du -hs /(jako root) pomoże ci znaleźć największe katalogi i ewentualnie wskaże ci, co wymaga oczyszczenia.
voretaq7

35

Być może brakuje Ci i-węzłów. Sprawdź użycie i-węzła za pomocą tego polecenia:

df -i

17

Większość systemów plików Linux rezerwuje 5% miejsca do użytku tylko dla użytkownika root.

Możesz to zobaczyć np

dumpe2fs /dev/sda1 | grep -i reserved

Możesz zmienić zarezerwowaną kwotę za pomocą:

tune2fs -m 0 /dev/sda1

W większości przypadków serwer wydaje się działać poprawnie - zakładając, że wszystkie procesy są uruchamiane jako „root”.


8

Miałem ten problem i byłem zaskoczony faktem, że usunięcie różnych dużych plików nie poprawiło sytuacji (nie wiedziałem o buforze 5%) mimo kilku wskazówek tutaj

Od roota zeszły największe katalogi ujawnione poprzez powtarzalne wykonywanie:

du -sh */ 

dopóki nie przyszedłem do katalogu plików dziennika serwera WWW, który zawierał absolutnie ogromne dzienniki

które obciąłem

:>lighttpd.error.log

nagle df -h zostało użyte do 48%!


14
To naprawdę powinno się kończyć „... a potem ustawiam rotację logów”.
hayalci,

hayalci: stwierdził, że logrotation wskazywał na zły katalog.
zzapper,

8

Oprócz już sugerowanych przyczyn, w niektórych przypadkach może to być również:

  • inny dysk jest montowany „nad” istniejącym folderem, który jest pełen danych
  • du obliczy rozmiar zamontowanego dysku, a df pokaże naprawdę wydany
  • rozwiązanie: (jeśli to możliwe) odmontuj wszystkie dyski inne niż root i ponownie sprawdź rozmiar du -md 1. Napraw sytuację, przenosząc ukryty folder w inne miejsce lub zamontuj w innym miejscu.

jak znaleźć punkty montowania inne niż df?
Hogan

@Hogan: może pomocne byłoby nazwanie „mount” lub „cat / etc / fstab”?
Robert Lujo,

5

df -hzaokrągla wartości. Nawet wartości procentowe są zaokrąglone. Pomiń -hi zobaczysz drobniejsze różnice.

O. A ext3 i pochodne rezerwują procent (domyślnie 5%) dla systemu plików dla dokładnie tej problematycznej konstelacji. Jeśli Twój główny system plików byłby naprawdę pełny (pozostało 0 bajtów), nie możesz uruchomić systemu. Tak więc zarezerwowana część temu zapobiega.


Możliwe też, że zabrakło mu wolnych i-węzłów. Uruchom „df -i”, aby uzyskać użycie i-węzłów.
Andrew Case

Nie podał informacji, że dysk jest pełny. Myśli tylko, że dysk jest pełny. 100% wykorzystanego miejsca bez błędów jest tylko „praktycznie pełne”.
mailq 24.09.11

1

Zrobiłem dużą aktualizację kilku bibliotek i było wiele niepotrzebnych bibliotek i plików tymczasowych, więc zwalniam miejsce w folderze „/”, używając:

apt-get install -f
sudo apt-get clean

I opróżnij śmieci


Jest to rozsądna ogólna rada na temat zmniejszenia użycia dysku, ale nie zawiera odpowiedzi na pytanie, dlaczego df mówi, że dysk jest pełny, gdy nie jest.
Andrew Schulman,

0

sprawdź / lost + found, miałem system (centos 7), a część pliku w / lost + found zjadła całą przestrzeń


0

Jeśli twoją partycją jest btrfs, może być wolna przestrzeń. System plików btrfs może mieć wiele podwoluminów, z których tylko jeden jest podłączony. Możesz użyć btrfs subvolume list <dir>do wyświetlenia wszystkich podwoluminów i btrfs subvolume delete <dir>/<subvolume>do usunięcia jednego. Upewnij się, że nie usuwasz domyślnie zamontowanego.

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.