Więc mój klient otrzymał dzisiaj od Linode wiadomość e-mail z informacją, że jego serwer spowodował awarię usługi tworzenia kopii zapasowych Linode. Czemu? Za dużo plików. Zaśmiałem się, a potem pobiegłem:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Bzdury. W użyciu jest 2,4 miliona i-węzłów. Co się do cholery dzieje ?!
Szukałem oczywistych podejrzanych ( /var/{log,cache}
i katalogu, z którego hostowane są wszystkie strony), ale nie znalazłem niczego naprawdę podejrzanego. Gdzieś na tej bestii jestem pewien, że jest tam katalog zawierający kilka milionów plików.
Dla pierwszego kontekstu moje zajęte serwery używają 200 000 i-węzłów, a mój pulpit (stara instalacja z ponad 4 TB używanego miejsca) to tylko nieco ponad milion. Tam jest problem.
Więc moje pytanie brzmi: jak mogę znaleźć, gdzie jest problem? Czy istnieje du
dla i-węzłów?
źródło
Odpowiedzi:
Sprawdź, czy
/lost+found
nie wystąpił problem z dyskiem i wiele śmieci zostało wykrytych jako osobne pliki, być może nieprawidłowo.Sprawdź,
iostat
czy jakaś aplikacja nadal generuje pliki takie jak szalone.find / -xdev -type d -size +100k
poinformuje Cię, czy istnieje katalog, który zajmuje więcej niż 100kB miejsca na dysku. Byłby to katalog, który zawiera wiele plików lub zawierał wiele plików w przeszłości. Możesz dostosować wielkość figury.Nie sądzę, aby GNU zawierało kombinację opcji, aby
du
liczyć 1 na pozycję katalogu. Możesz to zrobić, tworząc listę plikówfind
i wykonując odrobinę liczenia w awk. Oto i-du
węzły. Minimalnie przetestowany, nie próbuje poradzić sobie z nazwami plików zawierającymi znaki nowej linii.Zastosowanie:
du-inodes /
. Drukuje listę niepustych katalogów z całkowitą liczbą wpisów w nich i ich podkatalogów rekurencyjnie. Przekieruj wyjście do pliku i przejrzyj go w dowolnym momencie.sort -k1nr <root.du-inodes | head
powie Ci największych przestępców.źródło
awk: line 2: find: regular expression compile failed (bad class -- [], [^] or [) [^ awk: line 2: syntax error at or near ] `/tmp/tmpw99dhs': Permission denied
Możesz sprawdzić za pomocą tego skryptu:
Spowoduje to wydrukowanie 10 najlepszych podkatalogów według liczby plików. Jeśli chcesz górnego x, zmień za
head
pomocąhead -n x
, gdziex
liczba naturalna jest większa niż 0.Aby uzyskać 100% pewności wyników, uruchom ten skrypt z uprawnieniami administratora:
źródło
10: read: Illegal option -d
... wyszarpał-d
flagę,read
mając nadzieję, że nic złego się nie stanie. Powiadomi Cię, kiedy zakończy bieganie ...Często szybciej niż znajdź, jeśli twoja zlokalizowana baza danych jest aktualna:
Spowoduje to zrzucenie całej zlokalizowanej bazy danych, usunięcie wszystkiego poza ostatnim „/” na ścieżce, a następnie sortowanie i „uniq -c” dostarczy ci liczbę plików / katalogów na katalog. „sort -n” biegnie do końca, aby uzyskać dziesięć katalogów z największą liczbą elementów.
źródło
find /path/to/parent -xdev > filelist
najpierw, a następnie skieruj sed, aby odczytać dane wejściowe z tej listy.Kolejna sugestia:
http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line
Skorzystaj z tych wyszukiwań, aby znaleźć największe pliki na swoim serwerze.
Znajdź pliki powyżej 1 GB
Znajdź pliki powyżej 100 MB
Znajdź pliki powyżej 10 MB
Pierwszą częścią jest polecenie find używające flagi „-size” do znajdowania plików o różnych rozmiarach mierzonych w kilobajtach.
Ostatni bit na końcu, zaczynający się od „-exec”, pozwala określić polecenie, które chcemy wykonać dla każdego znalezionego pliku. Tutaj polecenie „ls -lh”, aby uwzględnić wszystkie informacje wyświetlane podczas wyświetlania zawartości katalogu. Symbol h pod koniec jest szczególnie pomocny, ponieważ drukuje rozmiar każdego pliku w formacie czytelnym dla człowieka.
źródło
To zadziałało dla mnie, gdy druga nie działała na Androidzie przez powłokę:
źródło
Lubię używać czegoś takiego, jak
du --inodes -d 1
znaleźć katalog, który albo rekurencyjnie, albo bezpośrednio zawiera wiele plików.Podoba mi się również ta odpowiedź: https://unix.stackexchange.com/a/123052
źródło