Mam serwery plików, które służą do przechowywania plików. Pliki mogą znajdować się tam przez tydzień lub rok. Niestety po usunięciu plików z serwera df
polecenie nie odzwierciedla zwolnionego miejsca. W końcu serwer zostaje zapełniony ( df
pokazuje 99%), a mój skrypt nie wysyła już więcej plików, z wyjątkiem tego, że może tam być kilkadziesiąt GB wolnego miejsca.
Mam noatime
flagę na zamontowanych partycjach, jeśli to robi jakąkolwiek różnicę.
linux
filesystems
disk-space-utilization
Aminah Nuraini
źródło
źródło
Odpowiedzi:
Usunięcie nazwy pliku nie powoduje usunięcia pliku. W innym procesie plik jest otwarty, przez co nie można go usunąć; uruchom ponownie lub zabij ten proces, aby zwolnić plik.
Posługiwać się
aby dowiedzieć się, który proces korzysta z usuniętego (niepowiązanego) pliku.
źródło
jak wspomina Ignacio, usunięcie pliku nie zwolni miejsca, dopóki nie usuniesz procesów, które mają otwarte uchwyty dla tego pliku.
Niemniej jednak możesz odzyskać miejsce bez zabijania procesów. Wszystko, co musisz zrobić, to usunąć deskryptory plików.
Najpierw uruchom lsof | grep usunięty, aby zidentyfikować proces przechowujący plik
Następnie wykonaj:
następnie
„1” będzie deskryptorem pliku. Teraz wpisz „> FD”, aby odzyskać to miejsce
Może być konieczne powtórzenie operacji, jeśli plik zawiera inne procesy.
źródło
> FD
zrobić?>
polecenie ma nazwę? musiałem przełączyć się z zsh na bash, aby móc z niego korzystać. Czy można go uruchomić na Zsh?Jedną z możliwości jest to, że usunięte pliki mają więcej odniesień w systemie plików. Jeśli utworzyłeś twarde linki, kilka nazw plików będzie wskazywać na te same dane, a dane (rzeczywista zawartość) nie będą oznaczone jako bezpłatne / użyteczne, dopóki wszystkie odniesienia do nich nie zostaną usunięte. Przed usunięciem plików należy je stat (Wpis o nazwie Linki) lub wykonać na nich polecenie ls -l (powinna to być druga kolumna).
Jeśli okaże się, że pliki są przywoływane gdzie indziej, myślę, że będziesz musiał ls -i plik (i), aby znaleźć numer i-węzła, a następnie wykonaj wyszukiwanie z -inum <numer_inodu>, aby znaleźć inne odniesienia do tego pliku (prawdopodobnie również chcesz użyć -mount, aby pozostać w tym samym systemie plików).
źródło
Plik jest nadal blokowany przez proces otwierania go. Aby zwolnić miejsce, wykonaj następujące kroki:
Uruchom
sudo lsof | grep deleted
i sprawdź, który proces przechowuje plik. Przykładowy wynik:Zabij proces za pomocą
sudo kill -9 {PID}
. W powyższej próbce PID wynosi 1623.Uruchom,
df
aby sprawdzić, czy miejsce jest już zwolnione. Jeśli nadal jest pełny, być może trzeba poczekać kilka sekund i sprawdzić ponownie.źródło
Jeśli partycja została skonfigurowana do rezerwowania pewnej części miejsca na dysku tylko do użytku root,
df
nie uwzględni tego miejsca jako dostępnego.Nawet po odzyskaniu przestrzeni przez usunięcie plików / katalogów, użytkownik inny niż root nie będzie mógł zapisywać na określonej partycji.
Możesz łatwo sprawdzić, czy tak jest w Twoim przypadku, próbując utworzyć plik na urządzeniu jako użytkownik root i użytkownik inny niż root.
Dodatkowo możesz sprawdzić konfigurację systemu plików, uruchamiając
i samodzielne obliczanie rzeczywistego%.
Aby zmienić dysk% zarezerwowany tylko do użytku root, wykonaj
źródło
Inne odpowiedzi są poprawne: jeśli usuniesz plik, a przestrzeń nie zostanie zwolniona, zwykle dzieje się tak dlatego, że plik jest nadal otwarty, lub istnieją inne twarde łącza do niego.
Aby pomóc w rozwiązywaniu problemów, użyj narzędzia, które informuje, gdzie jest zajęte miejsce na dysku: możesz użyć,
du
aby uzyskać przegląd tego, gdzie idzie miejsce. Co więcej, użyj narzędzia graficznego, takiego jak xdiskusage (jest wielu takich), aby upolować winnego. xdiskusage i przyjaciele pozwalają ci wiercić największe świnie kosmiczne, aby dowiedzieć się, dokąd zmierza kosmos.W ten sposób szybko znajdziesz pliki, które nadal zajmują miejsce z powodu drugiego twardego łącza. Pokaże również miejsce zajmowane przez usunięte, ale otwarte pliki (jak sądzę (odmowa uprawnień), ponieważ nie może odczytać nazwy pliku).
źródło
Ponieważ wiem, że mnóstwo z was robi to w celu
/var
redhatowania i spakowania plików, oczekując, że FS się zmniejszy, ale zamiast tego rośnie, po prostu upewnij się, że ponownie uruchomiłeś syslog. ipokaże ci to mimo wszystko.
źródło
Jeszcze jedna opcja: dysk może być pełny ze względu na proces ciągłego tworzenia danych: logi, rdzenie i tym podobne. Możliwe, że przestrzeń jest faktycznie uwalniana, ale jest natychmiast zapełniana. Tak naprawdę widziałem taki przypadek.
df
w tym przypadku po prostu nie daje obrazu dziury. Użyj,du
aby dowiedzieć się więcej.źródło
Używam EXT2, FSCK pomógł mi w tej sytuacji. Spróbuj shudown -F teraz, po kilku restartach i fscks, widzę, że połowa zużyła miejsce.
źródło
Aby sprawdzić, które usunięte pliki zajmują pamięć, wprowadź polecenie
Wyświetli usunięte pliki z pamięcią.
Następnie zabij proces za pomocą pid lub nazwy
sprawdź teraz, będziesz mieć tę samą pamięć
Jeśli nie, wpisz poniższe polecenie, aby zobaczyć, który plik zajmuje pamięć
wspomnij o dowolnym rozmiarze, który pokaże, które pliki zajmują więcej niż rozmiar progowy i usuń plik, w którym znajdziesz pamięć
źródło
otwórz terminal wypróbuj to polecenie df - Następnie użyj tego polecenia sudo du -h --max-depth = 1 / w tym poleceniu znajdziesz szczegółowe informacje o użyciu dysku, a następnie otwórz jako użytkownik root usuń plik (root-local-share-trash) i usuń plik
źródło