
Есть ли способ сказать ядру вернуть свободное дисковое пространство сейчас? Например, записать что-то в /proc/ ? Использую Ubuntu 11.10 с ext4.
Это, вероятно,старыйи очень повторяющаяся тема. После нажатия на 0 пробелов, я заметил это только тогда, когда мой редактор не смог сохранить открытые мной файлы исходного кода, которые, к моему ужасу, теперь имеют размер 0 байт в списке папок, и я принялся удалять.
Я удалил сотни МБ больших файлов как из пользовательской, так и из корневой папки, а также сделал некоторые жесткие ссылки.
До этого apt-get clean
в /var/cache/apt/archives было более 900 МБ, а теперь там всего 108 КБ:
# du
108 /var/cache/apt/archives
Спустя час свободного места все еще нет, и я не могу сохранить свои драгоценные файлы, открытые в редакторе, но обратите внимание на разницу ниже:
# sync; df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 13915072 13304004 0 100% /
Есть предложения? Я отключил некоторые службы/процессы, но не уверен, как проверить, кто может активно поедать дисковое пространство.
Больше информации
# dumpe2fs /dev/sda4
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 884736
Block count: 3534300
Reserved block count: 176715
Free blocks: 422679
Free inodes: 520239
First block: 0
Block size: 4096
Fragment size: 4096
решение1
Проверьте, lsof
есть ли открытые файлы. Место не будет освобождено, пока они не будут закрыты.
sudo /usr/sbin/lsof | grep deleted
покажет вам, какие удаленные файлы все еще открыты.
решение2
Используйте lsof
для поиска удаленного, но открытого файла, все еще занимающего место:
lsof | grep deleted | grep etilqs_1IlrBRwsveCCxId
chrome 3446 user 128u REG 253,2 16400 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Найдите запись, /proc/<pid>/fd/
соответствующую дескриптору файла:
ls -l /proc/3446/fd/etilqs_1IlrBRwsveCCxId
lrwx------. 1 user unix 64 Feb 11 15:31 128 -> /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
Теперь перейдем непосредственно cat /dev/null
к fd:
cat /dev/null > /proc/3446/fd/128
Обратите внимание, что индексный дескриптор все еще открыт, но теперь его длина равна 0.
chrome 3446 user 128u REG 253,2 0 2364626 /var/tmp/etilqs_1IlrBRwsveCCxId (deleted)
решение3
df
не будет отображаться зарезервированное место для root
(даже при запуске от имени root
):
# df -h
Filesystem Size Used Avail Use% Mounted on
...
/dev/optvol 625G 607G 0 100% /opt
...
Как изменить «процент зарезервированного блока»
Уменьшить зарезервированное пространство до 4%
# tune2fs -m4 /dev/sda4
df -h
сейчас показало 45М свободно.
- Быстро сохранил мои файлы
Верните его к 5%
# tune2fs -m5 /dev/sda4
решение4
sudo lsof | grep "(deleted)$" | sed -re 's/^\S+\s+(\S+)\s+\S+\s+([0-9]+).*/\1\/fd\/\2/' | while read file; do sudo bash -c ": > /proc/$file"; done
Объяснение:
Grep lsof
выводит данные для извлечения только удаленных файлов. Sed извлекает идентификатор процесса и идентификатор дескриптора файла из каждой строки и создает строку в формате {pid}/fd/{fid}
. Цикл While и ничего не выводит в каждый файл, делая их пустыми.