我有一些文件返回du -h
,512
我的理解是它应该返回带单位的数字。这是什么意思?实际使用的磁盘空间是多少?
好文件
(base) -bash-4.2$ du -h 2020.110/drr0/X1.0060_0958
36K 2020.110/drr0/X1.0060_0958
(base) -bash-4.2$ ls -l 2020.110/drr0/X1.0060_0958
-rw-rw-rw- 1 user11 users 36628 Jul 29 18:43 2020.110/drr0/X1.0060_0958
坏文件
(base) -bash-4.2$ du -h 2020.110/drr0/X1.0060_0957
512 2020.110/drr0/X1.0060_0957
(base) -bash-4.2$ ls -l 2020.110/drr0/X1.0060_0957
-rw-rw-rw- 1 user11 users 0 Jul 29 18:51 2020.110/drr0/X1.0060_0957
答案1
du 永远不会显示单位。请注意在两种情况下输出中没有“B”(表示字节)——“人类可读”模式仅显示乘数前缀(K、M、G),但不显示单位本身。由于 1024 以下的数字没有前缀,因此不显示任何数字。
通常情况下,“du”以块为单位测量文件(请参阅手册页),但使用“-h”选项时,单位始终为 1 字节。因此,当du -h
显示时512
,即为 512 字节。
为什么是 512 而不是 0?请参阅 phuclv 的回答
答案2
文件并不总是占用磁盘空间。数据块少于实际大小的文件将报告数据块数量较少
- 稀疏文件磁盘上只会存储非零块。因此,如果一个 50TB 的稀疏文件只有 5MB 非零数据,则只会占用约 5MB 的磁盘空间
- 内联文件数据区中也会占用 0 字节,因为它们直接存储在元数据中。在 NTFS 中,它被称为常驻文件后来还有许多其他 Linux 文件系统,如 ext4 或文件系统也支持类似的功能
- 压缩文件压缩后块数也会减少
您的文件可能已内联。由于它没有分配块,因此报告的数字ls
将为 0。您可以使用 轻松检查stat
。在 ext4 中,只有与 inode 大小(256+ 字节)相比非常小的文件才能内联,因此您可能正在使用其他文件系统,例如 NTFS 或 Btrfs
您可以使用--apparent-size
选项du
查看实际尺寸
--apparent-size
打印表观大小,而不是磁盘使用情况;虽然表观大小通常较小,但由于(“稀疏”)文件中的漏洞、内部碎片、间接块等原因,它可能会更大