Tropienie pożeracza dysku
P
rzedstawiony hack jest tłumaczeniem „Playing Hunt the Disk Hog” z książki „Linux Servers Hacks” autorstwa Rob’a Flickenger’a udostępnionym on-line (Hack #15) na stronie http://hacks.oreilly.com. Do tłumaczenia zostało dodane także parę informacji od tłumacza.
To prawie zawsze zdarza się w sobotnią noc. Dostajesz wiadomość na komórkę, ponieważ partycja na jednym z serwerów (prawdopodobnie na serwerze pocztowym) niebezpiecznie zapełnia się prawie do końca.
Oczywiście program df pokaże, co nam zostało:
rob@magic:~$ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/sda1 7040696 1813680 4863600 27% / /dev/sda2 17496684 13197760 3410132 79% /home /dev/sdb1 8388608 8360723 27885 100% /var/spool/mail
Ale przecież już wiesz, że zapełnia się systemowy katalog poczty (dlatego SMS oderwał Cię od zupełnie niezwiązanego z serwerem poczty sposobu spędzania czasu). Jak szybko przekonać się, co pożera całe miejsce?
Oto jednowierszowy skrypt, który warto mieć w pliku .profile:
1
|
alias ducks='du -cks * |sort -rn |head -11' |
Kiedy ten alias jest aktywny, uruchomienie polecenia ducks (kaczki) w dowolnym katalogu spowoduje wyświetlenie łącznego zużycia oraz listy 10 najbardziej żarłocznych użytkowników w kolejności malejącej. Podkatalogi są przeszukiwane rekursywnie, a to jest bardzo przydatne (choć może długo potrwać na silnie obciążonym serwerze lub w katalogu, w którym znajduje się bardzo dużo podkatalogów i plików). Zobaczmy jak to działa:
rob@magic:~$ cd /var/spool/mail rob@magic:/var/spool/mail$ ducks 8388608 total 1537216 rob 55120 phil 48800 raw 43175 hagbard 36804 mal 30439 eris 30212 ferris 26042 nick 22464 rachael 22412 valis
Oj! Wygląda, że mój systemowy katalog poczty się przepełnia. Mam o całe rzędy wielkości poczty więcej od pozostałych użytkowników. Lepiej coś z tym zrobić, np. kupić nowy sprzęt i zmodernizować partycję /var/spool/mail. ;)
Ponieważ to polecenie rekursywnie przetwarza podkatalogi, nadaje się również do tworzenia okresowego raportu wykorzystania katalogów macierzystych:
root@magic:/home# ducks [ parę sekund później ] 13197880 total 2266480 ferris 1877064 valis 1692660 hagbard 1338992 raw 1137024 nick 1001576 rob 925620 phil 870552 shared 607740 mal 564628 eris
Przy poszukiwaniu osób zabierających całe miejsce na dysku ducks pozwala darować sobie pracochłonne wpisywanie poleceń z klawiatury (choć gdyby alias brzmiał ds, byłoby jeszcze szybciej, ale już nie tak zabawnie). Innymi metodami by uzyskać efekt tej komendy (lecz listing będzie w MB) są polecenia:
1
2
3
|
du -cksh * |sort -rn |head -11 ls -a | grep -v -e '^\.\.$' | xargs -i du -hs {} |sort -rn |head -11 ls -A | grep -v -e '^\.\.$' |xargs -i du -ks {} |sort -rn |head -11 | awk '{print $2}' | xargs -i du -hs {} |