我的eMMC分区是ext4格式的,大约有100MB。当我在该分区上发出 statvfs() 时,我得到了 struct statvfs 的 f_blocks 字段的巨大返回值。
struct statvfs {
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fragment size */
fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* # free blocks */
fsblkcnt_t f_bavail; /* # free blocks for non-root */
fsfilcnt_t f_files; /* # inodes */
fsfilcnt_t f_ffree; /* # free inodes */
fsfilcnt_t f_favail; /* # free inodes for non-root */
unsigned long f_fsid; /* file system ID */
unsigned long f_flag; /* mount flags */
unsigned long f_namemax; /* maximum filename length */
};
上面是 struct statvfs,供您参考。
f_blocks 字段打印的值是 18446744073659310077,考虑到我的分区有 100MB,这是一个很大的值。 df 命令还返回已使用的值和 16Z 的大小!
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk2p4 16Z 16Z 79M 100% /data
知道可能出什么问题吗?对分区进行 fsck 成功。不确定是超级块有问题还是什么?下面是代码供您参考。
if (statvfs_works ())
{
struct statvfs vfsd;
if (statvfs (file, &vfsd) < 0)
return -1;
fsp->fsu_blocks = PROPAGATE_ALL_ONES (vfsd.f_blocks);
....
}
我陷入了困境,需要理解为什么 df 命令中的used和size字段返回值16Z。任何指示将不胜感激。
更新更多信息========================================
Output from /proc/partitions is as follows:
179 3 102400 mmcblk2p4
strace 报告以下输出:
statfs64("/data", 88, {f_type="EXT2_SUPER_MAGIC", f_bsize=1024, f_blocks=18446744073659310077, f_bfree=87628, f_bavail=80460, f_files=25688, f_ffree=25189, f_fsid={-1446355608, 1063639410}, f_namelen=255, f_frsize=1024, f_flags=4128}) = 0
可以看出f_blocks是一个巨大的数字。这意味着什么?我的内核是4.9.31。如何解决这个问题并使 df 报告正确的输出?
输出 dumpe2fs 返回以下内容
Block count: 102400
Reserved block count: 5120
Overhead blocks: 50343939
开销块是一个巨大的数字。这意味着什么?
问候