stat()
파일에서는 를 포함한 여러 필드가 반환됩니다 st_blksize
. 이는 "효율적인 파일 시스템 I/O를 위한 '선호' 블록 크기"로 문서화되어 있습니다. 이 값은 stat()
다른 필드의 단위로 사용되지 않으며 POSIX 표준의 다른 곳에서는 참조되지 않습니다.
statvfs()
파일에서는 을 포함하여 여러 필드가 반환 됩니다 f_bsize
. f_frsize
, , 의 단위입니다 f_frsize
. "기본 파일 시스템 블록 크기" 및 "조각 크기"라고도 합니다.f_blocks
f_bfree
f_bavail
f_frsize
내 매뉴얼 페이지에서는 statvfs
이를 f_bsize
파일 시스템의 블록 크기로 설명합니다. 이것은 기본적으로 아무것도 알려주지 않습니다. 소개 부분에서 statvfs()가 전체 파일 시스템에 대한 정보를 반환한다고 이미 설명했습니다.
f_bsize
그것은 무엇을 위해 사용될 수 있습니까? 파일 시스템 블록 크기가 "기본 파일 시스템 블록 크기"와 다르다는 것은 무엇을 의미합니까?Linux, BSD 및/또는 UNIX에서도 동일한 상황이 발생합니까
f_bsize
?st_blksize
FUSE 파일 시스템이 이 규칙을 위반하도록 설계되었을 가능성은 무시해 보겠습니다. NFS 서버에서도 마찬가지입니다. 또한f_bsize
특정 파일에 의해 재정의될 수 있는 파일 시스템 전체 값을 나타내는 것에 대해서는 크게 걱정하지 않습니다 .st_blksize
POSIX와 달리 POSIX는 특정 의미를 암시하지 않는다고 생각하는 것이 맞습니까f_bsize
?
답변1
FreeBSD 문서는 다음과 같습니다:
f_frsize
- 이 파일 시스템에서 가장 작은 할당 단위의 크기(바이트)입니다. (이것은f_bsize
의 회원 에 해당합니다struct statfs
.)
f_bsize
- 이 파일 시스템의 파일에 대한 I/O 요청의 기본 길이입니다. (f_iosize
의 회원 에 해당합니다struct statfs
.)statvfs() 및 fstatvfs() 함수는 buf가 가리키는 구조를 가비지로 채웁니다. 이 가비지는 때때로 파일 시스템 통계와 유사할 수 있지만 이식 가능한 응용 프로그램은 이에 의존해서는 안 됩니다.
statvfs() 및 fstatvfs() 함수는 IEEE Std 1003.1-2001(``POSIX.1'')을 준수합니다. 표준화에 따라 이식 가능한 응용 프로그램은 이러한 기능에 의존하여 유효한 정보를 전혀 반환할 수 없습니다. 이 구현은 기본 파일 시스템이 제공하는 만큼 유용한 정보를 제공하려고 시도하지만 지정된 데이터 유형에 의해 제한됩니다.
GNU coreutils의 명령은 stat
"기본 블록 크기" 및 "블록 크기"도 표시할 수 있습니다. 후자를 "(빠른 전송을 위해)"로 기록합니다.
이것이 원래 의미와 정확하기를 바랍니다. POSIX 문서 st_blksize
에는 "일부 파일 시스템 유형에서는 파일마다 다를 수 있습니다"라고 나와 있습니다. 이는 f_bsize
POSIX가 특정 의미 지정을 피하는 이유 중 하나를 보여줍니다. (또 다른 점은 블록 크기 개념이 UIBFS와 같은 일부 파일 시스템에서는 동일한 의미를 갖지 않을 수 있다는 것입니다.)
f_bsize
쿼리하고 있는 특정 파일 시스템 구현에 대해 잘 알고 있는 경우에도 유용할 수 있습니다.
f_frsize
"조각 크기"의 원래 의미
"조각 크기"를 설명하는 것은 원래 파일 시스템의 조각을 참조하는 것으로 이해되어야 하는 것 같습니다.초고속 파일 시스템. 이는 "블록"보다 작은 할당 단위입니다. 바라보다ext3 파일 시스템의 조각 크기는 얼마입니까?
f_frsize
이를 토대로 보면 일반적으로 .보다 작거나 같을 것으로 보입니다 f_bsize
.
Linux ext2/ext3/ext4는 조각을 지원하지 않습니다. 일부 Linux 파일 시스템더 작게 보고될 수 있음f_frsize
. 이는 개발 중인 FUSE 파일 시스템이지만 그것이 무엇인지, 왜 "세그먼트" / 를 사용하는지 전혀 모릅니다 f_frsize
.