du 命令报告的文件大小错误,这种情况是 u 盘坏了还是 du 命令的问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
kgdb00
V2EX    Linux

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

  •  
  •   kgdb00 2021-11-19 21:24:41 +08:00 2958 次点击
    这是一个创建于 1502 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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#
    28 条回复    2021-11-20 20:53:21 +08:00
    kgdb00
        1
    kgdb00  
    OP
       2021-11-19 21:29:28 +08:00
    ncdu 命令有和 du 命令一样的问题,这两个都是我用的很多的命令,如果不搞清楚原因,以后都不敢用了。
    ysc3839
        2
    ysc3839  
       2021-11-19 21:37:45 +08:00 via Android
    你给出的这段没做好控制变量呀,du -bsh ,du -bs 和 du -bh 的结果如何呢?
    Cooky
        3
    Cooky  
       2021-11-19 21:43:15 +08:00
    文件系统?
    kgdb00
        4
    kgdb00  
    OP
       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
        5
    Routeros  
       2021-11-19 21:58:48 +08:00
    蹲一个
    ynyounuo
        6
    ynyounuo  
       2021-11-19 21:59:42 +08:00
    @kgdb00
    -b 是自带 --apparent-size 的
    你应该对比 du --block-size=1 和 du -b

    合理猜测 du 在这里显示有差异是因为你 U 盘的文件系统不支持 UDF
    kgdb00
        7
    kgdb00  
    OP
       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
        8
    kgdb00  
    OP
       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
        9
    kgdb00  
    OP
       2021-11-19 22:17:52 +08:00
    @Cooky 这个 exfat 文件系统是用 ventoy 创建的。
    kgdb00
        10
    kgdb00  
    OP
       2021-11-19 22:19:13 +08:00
    windows 10 里显示的文件大小都是正常的。
    dingwen07
        11
    dingwen07  
       2021-11-19 22:55:29 +08:00
    建议你把文件 Hash 一下,大概就知道 U 盘有没有问题了
    kgdb00
        12
    kgdb00  
    OP
       2021-11-19 23:12:26 +08:00 via Android
    sha256sum 跟微软官网的是一样的
    kgdb00
        13
    kgdb00  
    OP
       2021-11-19 23:13:20 +08:00 via Android
    ynyounuo
        14
    ynyounuo  
       2021-11-19 23:16:25 +08:00
    @kgdb00
    可以确定是所有大于 4GB 的文件都有这个问题吗?
    另外可以看看 isoinfo -d -i 的 volume size * block size 和 du -b 的结果是否一致
    kokutou
        15
    kokutou  
       2021-11-19 23:21:11 +08:00 via Android
    mount 挂载参数呢?
    kgdb00
        16
    kgdb00  
    OP
       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
        17
    kgdb00  
    OP
       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
        18
    kgdb00  
    OP
       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
        19
    kgdb00  
    OP
       2021-11-19 23:52:11 +08:00
    我上面总共用了 desktop ,server ,laptop 三个设备,可能会让各位感到迷惑,但结果都是一样的。
    kgdb00
        20
    kgdb00  
    OP
       2021-11-20 00:01:11 +08:00
    而且我发现 win11 上个月正式发布 iso 后,微软好像悄悄又更新了 iso ,我的 sha256 和官网的对不上,但我用 google 搜我的 sha256 这一串,可以搜到好多结果,各位可以试试:

    667bd113a4deb717bc49251e7bdc9f09c2db4577481ddfbce376436beb9d1d2f

    然后可以去微软官网下载 win11 的页面,点击那个“Verify your download”,没有一个结果和这个是一样的,应该就是微软悄悄更新 ISO 了。
    kgdb00
        21
    kgdb00  
    OP
       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
        22
    bitdepth  
       2021-11-20 02:11:18 +08:00 via iPad
    是不是那用量工具造存空的身碟?
    kokutou
        23
    kokutou  
       2021-11-20 07:58:35 +08:00 via Android
    如果换个不同品牌不同型号的 u 盘呢?
    kgdb00
        24
    kgdb00  
    OP
       2021-11-20 08:21:05 +08:00 via Android
    @kokutou 我最开始已经说了,用另一个 u 盘(金士顿的)没这个问题
    kokutou
        25
    kokutou  
       2021-11-20 08:27:48 +08:00
    @kgdb00 #24
    另一个 u 盘 dd 回来呢。
    kgdb00
        26
    kgdb00  
    OP
       2021-11-20 08:28:12 +08:00 via Android
    @bitdepth 不太理解你说的意思,我这个 u 盘是这款:

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

    京东自营还有在售,不过我是 5 年前买的,所以担心会不会是用久了出现质量问题了,不过数据拷贝进去都没有任何的损坏,也不能因为这一个问题就断定 u 盘坏了。
    kgdb00
        27
    kgdb00  
    OP
       2021-11-20 08:51:15 +08:00
    @kokutou @bitdepth @ynyounuo @Routeros @Cooky 刚才我把另一个 u 盘重新插上去,发现超过 4GB 的文件大小也被自动减去了 4GB ,然后我在固态硬盘上 mkfs.exfat 创建一个新的文件系统(啥参数都不加),拷贝进去一个 5GB 的文件,umount 后再 mount ,也出现了同样的问题,各位可以试试。
    ynyounuo
        28
    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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4741 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 09:05 PVG 17:05 LAX 01:05 JFK 04:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86