du 命令报告的文件大小错误,这种情况是 u 盘坏了还是 du 命令的问题?

2021-11-19 21:24:41 +08:00
 kgdb00
du 命令使用 -b 参数的大小是正确的,但 -h 参数的大小与实际大小刚好相差 4GB ,感觉是哪里有 bug ,但我把这个文件拷贝到另一个 u 盘,du 命令报告的大小都是正确的。

系统是 Fedora 35 ,下面示例中 2 个文件系统都是 exfat ,使用 ls ,stat 命令报告的大小都是正确的。

命令和输出如下:
root@desktop:/mnt# du -sh 3/Win10_English_x64.iso
250M 3/Win10_English_x64.iso # 这里的大小是错误的
root@desktop:/mnt#
root@desktop:/mnt# du -sh 4/Win10_English_x64.iso
4.3G 4/Win10_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt# cmp 3/Win10_English_x64.iso 4/Win10_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt# du -b 3/Win10_English_x64.iso
4556128256 3/Win10_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt# du -b 4/Win10_English_x64.iso
4556128256 4/Win10_English_x64.iso
root@desktop:/mnt#
2574 次点击
所在节点    Linux
28 条回复
kgdb00
2021-11-19 21:29:28 +08:00
ncdu 命令有和 du 命令一样的问题,这两个都是我用的很多的命令,如果不搞清楚原因,以后都不敢用了。
ysc3839
2021-11-19 21:37:45 +08:00
你给出的这段没做好控制变量呀,du -bsh ,du -bs 和 du -bh 的结果如何呢?
Cooky
2021-11-19 21:43:15 +08:00
文件系统?
kgdb00
2021-11-19 21:44:38 +08:00
@ysc3839

d@desktop:/mnt$ file /usr/bin/du
/usr/bin/du: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=eacf80f509266fff220e1672d42d51fbc3094921, for GNU/Linux 3.2.0, stripped
d@desktop:/mnt$
d@desktop:/mnt$ /usr/bin/du -bsh 3/Win10_English_x64.iso
4.3G 3/Win10_English_x64.iso
d@desktop:/mnt$
d@desktop:/mnt$ /usr/bin/du -bs 3/Win10_English_x64.iso
4556128256 3/Win10_English_x64.iso
d@desktop:/mnt$
d@desktop:/mnt$ /usr/bin/du -bh 3/Win10_English_x64.iso
4.3G 3/Win10_English_x64.iso
d@desktop:/mnt$
d@desktop:/mnt$ /usr/bin/du -h 3/Win10_English_x64.iso
250M 3/Win10_English_x64.iso
d@desktop:/mnt$
d@desktop:/mnt$ /usr/bin/du -sh 3/Win10_English_x64.iso
250M 3/Win10_English_x64.iso
d@desktop:/mnt$
d@desktop:/mnt$
Routeros
2021-11-19 21:58:48 +08:00
蹲一个
ynyounuo
2021-11-19 21:59:42 +08:00
@kgdb00
-b 是自带 --apparent-size 的
你应该对比 du --block-size=1 和 du -b

合理猜测 du 在这里显示有差异是因为你 U 盘的文件系统不支持 UDF
kgdb00
2021-11-19 22:07:57 +08:00
@ynyounuo

root@desktop:/mnt# /usr/bin/du --block-size=1 3/Win10_English_x64.iso
261160960 3/Win10_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt# /usr/bin/du -b 3/Win10_English_x64.iso
4556128256 3/Win10_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt#
kgdb00
2021-11-19 22:13:22 +08:00
@ysc3839 @ynyounuo

其他文件也有同样的情况,只要大于 4GB ,报告的大小就自动减去了 4GB

root@desktop:/mnt# /usr/bin/du -h 3/*
2.1G 3/Fedora-Server-dvd-x86_64-35-1.2.iso
1.9G 3/Fedora-Workstation-Live-x86_64-35-1.2.iso
396M 3/gparted-live-1.3.1-1-amd64.iso
2.9G 3/ubuntu-20.04.3-desktop-amd64.iso
1.2G 3/ubuntu-20.04.3-live-server-amd64.iso
3.0G 3/ubuntu-21.10-desktop-amd64.iso
250M 3/Win10_English_x64.iso
1.2G 3/Win11_English_x64.iso # 这个大小也错了
root@desktop:/mnt#
root@desktop:/mnt# /usr/bin/du -bh 3/*
2.1G 3/Fedora-Server-dvd-x86_64-35-1.2.iso
1.9G 3/Fedora-Workstation-Live-x86_64-35-1.2.iso
396M 3/gparted-live-1.3.1-1-amd64.iso
2.9G 3/ubuntu-20.04.3-desktop-amd64.iso
1.2G 3/ubuntu-20.04.3-live-server-amd64.iso
3.0G 3/ubuntu-21.10-desktop-amd64.iso
4.3G 3/Win10_English_x64.iso
5.2G 3/Win11_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt# /usr/bin/du -b 3/*
2232418304 3/Fedora-Server-dvd-x86_64-35-1.2.iso
2009333760 3/Fedora-Workstation-Live-x86_64-35-1.2.iso
415236096 3/gparted-live-1.3.1-1-amd64.iso
3071934464 3/ubuntu-20.04.3-desktop-amd64.iso
1261371392 3/ubuntu-20.04.3-live-server-amd64.iso
3116482560 3/ubuntu-21.10-desktop-amd64.iso
4556128256 3/Win10_English_x64.iso
5497985024 3/Win11_English_x64.iso
root@desktop:/mnt#
root@desktop:/mnt#
kgdb00
2021-11-19 22:17:52 +08:00
@Cooky 这个 exfat 文件系统是用 ventoy 创建的。
kgdb00
2021-11-19 22:19:13 +08:00
windows 10 里显示的文件大小都是正常的。
dingwen07
2021-11-19 22:55:29 +08:00
建议你把文件 Hash 一下,大概就知道 U 盘有没有问题了
kgdb00
2021-11-19 23:12:26 +08:00
sha256sum 跟微软官网的是一样的
kgdb00
2021-11-19 23:13:20 +08:00
ynyounuo
2021-11-19 23:16:25 +08:00
@kgdb00
可以确定是所有大于 4GB 的文件都有这个问题吗?
另外可以看看 isoinfo -d -i 的 volume size * block size 和 du -b 的结果是否一致
kokutou
2021-11-19 23:21:11 +08:00
mount 挂载参数呢?
kgdb00
2021-11-19 23:44:32 +08:00
@ynyounuo
win10 的不一致,win11 的一致

