Kiedy duże pliki są usuwane na serwerze, do plików mogą nadal odwoływać się procesy, więc system plików nie ma więcej wolnego miejsca.
Próbowałem użyć lsof , ale wygląda na to, że nie wymieniono usuniętych plików. fuser -c
działało lepiej, ale lista procesów jest po prostu zbyt długa, aby sprawdzić ją dla każdego procesu, zwłaszcza że każdy proces jest procesem Oracle.
bash-3.2# fuser -c /var
/var: 105o 29999o 20444c 3528c 27258o 7715o 3864o 3862o 2494o 18205o 17450co 17445co 14912co 14824co 14818co 14816o 14814o 8532c 8530c 7633com 7118o 6958o 6790c 6784co 6734o 6693o 6689o 6684o 6675o 6635o 6594c 6548o 6547o 6546o 6545o 6544o 6543o 6542o 6541o 6540o 6537o 6535o 6456o 6128co 6113o 335o 245co 229o 161o 8o
bash-3.2# du -hs /proc
139T /proc
Czasami zdarza się, że plik jest usuwany przez aplikację lub użytkownika, np. Plik dziennika i że plik ten jest nadal wywoływany przez proces, którego nie można ponownie uruchomić.
Czy istnieją metody towarów do odzyskania miejsca na dysku na usuniętych plikach bez ponownego uruchamiania procesu zawierającego odniesienie do tego usuniętego pliku?
cp /dev/null file
cp /dev/null
jest poleceniem zerowym, ponieważcp
nie ma nic do skopiowania, proste przekierowanie jest ściśle równoważne,:>file
a nawet>file
Odpowiedzi:
Znajdź wszystkie otwarte deskryptory plików.
Grep usunięty.
StdError do / dev / null
Wynik:
Lub możesz użyć awk
find / proc / * / fd -ls 2> / dev / null | awk '/ usunięto / {print 11 USD}';
wyjście awk (testowane w bash Ubuntu 12.04):
Znajdź i skróć wszystkie usunięte pliki (testowane w bash Ubuntu 12.04):
(NIE RÓB TO, JEŚLI NIE WIESZ, CO ROBISZ)
-p monit przed wykonaniem obcinania
Lepszym sposobem jest ręczne obcinanie
Obcinanie ręczne:
lub:
lub:
Cieszyć się ;)
źródło
Oto prosty przykład z
less
:Załóżmy, że mamy plik
my10MBfile
:Teraz otwieram ten plik za pomocą
less
(tak, to plik binarny ... nieważne)Następnie usuwam ten plik
Nadal tam jest, ale usunięty. Spójrz na czwartą kolumnę wyjścia lsof: Deskryptor pliku numer 4 otwarty do odczytu (4r)
Uruchommy GDB!
Otóż to!
Nasze 10 MB jest mile widziane :)
Proces jest nadal uruchomiony.
źródło
To polecenie pokaże wszystkie usunięte pliki nadal otwarte w systemie Solaris:
Za pomocą tego polecenia możesz obciąć te, które na pewno chcesz:
gdzie p jest identyfikatorem procesu, a x deskryptorem pliku zwróconym przez pierwsze polecenie.
Nie martw się, jeśli w przypadku niektórych programów rozmiar po zgłoszeniu
ls
zostanie przywrócony do rozmiaru przed obcięciem, rzeczywisty rozmiar użyty na dysku będzie znacznie mniejszy, ponieważ plik jest teraz rzadki.źródło
Możesz spróbować przejść do
/proc/<pid>/fd
katalogu i obciąć odpowiedni deskryptor pliku. Powiedzmy, że fd = 3 punkty do usuniętego pliku pid == 123:źródło
Żadne z tych rozwiązań nie działało dla mnie. Dopiero po użyciu Bleachbit jako root byłem w stanie poprawnie zwolnić miejsce związane z usuniętymi plikami.
źródło