내 통계 결과는 다음과 같습니다.
[alankoh@SJOAM swap]$ stat myswapfile
File: `myswapfile'
Size: 2147483648 Blocks: 4194312 IO Block: 4096 regular file
Device: fd03h/64771d Inode: 1179650 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-08-06 16:22:28.672852866 +0800
Modify: 2015-07-02 07:39:04.781064916 +0800
Change: 2015-07-02 07:39:04.809064917 +0800
할당된 블록(4194312)에 inode 자체의 크기가 포함되어 있습니까? 아니면 "실제 데이터" 부분을 참조합니까?
그러면 위 inode의 크기를 어떻게 알 수 있을까요?
물리적 블록 크기는 512 x 4194312 할당 블록 = 2147487744바이트입니다.
파일 크기는 2147483648바이트입니다.
2147487744 - 2147483648 = 4096바이트
4096바이트 = IO 블록
위의 관련 계산은 IO 블록과 어떤 관련이 있습니까? 파일에 공간이 필요할 때마다 할당 단위당 IO 블록이 있습니까? 4096 = 8블록 x 512바이트?
답변1
"청크" 값은 무엇 st_blocks
입니까 (struct stat
) 측정 결과는 표준화되지 않았습니다.
일반적으로 파일 시스템 콘텐츠에 사용되는 블록 수를 계산합니다. 이 값에 블록 크기를 곱하면 파일 크기가 되며 블록 크기의 가장 가까운 배수로 반올림됩니다. 한 가지 예외가 있습니다. 파일이스파스 파일, 그러면 더 적은 수의 블록을 사용합니다. 이로 인해 설명할 수 없는 몇 가지 사항이 남습니다.
- 파일 메타데이터에 의해 소비되는 공간: 타임스탬프, 권한 등 전통적인 Unix 레이아웃에서는 이 메타데이터가 inode에 저장되지만 최신 파일 시스템은 큰 메타데이터 없이도 많은 양의 메타데이터(액세스 제어 목록, 확장된 보안 속성 등)를 가질 수 있습니다. 항상 고정된 크기의 inode에 맞습니다.
- 간접 블록에 의해 소비되는 공간: 대용량 파일의 경우 파일 내용이 포함된 블록 목록 자체가 많은 블록을 차지할 수 있습니다.
- 디렉터리 항목(또는 파일에 여러 하드 링크가 있는 경우 항목)이 소비하는 공간입니다. 이 공간은 디렉토리 자체의 크기를 차지합니다.
나는 inode 크기를 값의 일부로 보고하는 파일 시스템을 모릅니다 st_blocks
. 대부분의 Unix 파일 시스템에는 inode를 나머지 콘텐츠와 분리하고 inode 사용량과 블록 사용량을 별도로 추적하는 레이아웃이 있습니다. 일부 파일 시스템에는 간접 블록이 포함되어 있지만 st_blocks
일부는 그렇지 않습니다.
블록 크기와 콘텐츠 크기 사이의 차이를 유발할 수 있는 다른 요인이 있습니다. 예를 들어, 압축된 파일 시스템에서 이 관계는 파일의 압축 가능 정도에 따라 달라집니다. 일부 파일 시스템은 여러 개의 작은 파일이나 더 큰 파일의 끝 부분 사이에서 블록을 공유할 수 있습니다. 예를 들어 1024바이트 블록은 200바이트 파일의 마지막 100바이트와 1124바이트 파일을 포함할 수 있습니다. st_blocks
두 파일의 값 으로 계산됩니다 .
"IO 블록" 값은 "블록" 값과 관련이 없습니다 st_blksize
. struct stat
이 st_blksize
값은 파일을 읽거나 쓸 때 이 크기의 버퍼를 사용하면 더 나은 성능을 얻을 수 있다는 것을 애플리케이션에 암시합니다. 복잡한 성능 특성을 지닌 최신 시스템에서는 관련성이 있을 수도 있고 없을 수도 있습니다.
많은 시스템에서 이 값의 단위는 다음에서 파생 st_blocks
됩니다 .f_bsize
struct statvfs
. 단위는 파일 시스템마다 다를 수 있습니다(ext4와 같은 동일한 유형의 파일 시스템이라도 1024, 2048 또는 4096을 사용할 수 있음). 나는 이것이 Linux에서는 항상 그렇다고 생각하지만 POSIX는 그것을 보장하지 않습니다. Linux에서는 를 f_bsize
사용하여 값을 표시 할 수 있습니다 stat -f
.
du
유틸리티는 파일의 디스크 사용량을 계산할 때 올바른 계산을 수행합니다. 이 유틸리티는 값에 적절한 블록 크기를 곱하는 것뿐입니다(따라서 대부분의 시스템에서는 inode를 포함하지 않습니다) du
.st_blocks
inode의 크기를 찾는 일반적인 방법은 없습니다. 일부 파일 시스템 유형은 파일 시스템 정의에서 찾을 수 있는 고정 크기 inode를 사용합니다. 일부 파일 시스템 유형은 유틸리티(예: tune2fs
ext[234])를 사용하여 쿼리할 수 있는 특정 파일 시스템에 대해 고정 크기를 사용합니다.
답변2
파일 시스템의 inode 크기를 결정하려면 tune2fs를 사용하십시오.
$ df -k /
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 9156984 7509468 1159324 87% /
$ tune2fs -l /dev/sda1|grep "^Inode size:"
Inode size: 256
$