XFS 문서에는 현재 이론적 최대 파일 크기가 8엑사바이트 - 1바이트라고 명시되어 있습니다. 그런데 이 계산이 어떻게 이루어지는지 알고 싶습니다. 다른 곳에서는 이에 대한 논의를 찾을 수 없는 것 같고 파일 시스템이 마운트되어 있는 경우 이를 확인할 수 있는 방법이 있는지도 궁금합니다.
답변1
이 계산(8엑사바이트 - 1바이트)이 어떻게 계산되는지 알고 싶습니다.
파일 크기는 -2^63에서 2^63-1 범위의 부호 있는 64비트 정수로 저장됩니다. 1엑비바이트는 2^60바이트이므로 2^63-1은 8엑비바이트 - 1바이트에 해당합니다.
또한 파일 시스템이 마운트되어 있는 경우 이를 확인할 수 있는 방법이 있는지 궁금합니다.
예, 다음을 시도해 보세요.
truncate -s 9223372036854775807 test && ls -l test
...또는 하나도 없는 경우 truncate
:
dd if=/dev/null of=test bs=1 seek=9223372036854775807 && ls -l test
(예상하셨겠지만, 9223372036854775807은 2^63-1입니다)
답변2
일반적으로 명시적인 저장 크기가 없더라도 두 가지 사항, 즉 데이터 블록이 저장되는 위치와 각 블록의 크기를 결정해야 합니다. 각 값의 최대값을 곱하여 최대 파일 크기를 얻습니다. 구체적인 세부 사항은 각 파일 시스템에 따라 다릅니다. XFS에서는 블록을 "익스텐트" di_nextents
라고 하며, 익스텐트 수(XFS 문서 초안) 예부호 있는 32비트 정수. 범위( di_extsize
)의 크기는 다음과 같습니다.부호 없는 32비트 정수. 이는 (2^32 - 1)*(2^31 - 1)을 제공하며, 이는 상대적으로 적은 수의 비트(2^32 + 2^31 - 1 = 3*2*2^30 - 1 ~ 6 GiB)입니다. , 8개 미만의 유럽 은행.
파일 시스템에 따라 블록 수 자체는 조금 더 복잡할 수 있습니다. 예를 들어 각 inode에는 N개의 데이터 블록 목록과 해당 파일에 대한 M개의 다른 inode 목록이 있을 수 있습니다(최대 K 깊이). N*(M^(K+1) - 1)/(M-1) 총 데이터 블록 수의 제한.