내 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
오버헤드 블록은 엄청난 숫자입니다. 그게 무슨 뜻이야?
인사