报告文件大小差异的原因是什么?
[root@localhost]# ls -lah sendlog -rw-rw-r-- 1 mail mail 1.3T Aug 15 17:30 sendlog [root@localhost]# du -m sendlog 24M sendlog
当服务器的备份因配额问题而失败时,这引起了我们的注意,因此不仅“ls”看到了这个错误的大小.
我想到了“稀疏文件”和“块分配”之类的术语,但我不确定它为什么会发生或背后的真正原因.显然,两个命令检查大小的方式有所不同,我是否总是信任du?
解决方法
值之间的差异如下.
来自stat(2)的手册
struct stat { // snip off_t st_size; /* total size,in bytes */ // snip blkcnt_t st_blocks; /* number of blocks allocated */ // snip };
The st_blocks field indicates the
number of blocks allocated to the
file,512-byte units. (This may be
smaller than st_size/512,for example,
when the file has holes.)
ls报告的大小为st_size,du报告的大小为st_blocks * 512
du报告的值是文件系统/磁盘上文件使用的字节数,ls报告的值是与文件交互时文件的实际大小/长度. (除了使用磁盘使用,du还只计算一次硬件文件)
哪个值是“正确的”取决于上下文.如果你在disk-usage du之后是正确的,如果你想知道文件中有多少字节,那么ls / st_size是正确的.
此外,您可以使用各种选项get,即du( – parent-size)来使用st_size报告的大小,或者可以获得ls(-s)来报告使用的块数.