디렉터리 크기는 어떻게 계산되나요?

디렉터리 크기는 어떻게 계산되나요?

CentOS 7.3 인스턴스에서 이것을 실행했습니다.

[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/ 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 6           Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 16          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ date > my-very-own-directory/date.txt 
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 32          Blocks: 0          IO Block: 4096   directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
  Size: 47          Blocks: 0          IO Block: 4096   directory
  • 초기 생성 => 크기 = 6
  • 이름 길이가 2바이트인 항목 추가 => 크기 16(6 + 8 + 2)
  • 이름 길이가 4바이트인 다른 항목 추가 => 크기 32(16 + 8 + 8)
  • 이름 길이가 7바이트인 다른 항목 추가 => 크기 47(32 + 8 + 7)

질문 2개:

  1. 생성된 디렉터리 크기가 6인데 왜 그렇습니까?
  2. 하위 디렉터리에 파일이 있든 관계없이 디렉터리의 각 새 항목은 "내 디렉터리"의 크기를 증가시킵니다. 문제는 크기가 8+(파일 이름/디렉터리 이름 길이)만큼 증가한다는 것입니다. 왜 8인가?

답변1

디렉토리 형식은 전적으로 파일 시스템에 따라 다릅니다.

최소한 디렉토리 항목에는 파일 이름과 inode 번호가 포함되어야 합니다.

사용해야한다리눅스 ext4파일 시스템(및 이전 버전) 예를 들어 원본 디렉토리 항목에는 inode 번호(4바이트), 파일 이름 길이(2바이트), 총 항목 길이(2바이트)와 파일 이름 자체가 포함됩니다. (IIRC 전체 길이는 패딩 등을 허용하기 위해 명시적으로 지정됩니다.)

현재 버전( ext3)은 또한 트리 저장소를 지원하므로 많은 수의 파일이 포함된 디렉터리를 더 빠르게 검색할 수 있지만 형식은 물론 더 복잡합니다.

위에서는 ext4디렉토리의 크기가 블록 크기의 배수로만 표시됩니다. 즉, 빈 디렉토리의 크기는 4096이며 새 데이터 블록을 할당해야 할 만큼 충분한 파일이 생성될 때까지 증가하지 않습니다.

RHEL 7은 XFS를 기본 파일 시스템으로 사용하므로 아마도 해당 시스템을 실행하고 있을 것입니다.XFS에는 여러 디렉터리 형식이 있습니다., 작은 디렉터리의 축약된 형식은 기본적으로 최소 inode 수 + 파일 이름 + 파일 이름 길이 + 총 길이의 동일한 집합을 갖습니다.

관련 정보