有没有办法告诉内核现在归还可用磁盘空间?就像写入 /proc/ 中的某些内容一样?使用带有 ext4 的 Ubuntu 11.10。
这大概是一个老的以及非常重复的主题。在点击 0 空间后,我只注意到我的编辑器无法保存我打开的源代码文件,令我恐惧的是,这些文件现在在文件夹列表中的大小为 0 字节,我继续疯狂删除。
我从用户和 root 中删除了 100 MB 的大文件,并且还做了一些硬链接。
就在我这样做之前,apt-get clean
/var/cache/apt/archives 中有超过 900MB,现在只有 108KB:
# 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
请注意,inode 仍然打开,但现在长度为 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
现在显示45M免费。
- 快速保存我的文件
恢复到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
说明:
Greplsof
输出仅提取已删除的文件。 sed 从每一行中提取进程 id 和文件描述符 id,并创建一个格式为 的字符串{pid}/fd/{fid}
。 while 循环并对每个文件不输出任何内容,将它们设置为空。