【发布时间】:2015-05-08 05:29:00
【问题描述】:
这是我今天遇到的一个很好的系统管理员问题,也许这里有人知道解决方案。问题很简单:我想事先知道在 Linux 上执行rm -rf 命令时释放了多少磁盘空间。
请注意,简单地使用du 将不起作用,因为可能有一些文件是从rm -rf 命令未删除的目录中硬链接的。
【问题讨论】:
-
不可能。您只能猜测,因为相同的、相同的物理文件可能有任意数量的链接。如果您删除 (=
unlink) 其中之一,则不会释放任何空间。 (换一种说法,rm删除的只是一个“名称”,只有当没有更多引用文件的名称时,它才真正被删除。) -
但是
ls -lsai会显示每个文件的硬链接数,以及文件的inode 数。这对于脚本来说应该是足够的信息来确定文件是否会被真正删除(如果在所有受rm -rf命令影响的目录中递归地删除)。但当然,我更喜欢比脚本更简单的解决方案:) -
ls -R1is | awk -M '{inodes[$1] = $2; } END {blocks = 0; for (i in inodes) { blocks += inodes[i]; } print blocks * 1024}'将非常接近,但它不能跨挂载点工作,因为在这种情况下 inode 编号不是唯一的 -
当一个程序有一个打开日志文件的句柄时,删除文件后空间不会释放。您是否还希望在您的解决方案中使用
fuser,在计算总数后可能会更改写入? -
@Walter A:有趣的问题,但不,对我来说,暂时句柄目前并不重要。因此,只需考虑“在我重新启动计算机后”我想知道释放的磁盘空间。
标签: linux unix diskspace rm hardlink