如何在 Linux 中查找所有稀疏文件

稀疏文件(Sparse files)是预先分配了大量空间的文件,而不会占用文件系统中的全部空间。
它们对于减少为虚拟化来宾创建循环文件系统或者大型磁盘镜像等所涉及的时间和磁盘空间非常有用。
术语“稀疏文件”用于表示包含“洞”的文件;在正在运行的系统上很容易识别一个,因为它的磁盘使用量小于它的大小。
我们可以通过 /var/log/lastlog 文件看到这种行为。

# ls -lh /var/log/lastlog
-rw-r--r--. 1 root root 286K Dec  3 04:50 /var/log/lastlog
# du -sh /var/log/lastlog
12K     /var/log/lastlog
之路教程 https://onitr oad .com

查找稀疏文件

现在上述过程可以识别系统中的稀疏文件,但是在一个文件系统或者目录中查找所有稀疏文件变得很麻烦,尤其是当它们很多时。
别担心,find 命令中有一个选项可以帮助我们一次性找到所有稀疏文件。
让我们看下面的例子。

  1. 使用带有“%S”的 find 命令来查找每个文件的稀疏度。
# find /var/log -type f -printf "%S\t%p\n"
# find /var/log -type f -printf "%S\t%p\n"
1       /var/log/tallylog
1.00095 /var/log/audit/audit.log.1
0.0419982       /var/log/lastlog
....
  1. 最左边一列显示的值是 (BLOCK-SIZE*st_blocks/st_size ),在稀疏文件的情况下通常小于 1.0。

  2. 如果要查找系统上所有稀疏文件,我们可以过滤掉最左边列值小于1的所有文件。

# find / -type f -printf "%S\t%p\n" | gawk ' < 1.0 {print}'
0.0139994       /var/log/lastlog
0.959592        /usr/lib/locale/locale-archive
...
日期:2020-09-17 00:13:37 来源:oir作者:oir