私の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 */
};
上記は参照用の構造体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コマンドの使用フィールドとサイズフィールドが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
オーバーヘッドブロックは膨大な数です。それはどういう意味ですか?
挨拶