작은 파일은 얼마나 많은 공간을 차지합니까? [복사]

작은 파일은 얼마나 많은 공간을 차지합니까? [복사]

내 인상은 tar가 파일을 압축하지 않는다는 것입니다. 백만 개의 작은 파일( du -h~4.2G)을 압축했는데 결과 tar가 원래 크기(~1.3G)의 4분의 1에 불과했을 때 ls -lh mytar.tar얼마나 놀랐는지 상상해 보십시오 !

분명히 이러한 작은 파일은 보고된 크기보다 더 많은 공간을 차지하며다른 질문에 답하다비어 있지 않은 각 파일이 차지함을 나타냅니다.적어도크기에 관계없이 1KB입니다. 하지만 이 1KB는 어디에서 왔으며, 파일 시스템마다 다르며(ext4), 1.01KB 파일이 2KB를 차지합니까?

즉, 실제 파일 크기, 특히 디렉터리에 있는 많은 파일을 어떻게 측정합니까? 시도해 보았지만 du --apparent-size -h437M밖에 얻지 못했기 때문에 이 세 가지 매우 다른 숫자 때문에 매우 혼란스럽습니다.

답변1

Christopher가 지적했듯이 문제는 다음과 매우 유사합니다.1바이트의 텍스트만 있어도 텍스트 파일이 최소 4kB를 차지하는 이유는 무엇입니까?

개인적으로 이것을 중복으로 분류할지 잘 모르겠습니다.

그런데 1KB는 어디서 오는 걸까요?

더 일반적으로 4KB

파일 시스템은 개별 바이트가 아닌 바이트 블록(할당 단위라고도 함)으로 할당합니다. 따라서 단일 바이트를 파일에 저장하려면 파일에 전체 블록이 필요합니다. 이는 블록의 나머지 부분은 비어 있지만 다른 파일에서는 이를 사용할 수 없음을 의미합니다.

이 숫자의 기원은 불분명하지만 많은 것에 적합합니다. 예를 들어, 낮은 수준에서는 단일 바이트를 디스크에 쓸 수 없고 블록만 쓸 수 있습니다. 최신 HD와 심지어 SSD에도 4KB 제한이 있는 경우가 많습니다. 즉, 1바이트를 쓰려면 먼저 4KB를 로드하고 1바이트를 변경한 다음 전체 블록을 다시 써야 합니다. 전체 블록을 쓰려고 하면 원래 내용을 읽을 필요가 없습니다. 따라서 하드웨어 제약 조건을 준수하는 파일 시스템이 더 효율적입니다.

Stephen Kitt가 지적했듯이 4KB는많은 커널이 ext3의 최대 블록 크기를 지원합니다.. (반품여기서 토론하세요). 일반적으로 블록 크기가 클수록 액세스 시간이 더 효율적입니다. 즉, 블록이 클수록 좋습니다.

서로 다른 파일 시스템 간에 차이점이 있습니까(ext4)

옛날에는 512가 일반적인 블록 크기였으며 이 숫자는 여전히 때때로 기본값으로 나타납니다. Tar 파일은 매우 오래되었으며 동일한 512바이트 블록 크기(아마도 파일 시스템 및 하드웨어와 일관성을 유지하여 디스크 쓰기 속도가 매우 빨라질 것입니다). 이러한 tar 파일은 매우 작은 파일(<512바이트)의 경우 여전히 매우 낭비적이므로

오늘날에는 1KB 대신 4KB 정렬 파일 시스템이 더 일반적입니다.

예, 다른 블록 크기를 사용하도록 포맷할 때 파일 시스템을 구성할 수 있습니다. 파일 시스템마다 제한이 다르지만 대부분은 구성 가능합니다.

1.01KB 파일이 2KB를 차지합니까?

블록 크기를 1KB로 가정하면 그렇습니다.

답변2

귀하의 예에서 파일 시스템의 단일 파일이 사용하는 평균 공간은 4200바이트입니다.

tar 아카이브의 파일 오버헤드가 512바이트이므로 예제에서 파일의 평균 크기는 800바이트입니다.

많은 파일이 800바이트보다 작고 일부 파일이 4096바이트보다 약간 크며 파일 시스템이 4096바이트의 내부 블록 크기를 사용하지만 4096바이트보다 작은 조각을 구현하지 않는 경우 설명이 정확할 수 있습니다.

모든 파일이 4096바이트보다 작은 경우 du4G가 보고되므로 일부 파일에는 4096바이트의 블록 2개가 필요한 것으로 나타납니다.

관련 정보