为什么 df 在两个不同分区上的相同数据显示不同的使用值?

为什么 df 在两个不同分区上的相同数据显示不同的使用值?

我刚刚将一些数据从一个 raid 分区复制到另一个分区。当我查看以下输出时df

Filesystem      1K-blocks       Used  Available Use% Mounted on
/dev/md127     1921673480 1652707240  171280736  91% /home/chris/mount/raid18t
/dev/md3       2881491232 1652719488 1082329968  61% /home/chris/mount/raid3t

这些Used值不相同 ( 1652707240vs 1652719488)。但是,如果我du -s *在每个目录中执行- 我会得到相同的值/输出...

为什么价值观会有差异Used

两个文件系统都是 ext4。

答案1

原因是,df报告size on disk报道actual file size.即使在文件完全相同的情况下,也不意味着底层文件系统块保证是相同的。

考虑块大小为8kDisk-1块大小为4kDisk-2
文件foo的实际大小为11k

Disk-1/foo将占用 2 个块,即使用 28k=16k。
Disk-2/foo将占用 3 个块,即使用 3
4k=12k。

编辑
只是为了好玩,选择一个包含大量小文件的目录。运行ls -l并计算文件大小的总和。这是文件的实际大小。在我的 Linux 风格中,文件大小位于第 5 列。因此我会执行以下操作:
ls -l | awk '{ttl=ttl+$5} END {print "Total file size " ttl}'
这将计算目录中文件大小的总和。
接下来,列出磁盘上的扇区数ls -ls以及扇区总数:
ls -ls | awk '{ttl=ttl+$1} END {print "Total sector count " ttl}'

在我的系统上,我检查了引导目录:
ls -lsR /boot | awk '{if (($1+0) >0) tt_sec=tt_sec+$1; tt_byt=tt_byt+$6} END {print "Sectors " tt_sec " Bytes " tt_byt}'
扇区 151,352 字节 153,894,246
du -xs /boot
151360
df /boot
1-K 块: 499656
已用: 151756

注意到这 3 个数字有何不同吗? ls默认情况下显示大小(以字节为单位)。
df除非另有配置,否则报告 1K 块
我的磁盘配置有 512 字节扇区(我从 获得fdisk
如果我将隐藏文件和目录添加到 ls 命令中:
ls -lRsa (…) 扇区 151,504 字节 154,045,696
更接近,但仍然关闭。
现在让我向您展示正在发生的事情:
- 为了方便而复制 -
ls -lsRa /boot | awk '{if (($1+0) >0) tt_sec=tt_sec+$1; tt_byt=tt_byt+$6} END {print "Sectors " tt_sec " Bytes " tt_byt}'
扇区 151,504 字节 154,045,696
df /boot
1-K 块: 499656
使用: 151756
du -xs /boot
151360

echo "Hi" > junk ls -ls junk
4 -rw-r--r-- ScottieH user 3 junk
请注意,这个 3 字节文件使用了 4 个扇区!

-重新计算大小- ls -lsRa /boot | awk '{if (($1+0) >0) tt_sec=tt_sec+$1; tt_byt=tt_byt+$6} END {print "Sectors " tt_sec " Bytes " tt_byt}'
扇区 151,508 字节 154,045,972 <-增加了多少?
du -xs /boot
151364
df /boot
1-K 块:499656
使用:151760

** 你知道这些数字将如何绝不加起来?**

相关内容