我刚刚将一些数据从一个 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
值不相同 ( 1652707240
vs 1652719488
)。但是,如果我du -s *
在每个目录中执行- 我会得到相同的值/输出...
为什么价值观会有差异Used
?
两个文件系统都是 ext4。
答案1
原因是,df报告size on disk
而杜报道actual file size
.即使在文件完全相同的情况下,也不意味着底层文件系统块保证是相同的。
考虑块大小为8k且Disk-1
块大小为4k在Disk-2
。
文件foo
的实际大小为11k。
Disk-1/foo
将占用 2 个块,即使用 28k=16k。
Disk-2/foo
将占用 3 个块,即使用 34k=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
** 你知道这些数字将如何绝不加起来?**