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#
2448 次点击
所在节点    Linux
28 条回复
kgdb00
2021-11-20 00:08:56 +08:00
@ynyounuo

用 isoinfo -d -i 的 volume size * block size 和 du -b 的结果相比较是说明什么问题呢?

我发现 fedora server 35 的 iso 也是不一致的,但 sha256sum 和官网的是一致的


root@server:/c/iso# sha256sum Fedora-Server-dvd-x86_64-35-1.2.iso
3fe521d6c7b12c167f3ac4adab14c1f344dd72136ba577aa2bcc4a67bcce2bc6 Fedora-Server-dvd-x86_64-35-1.2.iso
root@server:/c/iso#
root@server:/c/iso# isoinfo -d -i Fedora-Server-dvd-x86_64-35-1.2.iso
CD-ROM is in ISO 9660 format
System id: LINUX
Volume id: Fedora-S-dvd-x86_64-35
Volume set id:
Publisher id:
Data preparer id:
Application id: GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) 1997-2006 J.PEARSON/J.SCHILLING (C) 2006-2007 CDRKIT TEAM
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: 1089891
El Torito VD version 1 found, boot catalog is in sector 380
Joliet with UCS level 3 found
Rock Ridge signatures version 1 found
Eltorito validation header:
Hid 1
Arch 0 (x86)
ID ''
Key 55 AA
Eltorito defaultboot header:
Bootid 88 (bootable)
Boot media 0 (No Emulation Boot)
Load segment 0
Sys type 0
Nsect 4
Bootoff 50BAD 330669
root@server:/c/iso#
root@server:/c/iso# /usr/bin/du -b Fedora-Server-dvd-x86_64-35-1.2.iso
2232418304 Fedora-Server-dvd-x86_64-35-1.2.iso
root@server:/c/iso#
root@server:/c/iso# stat Fedora-Server-dvd-x86_64-35-1.2.iso
File: Fedora-Server-dvd-x86_64-35-1.2.iso
Size: 2232418304 Blocks: 4360200 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4194318 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ d) Gid: ( 1000/ d)
Access: 2021-11-20 00:03:38.167116659 +0800
Modify: 2021-11-05 07:15:49.224372134 +0800
Change: 2021-11-05 07:24:56.164238609 +0800
Birth: 2021-11-05 07:10:48.164996198 +0800
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'.
1089891 * 2048
2232096768
bitdepth
2021-11-20 02:11:18 +08:00
是不是那種用量產工具偽造儲存空間的隨身碟?
kokutou
2021-11-20 07:58:35 +08:00
如果换个不同品牌不同型号的 u 盘呢?
kgdb00
2021-11-20 08:21:05 +08:00
@kokutou 我最开始已经说了,用另一个 u 盘(金士顿的)没这个问题
kokutou
2021-11-20 08:27:48 +08:00
@kgdb00 #24
另一个 u 盘 dd 回来呢。
kgdb00
2021-11-20 08:28:12 +08:00
@bitdepth 不太理解你说的意思,我这个 u 盘是这款:

“闪迪(SanDisk)32GB Micro USB 接口 U 盘 DD3 酷捷 黑色 读速 150MB/s 安卓手机平板三用 便携 APP 管理软件”

京东自营还有在售,不过我是 5 年前买的,所以担心会不会是用久了出现质量问题了,不过数据拷贝进去都没有任何的损坏,也不能因为这一个问题就断定 u 盘坏了。
kgdb00
2021-11-20 08:51:15 +08:00
@kokutou @bitdepth @ynyounuo @Routeros @Cooky 刚才我把另一个 u 盘重新插上去,发现超过 4GB 的文件大小也被自动减去了 4GB ,然后我在固态硬盘上 mkfs.exfat 创建一个新的文件系统(啥参数都不加),拷贝进去一个 5GB 的文件,umount 后再 mount ,也出现了同样的问题,各位可以试试。
ynyounuo
2021-11-20 20:53:21 +08:00
@kgdb00
试了一下确实可以复现,并且用 find 打印 %S 后发现 BLOCKSIZE*st_blocks / st_size < 1.0
但是如果我用 truncate -s 5G 创建一个文件就不会有这个问题,umount 再 mount 也是类似的结果
也测试了其他几个文件都没有这个问题,有问题的就只有 Windows 的 iso image

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

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

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

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

© 2021 V2EX