Wystąpił problem na jednym z moich serwerów z 16.04: nie ma już miejsca na dysku.
Nie mam pojęcia, co zajmuje przestrzeń. Czy istnieje polecenie, aby wyświetlić bieżące rozmiary katalogów, więc mogę przejść i skończyć w katalogu, zajmując całe miejsce?
disk-usage
Karl Morrison
źródło
źródło
export DISPLAY=:0.0; ssh -Y <user>@<server> filelight
(zamieńfilelight
na preferowane narzędzie). Oczywiście bez absolutnie wolnego miejsca, jeśli nie masz jeszcze zainstalowanego narzędzia, i tak musisz użyć czegoś innego!Odpowiedzi:
Jak zawsze w Linuksie, jest więcej niż jeden sposób na wykonanie zadania. Jeśli jednak musisz to zrobić z interfejsu CLI, jest to moja preferowana metoda:
Zaczynam od uruchomienia jako root lub sudo:
Grep ma na celu ograniczenie zwracanych linii do tych, które zwracają wartości z zakresu Megabajtów lub Gigabajtów. Jeśli twoje dyski są wystarczająco duże, możesz również dodać,
|T
aby uwzględnić kwoty terabajtów. Mogą pojawić się błędy na/proc
,/sys
i / lub/dev
ponieważ nie są to prawdziwe pliki na dysku. Jednak powinien nadal zapewniać prawidłowe dane wyjściowe dla pozostałych katalogów w katalogu głównym. Po znalezieniu największych możesz uruchomić komendę w tym katalogu, aby zawęzić winowajcę. Na przykład, jeśli/var
był największy, możesz to zrobić w następujący sposób:To powinno doprowadzić cię do problemu dzieci!
Dodatkowe uwagi
Podczas gdy powyższe polecenie z pewnością załatwi sprawę, miałem trochę konstruktywnej krytyki w komentarzach poniżej, które wskazały pewne rzeczy, które możesz również uwzględnić.
grep
przeze mnie może powodować sporadyczne zwracanie wartości „K”, jeśli nazwa katalogu lub pliku ma wielką literę G lub M. Jeśli absolutnie nie chcesz, aby którykolwiek z katalogów o wartości K pojawiał się, chciałbyś go zwiększyć twoja gra regularna, aby być bardziej kreatywnym i złożonym. na przykładgrep -E "^[0-9\.]*[MG]"
Jeśli wiesz, który dysk jest problemem i ma na nim inne zamontowane dyski, których nie chcesz tracić czasu, w tym na wyszukiwanie, możesz dodać
-x
flagę dodu
polecenia. Opis strony flagi tej flagi:Możesz posortować dane wyjściowe
du
polecenia, aby najwyższa wartość była na dole. Wystarczy dołączyć to na końcu polecenia:| sort -h
źródło
"^[0-9]*[.]*[0-9]*[MG]"
-x
opcji, abydu
pozostać na tym dysku (podanym w wierszu polecenia). Możesz także przesyłać strumieniowo,sort -h
aby poprawnie posortować wartości czytelne dla człowieka w megabajtach / gigabajtach. Zwykle rezygnowałem z tej--max-depth
opcji i po prostu przeszukiwałem cały dysk w ten sposób, sortując odpowiednio, aby uzyskać największe rzeczy na dole./
), a używanie-x
daje mi gwarancję, że nie będę pomyłki. Jeśli twój/
jest pełny i masz osobno zamontowany/home
czy cokolwiek innego, używanie-x
jest prawie koniecznością, aby pozbyć się nieistotnych rzeczy. Uważam więc, że jest to łatwiejsze w użyciu przez cały czas, na wszelki wypadek.Możesz
ncdu
do tego użyć . Pracuje bardzo dobrze.źródło
curl http://path/to/ncdu | sh
i będzie działał w pamięci podręcznej stdin IO, ale będzie to wymagało szczęścia. prawdopodobnie jest też sposób na stworzeniesudo ncdu /
z wiersza poleceń.sudo
bo jeśli nie umieścisz sudo, nie zgłosi rozmiarów folderów należących do roota, a/
ponieważ jeśli nie wpiszesz, będzie raportował tylko rekompensująco z folderu, w którym się znajdujeszUżywam tego polecenia
sudo du -aBM -d 1 . | sort -nr | head -20
Czasami muszę go uruchomić z
/
katalogu, ponieważ umieściłem coś w dziwnym miejscu.źródło
-d 1
przełącznika (i zwykle zless
zamiasthead -20
), aby uzyskać pełną rekurencyjnie wyliczoną listę wszystkich plików i katalogów posortowaną według zajmowanego miejsca. W ten sposób, jeśli widzę, że katalog zajmuje dużo miejsca, mogę po prostu przewinąć w dół, aby zobaczyć, czy większość miejsca jest faktycznie zajęta przez jakiś konkretny plik lub podkatalog. To dobry sposób na znalezienie niepotrzebnych plików i katalogów do usunięcia, aby zwolnić miejsce: przewiń w dół, aż zobaczysz coś, czego na pewno nie chcesz zachować, usuń i powtórz.sort
czeka na zakończenie danych wyjściowych przed rozpoczęciem.Istnieje już wiele dobrych odpowiedzi na temat sposobów znajdowania katalogów zajmujących większość miejsca. Jeśli masz powody, by sądzić, że kilka dużych plików jest głównym problemem, a nie wiele małych, możesz użyć czegoś takiego
find / -size +10M
.źródło
Nie znam Ubuntu i nie mogę sprawdzić mojej odpowiedzi, ale opublikuję tutaj moją odpowiedź na podstawie mojego doświadczenia jako administrator unixa dawno temu.
Dowiedz się, który system plików zabraknie miejsca
wyświetli cały system plików, ich rozmiar i ilość wolnego miejsca. Marnujesz czas tylko, jeśli zbadasz systemy plików, które mają wystarczającą ilość miejsca. Załóżmy, że pełny system plików to / myfilesystem. sprawdź wyjście df, jeśli istnieją systemy plików zamontowane w podkatalogach / myfilesystems. Jeśli tak, należy dostosować następujące sygnały do tej sytuacji.
Dowiedz się, ile miejsca zajmują pliki tego systemu plików
Opcji -x można użyć, aby zagwarantować, że brane są pod uwagę tylko pliki należące do tego systemu plików. Niektóre warianty Uniksa (np. Solaris) nie znają opcji -x dla du. Następnie musisz użyć kilku obejść, aby znaleźć du swojego systemu plików.
Teraz sprawdź, czy wielkość widocznych plików jest w przybliżeniu wielkości używanego miejsca wyświetlanego przez df. Jeśli tak, możesz zacząć szukać dużych plików / katalogów w systemie plików / myfilesystem do oczyszczenia.
znaleźć największe podkatalogi w katalogu /.../dir
opcja -k zmusza du do wyprowadzenia sie w kilobajtach bez żadnej jednostki. Może to być domyślne w niektórych systemach. Następnie możesz pominąć tę opcję. Największe pliki / podkatalogi zostaną pokazane na dole danych wyjściowych.
Jeśli znalazłeś duży plik / katalog, którego już nie potrzebujesz, możesz go usunąć w odpowiedni sposób. Nie przejmuj się małymi katalogami na górze danych wyjściowych. Nie rozwiąże problemu, jeśli je usuniesz. Jeśli nadal nie masz wystarczającej ilości miejsca, możesz powtórzyć krok 4 w podkatalogach larges, które są wyświetlane na dole listy.
Ale co się stanie, jeśli wynik du nie będzie w przybliżeniu dostępnej przestrzeni wyświetlanej przez df?
Jeśli wynik wyjściowy jest większy, oznacza to, że brakuje Ci podkatalogu, w którym zamontowany jest inny system plików. Jeśli wyjście du jest znacznie mniejsze, niektóre pliki nie są wyświetlane w żadnym katalogu, który sprawdza. Przyczyny jego zjawisk mogą być różne.
niektóre procesy używają pliku, który został już usunięty. Dlatego te pliki zostały usunięte z katalogu i du ich nie widzi. Ale w systemie plików ich bloki są nadal w użyciu, dopóki proces nie zamknie plików. Możesz spróbować znaleźć odpowiednie procesy (np. Z lsof) i zmusić je do zamknięcia tych plików (np. Przez zatrzymanie aplikacji lub zabicie procesów). Lub po prostu uruchom ponownie komputer.
w katalogach znajdują się pliki, które nie są już widoczne, ponieważ w jednym z ich katalogów nadrzędnych jest zamontowany inny system plików. Więc jeśli masz plik / myfilesysem / subdir / bigfile i teraz zamontujesz inny system plików na / myfilesystem / subdir, to nie możesz już zobaczyć tego pliku i
zgłosi wartość, która nie zawiera rozmiaru / myfilesystem / subdir / bigfile. Jedynym sposobem sprawdzenia, czy takie pliki istnieją, jest odmontowanie / myfilesystem / subir i sprawdzenie za pomocą
jeśli zawiera pliki.
Mogą istnieć specjalne typy systemów plików, które używają / rezerwują miejsce na dysku, który nie jest widoczny dla polecenia ls. Potrzebujesz specjalnych narzędzi, aby to wyświetlić.
Oprócz tego systematycznego korzystania z komendy du istnieje jeszcze kilka innych. Możesz więc użyć polecenia find, aby znaleźć pliki, które są większe niż pewna podana przez ciebie wartość, możesz wyszukać pliki, które są większe niż pewna podana przez ciebie wartość lub które zostały nowo utworzone lub mają specjalną nazwę (np. * .Log, core, * .trc). Ale zawsze powinieneś zrobić df, jak opisano w 1, aby pracować na odpowiednim systemie plików
źródło
/tmp
oddzielny system plików (np. Tmpfs) i coś utworzyło pliki,/tmp
zanim stało się punktem podłączenia do innego systemu plików. Teraz te pliki znajdują się w głównym systemie plików, ukryte w punkcie montowania i nie można uzyskać do nich dostępu bez ponownego uruchomienia w trybie odzyskiwania (który nie przetwarza/etc/fstab
) lub, jak sugerujesz, montowania bind.Jeśli nie chcesz używać polecenia, oto aplikacja: Filelight
Umożliwia szybką wizualizację wykorzystania miejsca na dysku w dowolnym folderze.
źródło
ssh -X <your host>
a następnie uruchom swój program z wiersza poleceńSpróbuj
sudo apt-get autoremove
usunąć nieużywane pliki, jeśli jeszcze tego nie zrobiłeśźródło
Często tego używam
Jeśli znajdę jakieś duże foldery, przełączę się na nie i przeprowadzę dalsze dochodzenie
W razie potrzeby możesz także ustawić sortowanie automatycznie za pomocą
źródło
Naprawdę nie odpowiedź - ale uzupełnienie.
Masz mało miejsca i nie możesz zainstalować ncdu z odpowiedzi @erman.
Jakieś sugestie
sudo apt clean all
aby usunąć pakiety, które już pobrałeś. BEZPIECZNYsudo rm -f /var/log/*gz
wyczyść pliki dziennika starsze niż tydzień lub dwa - nie usunie nowszych / bieżących dzienników. NAJBARDZIEJ BEZPIECZNYsudo lsof | grep deleted
wyświetla listę wszystkich otwartych plików, ale filtruje do tych, które zostały usunięte z dysku. FAIRLY SAFEsudo rm /tmp/*
usuń niektóre pliki tymczasowe - jeśli coś ich używa, możesz zakłócić proces. NIE NAPRAWDĘ TAKIE BEZPIECZNEŻe można zwrócić takie wiersze:
Nie można wiele zrobić z linią początkową, ale druga linia sugeruje, że solnik ma otwarty plik, który został usunięty, a bloki dysku zostaną zwrócone, gdy wszystkie uchwyty plików zostaną zamknięte przez ponowne uruchomienie usługi.
Innymi typowymi podejrzanymi tutaj są syslog / rsyslog / syslog-ng, kałamarnica, apache lub dowolny proces uruchamiany przez serwer, który jest „ciężki”.
źródło
Uważam za szczególnie cenny wynik działania narzędzi takich jak Filelight, ale tak jak w twoim przypadku, na serwerach zwykle nie ma zainstalowanego GUI, ale
du
polecenie jest zawsze dostępne.Zwykle robię to:
du
wynik w pliku (du / > du_output.txt
);DuFS
do „montowania” danychdu
wyjściowych w katalogu tymczasowym;DuFS
używa FUSE do stworzenia wirtualnego systemu plików (= żadne pliki nie są tworzone, wszystkie są fałszywe) zgodnie z danymidu
wyjściowymi;Zastrzeżenie: Napisałem
dufs
- właśnie dlatego, że często muszę dowiedzieć się, co wiedzie miejsca na dysku na maszynach bezgłowych.źródło
Podobne do @TopHat, ale filtruje niektóre pliki, jeśli mają w nazwie M, G lub T. Nie sądzę, aby rozmiar w pierwszej kolumnie był pomijany, ale nie będzie pasował do nazwy pliku, chyba że nazwiesz pliki w sposób kreatywny.
Wyjaśniono tutaj przełączniki wiersza poleceń , ponieważ nie wiedziałem, co zrobił c lub a.
źródło