파일 시스템에 파일이 저장되는 방식을 읽으면서 217바이트 크기의 테스트 파일을 만들었습니다. 파일의 출력을 확인하면 stat
파일이 8개의 블록을 차지하는 것을 볼 수 있습니다. 처음에는 블록 크기가 4096바이트이고 값을 대체 Blocks:
해야 하는 경우 1
크기가 217바이트인 파일에서 8블록을 사용하는 것은 불가능하다고 생각했습니다 8
. 그럼 난 읽어이것,이것그리고이것그리고 그 Blocks:
값은 파일이 차지하는 512바이트의 공간임을 알 수 있습니다. 그리고 최소 블록 크기는 4096바이트이므로 2바이트 크기의 파일이라도 8블록을 차지합니다(4096/512 = 8이므로).
[root@server ~]# stat smallfile.txt
File: `smallfile.txt'
Size: 217 Blocks: 8 IO Block: 4096 regular file
내가 읽고여기저것:
"각 섹터는 사용자가 액세스할 수 있는 고정된 양의 데이터를 저장합니다. 일반적으로 하드 디스크 드라이브(HDD)의 경우 512바이트, CD-ROM 및 DVD-ROM의 경우 2048바이트입니다. 최신 HDD는 고급 포맷이라고 알려진 4096바이트(4KiB) 섹터를 사용합니다. (AF)."
내가 액세스할 수 있는 모든 시스템은 섹터 크기가 512바이트인 HDD를 사용합니다. 그렇다면 나는 st_blocks
그것이 하드 드라이브의 섹터 크기와 일치한다고 믿습니까(제가 제공한 두 번째 및 세 번째 하이퍼링크에 설명되어 있음)? 질문은 다음과 같습니다.
- 나중에 섹터 크기가 4096바이트인 HDD에 동일한 217바이트 크기 파일을 갖게 되면
stat
파일의 명령이 (4096/4096 = 1이므로)Blocks: 1
대신 표시됩니까?Blocks: 8
- 아니면
st_blocks
섹터 크기에 관계없이 항상 512바이트를 단일 최소 단위로 사용합니까? - 아니면 VFS와 관련이 있습니까?
답변1
귀하가 제공한 링크에는 다음과 같이 명확하게 명시되어 있습니다.
st_blocks 필드는 파일에 할당된 블록 수를 512바이트 단위로 나타냅니다.
따라서 사용되는 기본 장치에 관계없이 항상 512바이트 블록으로 측정됩니다. 이 명령은 시스템 호출이 반환하는 내용 stat
만 표시합니다 . stat
512바이트 블록은 POSIX에 정의된 역사적인 것입니다. 예를 들어 다음을 비교하십시오.
$ ls -s smallfile.txt
4 smallfile.txt
$ env POSIXLY_CORRECT=1 ls -s smallfile.txt
8 smallfile.txt
GNU는 ls
기본적으로 블록을 1kB 블록으로 표시하지만 POSIX 준수가 시행되면 512바이트 블록을 표시합니다.