Когда большие файлы удаляются на сервере, процессы могут ссылаться на файлы, поэтому файловая система не имеет больше свободного места.
Я пытался использовать lsof , но, похоже, в нем не было списка удаленных файлов. fuser -c
Я работал лучше, но список процессов слишком длинный, чтобы проверить его для каждого процесса, тем более что каждый процесс является процессом 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
Иногда случается, что файл удаляется приложением или пользователем, например, файлом журнала, и на этот файл все еще ссылается процесс, который не может быть перезапущен.
Существуют ли методы товаров для восстановления дискового пространства в удаленных файлах без перезапуска процесса, который имеет ссылку на этот удаленный файл?
cp /dev/null file
cp /dev/null
- пустая команда, так как ейcp
нечего копировать, простое перенаправление строго эквивалентно:>file
или даже>file
Ответы:
Найти все открытые файловые дескрипторы.
Grep удален.
StdError to / dev / null
Выход:
Или вы можете использовать awk
find / proc / * / fd -ls 2> / dev / null | awk '/ Удалено / {печать $ 11}';
вывод awk (протестирован в bash Ubuntu 12.04):
Найти и обрезать все удаленные файлы (протестировано в bash Ubuntu 12.04):
(НЕ ДЕЛАЙТЕ ЭТОГО, ЕСЛИ ВЫ НЕ ЗНАЕТЕ, ЧТО ВЫ ДЕЛАЕТЕ)
-p запрос перед выполнением усечения
Лучший способ - усечение вручную
Ручное усечение:
или же:
или же:
Наслаждаться ;)
источник
Вот простой пример с
less
:Давайте предположим, что у нас есть файл
my10MBfile
:Теперь я открываю этот файл с помощью
less
(да, это двоичный файл ... не берите в голову)Затем я удаляю этот файл
Это все еще там, но удалено. Посмотрите на 4-й столбец вывода lsof: дескриптор файла № 4, открытый для чтения (4r)
Давайте запустим GDB!
Это оно!
Наши 10 МБ приветствуются :)
Процесс все еще работает.
источник
Эта команда покажет все удаленные файлы, все еще открытые в системе Solaris:
Вы можете обрезать те, которые вы уверены, что вы хотите с этой командой:
где p - идентификатор процесса, а x - дескриптор файла, возвращаемый первой командой.
Не беспокойтесь, если в некоторых программах размер, о котором сообщается, через некоторое время
ls
восстанавливается до размера перед усечением, фактический размер, используемый на диске, будет намного меньше, поскольку файл теперь является разреженным.источник
Вы можете попытаться перейти в
/proc/<pid>/fd
каталог и обрезать соответствующий файловый дескриптор. Допустим, fd = 3 балла к удаленному файлу pid == 123:источник
Ни одно из этих решений не помогло мне. Только после использования Bleachbit в качестве пользователя root я смог правильно освободить пространство, связанное с удаленными файлами.
источник