AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1712609
Accepted
DhP
DhP
Asked: 2022-03-25 10:01:53 +0800 CST2022-03-25 10:01:53 +0800 CST 2022-03-25 10:01:53 +0800 CST

'du' 和 'dd' 在 BTRFS 磁盘上的奇怪行为显示为 0 文件大小。有人对此有一些线索或想法吗?

  • 772

一直在修补 btrfs,考虑从 ext4 迁移到那个。

但是,当想要比较 R/W 速度时,我似乎在 btrfs 磁盘上遇到了一个(至少对我而言)不寻常的行为du,它显然没有以与我的 ext4 上的文件相同的方式报告文件大小.

(为挪威语言环境道歉。尽管大多数人可能对英语输出足够熟悉以了解发生了什么)


制作测试文件

  1. dd我在已安装的btrfs磁盘上创建了一个 5GB 的“测试文件”:

    $ sudo dd if=/dev/urandom of=5G_dd_test_file.tmp bs=1 count=0 seek=5G
    0+0 oppføringer inn
    0+0 oppføringer ut
    0 byte kopiert, 0,00393248 s, 0,0 kB/s
    
  2. fallocate以类似的方式,我在同一位置创建了一个测试文件:

    $ sudo fallocate -l 5G 5G_fallocate_test_file.tmp
    
  3. ls确认他们都在那里:

    $ ls
    5G_dd_test_file.tmp  5G_fallocate_test_file.tmp
    

du行为怪异..(?)

大小输出du <file>:

$ sudo du 5G_dd_test_file.tmp 
0   5G_dd_test_file.tmp

$ sudo du 5G_fallocate_test_file.tmp 
5242880 5G_fallocate_test_file.tmp

注意 dd 生成的文件上的 0 文件大小

相比之下,ls在stat相同的文件上:

$ ls -l *.tmp
-rw-r--r-- 1 root root 5368709120 mars  24 18:07 5G_dd_test_file.tmp
-rw-r--r-- 1 root root 5368709120 mars  24 18:12 5G_fallocate_test_file.tmp
$ stat *.tmp
  Fil: 5G_dd_test_file.tmp
  Størrelse: 5368709120[tab]Blokker: 0          IO Blokk: 4096   vanlig fil
Device: 0,40    Inode: 258         Links: 1
Tilgang: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Tilgang: 2022-03-24 18:07:34.646755042 +0100
Omgjøring: 2022-03-24 18:07:34.646755042 +0100
Endring: 2022-03-24 18:07:34.646755042 +0100
 Fødsel: 2022-03-24 18:07:34.646755042 +0100
  Fil: 5G_fallocate_test_file.tmp
  Størrelse: 5368709120[tab]Blokker: 10485760   IO Blokk: 4096   vanlig fil
Device: 0,40    Inode: 259         Links: 1
Tilgang: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Tilgang: 2022-03-24 18:12:11.768422242 +0100
Omgjøring: 2022-03-24 18:12:11.768422242 +0100
Endring: 2022-03-24 18:12:11.768422242 +0100
 Fødsel: 2022-03-24 18:12:11.768422242 +0100

但是,如果我在执行显示为 0大小的相同生成文件时将-b参数添加到du (通常不需要) 。然后似乎照常行事。dd du

$ sudo du -b 5G_dd_test_file.tmp
5368709120  5G_dd_test_file.tmp

du(?)的另一个奇怪之处

所以只是出于好奇,我决定简单地gzip从以下文件中获取文件dd:

$ sudo gzip 5G_dd_test_file.tmp

$ sudo du 5G_dd_test_file.tmp.gz
5092    5G_dd_test_file.tmp.gz

现在它显示一个非零大小..

$ sudo ls -l 5G_dd_test_file.tmp.gz
-rw-r--r-- 1 root root 5210230 mars  24 18:07 5G_dd_test_file.tmp.gz
sudo stat 5G_dd_test_file.tmp.gz
  Fil: 5G_dd_test_file.tmp.gz
  Størrelse: 5210230   [tab]Blokker: 10184      IO Blokk: 4096   vanlig fil
Device: 0,40    Inode: 260         Links: 1
Tilgang: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Tilgang: 2022-03-24 18:07:34.646755042 +0100
Omgjøring: 2022-03-24 18:07:34.646755042 +0100
Endring: 2022-03-24 18:43:41.061926016 +0100
 Fødsel: 2022-03-24 18:42:27.554141544 +0100

问题是

  • 这是正常的行为并且实际上是可以预期的吗?
  • 如果不是,这可能会破坏依赖du回报的脚本或程序吗?
linux filesystems
  • 1 1 个回答
  • 72 Views

1 个回答

  • Voted
  1. Best Answer
    Kamil Maciorowski
    2022-03-25T10:40:36+08:002022-03-25T10:40:36+08:00

    这是正常的行为并且实际上是可以预期的吗?

    基本上是的。

    在创建文件时使用dd seek=…是一种创建稀疏文件的方法。使用dd seek=…和写入任何内容 ( count=0) 是创建完全稀疏文件的一种方式。

    […] 稀疏文件是一种计算机文件,当文件本身为部分空时,它会尝试更有效地使用文件系统空间。这是通过将表示空块的简短信息(元数据)写入数据存储介质而不是构成块的实际“空”空间来实现的,从而消耗更少的存储空间。仅当块包含“真实”(非空)数据时,才将完整块大小作为实际大小写入媒体。

    我更喜欢的方式是 with truncate。另一方面,它的主要目的fallocate是实际分配块。fallocate为您创建了一个非稀疏文件。

    du报告磁盘使用情况。完全稀疏的文件对数据使用零块。它只是一个分配了零块的目录条目。

    您gzip创建了一个非稀疏文件。没有完全稀疏的文件可以是有效的 gzip 存档,因为完全稀疏的文件在读取时返回空字节,但 gzip 标头单独包含非空字节。此外,我不希望任何 gzip 存档(能够)甚至部分稀疏,因为零块(即假设的稀疏部分)几乎可以毫不费力地高度压缩,并且它们的存在意味着gzip它的工作。


    这可能会破坏依赖du回报的脚本或程序吗?

    不,除非脚本du在应该使用时使用du -bor wc -c; 但这是脚本中的一个错误。

    用于du它的设计用途。这里有一些见解:为什么有这么多不同的方法来衡量磁盘使用情况?


    Ext4 也支持稀疏文件。使用您的dd命令,我在我的 ext4 文件系统和我的 btrfs 文件系统中分别创建了一个完全稀疏的文件。整个“问题”绝对不是关于 ext4 vs btrfs。

    • 3

相关问题

  • 是否可以在客户端中使用没有文件系统的 FTP?

  • 对于 cp 或 mv,是否有等同于 cd - 的东西?

  • 以 root 身份运行 docker 容器

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 如何在CentOS 7 中将Ctrl+C 永久更改为Ctrl+K?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve