【问题标题】:How to determine the amount of space that comes free when running rm -rf如何确定运行 rm -rf 时释放的空间量
【发布时间】: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


【解决方案1】:

du 通常只会计算一次硬链接文件,因此du -sk some/directory 应该可以正常工作。

# ls -li
total 2048
131346 -rw-r--r-- 2 root root 1048576 Mar  6 13:12 file1
131346 -rw-r--r-- 2 root root 1048576 Mar  6 13:12 file2
# du -sk file1
1024    file1
# du -sk file2
1024    file2
# du -sk .
1028    .

额外的 4k 是给目录本身的,但是注意它并没有声称这个目录使用了 2M...

但是,正如您所观察到的,这不会考虑目标之外的硬链接。如果不编写遍历整个目录层次结构以查找文件的所有其他链接的脚本,可能没有简单的方法来解决这个问题...du 将报告一个上限,但是 - 您将获得一些空间小于或等于du 报告的值。

【讨论】:

    猜你喜欢
    • 2011-02-28
    • 2014-01-05
    • 2021-04-09
    • 2010-09-24
    • 2017-09-06
    • 2022-01-17
    • 2019-11-22
    • 2013-01-10
    • 2012-05-13
    相关资源
    最近更新 更多