root@server:/c/iso# isoinfo -d -i Win10_English_x64.iso
CD-ROM is in ISO 9660 format
System id:
Volume id: ESD_ISO
Volume set id: ESD_ISO
Publisher id:
Data preparer id: IMAPI2 (1.0) ISO9660 FORMATTER COPYRIGHT (C) 2004-2007 MICROSOFT
Application id:
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 2224395
El Torito VD version 1 found, boot catalog is in sector 1404
NO Joliet present
NO Rock Ridge present
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID 'Microsoft IMAPIv2'
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 8
Bootoff 57D 1405
root@server:/c/iso#
root@server:/c/iso# /usr/bin/du -b Win10_English_x64.iso
4556128256 Win10_English_x64.iso
root@server:/c/iso#
root@server:/c/iso# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2224395 * 2048
4555560960



root@server:/c/iso# isoinfo -d -i Win11_English_x64.iso
CD-ROM is in ISO 9660 format
System id:
Volume id: CCCOMA_X64FRE_EN-US_DV9
Volume set id: CCCOMA_X64FRE_EN-US_DV9
Publisher id: MICROSOFT CORPORATION
Data preparer id: MICROSOFT CORPORATION, ONE MICROSOFT WAY, REDMOND WA 98052, (425) 882-8080
Application id: CDIMAGE 2.56 (01/01/2005 TM)
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 2684563
El Torito VD version 1 found, boot catalog is in sector 22
NO Joliet present
NO Rock Ridge present
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID 'Microsoft Corporation'
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 8
Bootoff 20B 523
root@server:/c/iso#
root@server:/c/iso# /usr/bin/du -b Win11_English_x64.iso
5497985024 Win11_English_x64.iso
root@server:/c/iso#
root@server:/c/iso# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
2684563 * 2048
5497985024
kgdb00
2021-11-19 23:46:21 +08:00
@ynyounuo 刚才创建了一个 5GB 的文件,结果大小显示正常

root@laptop:/mnt/1# /usr/bin/dd if=/dev/zero of=5GB obs=1G count=0 seek=5
root@laptop:/mnt/1# /usr/bin/du -h *
5.0G 5GB
2.1G Fedora-Server-dvd-x86_64-35-1.2.iso
1.9G Fedora-Workstation-Live-x86_64-35-1.2.iso
396M gparted-live-1.3.1-1-amd64.iso
2.9G ubuntu-20.04.3-desktop-amd64.iso
1.2G ubuntu-20.04.3-live-server-amd64.iso
3.0G ubuntu-21.10-desktop-amd64.iso
250M Win10_English_x64.iso
1.2G Win11_English_x64.iso
root@laptop:/mnt/1# /usr/bin/du -b *
5368709120 5GB
2232418304 Fedora-Server-dvd-x86_64-35-1.2.iso
2009333760 Fedora-Workstation-Live-x86_64-35-1.2.iso
415236096 gparted-live-1.3.1-1-amd64.iso
3071934464 ubuntu-20.04.3-desktop-amd64.iso
1261371392 ubuntu-20.04.3-live-server-amd64.iso
3116482560 ubuntu-21.10-desktop-amd64.iso
4556128256 Win10_English_x64.iso
5497985024 Win11_English_x64.iso
root@laptop:/mnt/1#
kgdb00
2021-11-19 23:48:41 +08:00
@ynyounuo @kokutou

umount 后再 mount ,5GB 的文件大小就变成 1GB 了

findmnt 输出:

└─/mnt/1 /dev/sda1 exfat rw,relatime,fmask=0022,dmask=0022,iocharset=utf8,errors=remount-ro
kgdb00
2021-11-19 23:52:11 +08:00
我上面总共用了 desktop ,server ,laptop 三个设备,可能会让各位感到迷惑,但结果都是一样的。
kgdb00
2021-11-20 00:01:11 +08:00
而且我发现 win11 上个月正式发布 iso 后,微软好像悄悄又更新了 iso ,我的 sha256 和官网的对不上,但我用 google 搜我的 sha256 这一串,可以搜到好多结果,各位可以试试:

667bd113a4deb717bc49251e7bdc9f09c2db4577481ddfbce376436beb9d1d2f

然后可以去微软官网下载 win11 的页面,点击那个“Verify your download”,没有一个结果和这个是一样的,应该就是微软悄悄更新 ISO 了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/816648

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX