如何更改“保留块百分比”

如何更改“保留块百分比”

有没有办法告诉内核现在归还可用磁盘空间?就像写入 /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
...

如何更改“保留块百分比”

  1. 将预留空间减少至 4%

    # tune2fs -m4 /dev/sda4

df -h现在显示45M免费。

  1. 快速保存我的文件
  2. 恢复到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 循环并对每个文件不输出任何内容,将它们设置为空。

相关内容