st_blocks가 항상 512바이트 블록으로 보고되는 이유는 무엇입니까?

st_blocks가 항상 512바이트 블록으로 보고되는 이유는 무엇입니까?

오류를 보고하는 퓨즈 파일 시스템을 디버깅하고 있었는데 알고 보니 [*]를 구조 에 du넣었습니다 . Linux 매뉴얼 페이지에는 다음과 같이 나와 있습니다.st_size / st_blksizest_blocksstatstat(2)

struct stat {
    off_t     st_size;    /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
};

st_blksizest_blocks블록 512B에 위치 하면 의 용도는 무엇입니까?

[*] 정수 나누기는 소수 부분을 고려하지 않기 때문에 이것은 어쨌든 잘못된 것 같습니다...

답변1

st_blocks한정된~처럼

이 객체에 할당된 블록 수입니다.

청크의 크기는 구현에 따라 다릅니다. Linux에서는 역사적인 이유로 항상 512바이트입니다. 특히 예전에는 디스크 섹터의 ​​일반적인 크기였습니다.

st_blksize관련이 없습니다.

이 개체에 대한 파일 시스템별 기본 I/O 블록 크기입니다. 일부 파일 시스템 유형에서는 파일마다 다를 수 있습니다.

I/O에 선호되는 크기를 나타냅니다.최상의 결과를 위해 한 번의 작업으로 전송되어야 하는 데이터의 양입니다(I/O 스택의 다른 레이어 무시).

관련 정보