首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么‘`du’的输出与‘`du -b`’如此不同?

为什么‘`du’的输出与‘`du -b`’如此不同?
EN

Stack Overflow用户
提问于 2011-04-17 16:26:59
回答 5查看 23.9K关注 0票数 48

为什么du的输出常常与du -b有如此大的不同?-b--apparent-size --block-size=1的缩写。大多数情况下,只有使用--apparent-size才能给出相同的结果,但--block-size=1似乎做到了这一点。我想知道输出是否正确,我想知道哪些数字是我想要的?(即实际文件大小,如果复制到另一个存储设备)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-04-17 16:45:11

表观大小是应用程序认为文件中的字节数。如果您决定通过FTP或HTTP发送文件,则需要通过网络传输的数据量(不包括协议头)。这也是cat theFile | wc -c的结果,以及如果您使用mmap加载整个文件所占用的地址空间的数量。

磁盘使用是指由于文件占用了其他空间而不能用于其他事情的空间的数量。

在大多数情况下,表观大小小于磁盘使用率,因为磁盘使用率计算文件最后(部分)块的完整大小,而表观大小只计算最后一个块中的数据。然而,当您有一个稀疏文件时,显着的大小会更大(当您在文件结束后的某个地方查找稀疏文件,然后在那里写一些东西--操作系统不会费心创建很多填充了零的块--它只为您决定写入的文件的一部分创建一个块)。

票数 44
EN

Stack Overflow用户

发布于 2019-04-04 10:47:41

最小块粒度示例

让我们玩一会儿,看看是怎么回事。

mount告诉我,我在一个安装在/的ext4分区上。

我发现它的块状尺寸,包括:

代码语言:javascript
复制
stat -fc %s .

这意味着:

代码语言:javascript
复制
4096

现在让我们创建一些大小为1 4095 4096 4097的文件

代码语言:javascript
复制
#!/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

其结果是:

代码语言:javascript
复制
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确实将其考虑在内。

这可能导致明显的大小大于实际磁盘的使用。

例如:

代码语言:javascript
复制
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

给予:

代码语言:javascript
复制
8192    f
1073741825      f

相关:如何测试是否支持稀疏文件

,如果我想存储一堆小文件,该怎么办?

一些可能性是:

书目:

在Ubuntu 16.04测试。

票数 5
EN

Stack Overflow用户

发布于 2013-09-12 19:58:01

将(例如) du -bmdu -m进行比较。

-b设置--apparent-size --block-size=1,然后m将块大小重写为1M

类似于-bh-h-bh的意思是--apparent-size --block-size=1 --human-readable,而h又重写了这个块大小。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5694741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档