linux – 文件大小不匹配

前端之家收集整理的这篇文章主要介绍了linux – 文件大小不匹配前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
报告文件大小差异的原因是什么?
[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)来报告使用的块数.

关于你的日志文件是一个稀疏文件的假设听起来似乎是合理的,但是,我不知道的原因.

原文链接:https://www.f2er.com/linux/396643.html

猜你在找的Linux相关文章