为什么du的输出常常与du -b有如此大的不同?-b是--apparent-size --block-size=1的缩写。大多数情况下,只有使用--apparent-size才能给出相同的结果,但--block-size=1似乎做到了这一点。我想知道输出是否正确,我想知道哪些数字是我想要的?(即实际文件大小,如果复制到另一个存储设备)
发布于 2011-04-17 16:45:11
表观大小是应用程序认为文件中的字节数。如果您决定通过FTP或HTTP发送文件,则需要通过网络传输的数据量(不包括协议头)。这也是cat theFile | wc -c的结果,以及如果您使用mmap加载整个文件所占用的地址空间的数量。
磁盘使用是指由于文件占用了其他空间而不能用于其他事情的空间的数量。
在大多数情况下,表观大小小于磁盘使用率,因为磁盘使用率计算文件最后(部分)块的完整大小,而表观大小只计算最后一个块中的数据。然而,当您有一个稀疏文件时,显着的大小会更大(当您在文件结束后的某个地方查找稀疏文件,然后在那里写一些东西--操作系统不会费心创建很多填充了零的块--它只为您决定写入的文件的一部分创建一个块)。
发布于 2019-04-04 10:47:41
最小块粒度示例
让我们玩一会儿,看看是怎么回事。
mount告诉我,我在一个安装在/的ext4分区上。
我发现它的块状尺寸,包括:
stat -fc %s .这意味着:
4096现在让我们创建一些大小为1 4095 4096 4097的文件
#!/usr/bin/env bash
for size in 1 4095 4096 4097; do
dd if=/dev/zero of=f bs=1 count="${size}" status=none
echo "size ${size}"
echo "real $(du --block-size=1 f)"
echo "apparent $(du --block-size=1 --apparent-size f)"
echo
done其结果是:
size 1
real 4096 f
apparent 1 f
size 4095
real 4096 f
apparent 4095 f
size 4096
real 4096 f
apparent 4096 f
size 4097
real 8192 f
apparent 4097 f所以我们看到,实际上,任何低于或等于4096的东西都占用了4096字节。
然后,我们一过4097,就会到达8192,也就是2 * 4096。
很明显,磁盘总是在4096字节的块边界存储数据。
稀疏文件怎么办?
我还没有研究确切的表示形式是什么,但很明显,--apparent确实将其考虑在内。
这可能导致明显的大小大于实际磁盘的使用。
例如:
dd seek=1G if=/dev/zero of=f bs=1 count=1 status=none
du --block-size=1 f
du --block-size=1 --apparent f给予:
8192 f
1073741825 f相关:如何测试是否支持稀疏文件
,如果我想存储一堆小文件,该怎么办?
一些可能性是:
书目:
在Ubuntu 16.04测试。
发布于 2013-09-12 19:58:01
将(例如) du -bm与du -m进行比较。
-b设置--apparent-size --block-size=1,然后m将块大小重写为1M。
类似于-bh和-h:-bh的意思是--apparent-size --block-size=1 --human-readable,而h又重写了这个块大小。
https://stackoverflow.com/questions/5694741
复制相似问题