为什么 `du` 的输出通常与 `du -b` 有如此大的不同?
- 2024-11-01 08:41:00
- admin 原创
- 46
问题描述:
为什么输出结果与?du
如此不同?是 的简写。 仅使用在大多数情况下会给我相同的结果,但似乎可以解决问题。 我想知道输出是否正确,哪些数字是我想要的? (即实际文件大小,如果复制到另一个存储设备)du -b
`-b--apparent-size --block-size=1
--apparent-size`--block-size=1
解决方案 1:
表观大小是应用程序认为文件中包含的字节数。如果您决定通过 FTP 或 HTTP 发送文件,则它是通过网络传输的数据量(不计算协议标头)。它也是 的结果cat theFile | wc -c
,以及如果您使用 加载整个文件,则文件将占用的地址空间量mmap
。
磁盘使用量是由于文件占用了该空间而无法用于其他用途的空间量。
在大多数情况下,表观大小小于磁盘使用量,因为磁盘使用量计算的是文件最后一个(部分)块的全部大小,而表观大小只计算最后一个块中的数据。但是,当您拥有稀疏文件时,表观大小会更大(当您在文件末尾之后的某个地方寻找,然后在那里写入一些内容时,就会创建稀疏文件 - 操作系统不会费心创建大量用零填充的块 - 它只会为您决定写入的文件部分创建一个块)。
解决方案 2:
最小块粒度示例
让我们玩一会儿看看发生了什么。
mount
告诉我我位于安装于 的 ext4 分区上/
。
我用以下方法找到它的块大小:
stat -fc %s .
其结果为:
4096
现在让我们创建一些大小为 的文件1 4095 4096 4097
,并使用--block-size=1
的同义词来测试它们-b
:
#!/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
相关:如何测试是否支持稀疏文件
如果我想存储一堆小文件该怎么办?
一些可能性是:
使用数据库而不是文件系统:数据库与文件系统存储
使用支持块子分配的文件系统
参考书目:
https://serverfault.com/questions/565966/which-block-sizes-for-millions-of-small-files
https://askubuntu.com/questions/641900/how-file-system-block-size-works
在 Ubuntu 16.04 中测试。
解决方案 3:
比较(例如)du -bm
到du -m
。
设置,但随后将-b
覆盖块大小为。--apparent-size --block-size=1
`m`1M
类似于:-bh
平均值,并且再次覆盖块大小。-h
`-bh--apparent-size --block-size=1 --human-readable
h`
解决方案 4:
文件和文件夹有其实际大小和磁盘上的大小。
--apparent-size
文件或文件夹的实际大小磁盘占用大小是文件或文件夹在磁盘上占用的字节数。使用 时也是一样
du
。
如果您发现表观大小几乎总是比磁盘使用率高几个数量级,那么这意味着您有很多带有内部碎片或间接块的(“稀疏”)文件。
解决方案 5:
因为默认情况下 du 会给出磁盘使用情况,该信息等于或大于文件大小。正如 --apparent-size 下所述
print apparent sizes, rather than disk usage; although the apparent size is usually smaller, it may be
larger due to holes in (`sparse') files, internal fragmentation, indirect blocks, and the like
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件