
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개:
- 생성된 디렉터리의 크기는 6입니다. 이유는 무엇입니까?
- 디렉토리에 대한 모든 새 항목(하위 디렉토리의 파일)은 'my-very-own-directory'의 크기에 추가됩니다. 문제는 크기가 8 + (파일 이름 길이 / 디렉터리 이름 길이)만큼 증가한다는 것입니다. 왜 8인가?
답변1
디렉토리 형식은 전적으로 파일 시스템에 따라 다릅니다.
최소한 디렉토리 항목에는 파일 이름과 inode 번호가 포함되어야 합니다.
사용하려면리눅스 ext4
파일 시스템(및 이전 버전) 예를 들어 원래 디렉토리 항목에는 inode 번호(4바이트), 파일 이름 길이(2바이트), 총 항목 길이(2바이트)와 파일 이름 자체가 포함되었습니다. (IIRC 전체 길이는 패딩 등을 허용하기 위해 명시적으로 지정됩니다.)
현재 버전( ext3
)도 트리형 저장소를 지원합니다. 이를 통해 많은 수의 파일이 있는 디렉터리를 더 빠르게 검색할 수 있지만 형식은 더 복잡합니다.
ext4
에서는 디렉토리 크기가 블록 크기의 배수로만 표시됩니다. 즉 , 빈 디렉토리에는 크기가 4096
있으며 새 데이터 블록을 할당해야 할 만큼 충분한 파일이 생성될 때까지 증가하지 않습니다.
RHEL 7은 XFS를 기본 파일 시스템으로 사용하므로 이를 실행 중인 것일 수 있습니다.XFS에는 다양한 디렉토리 형식이 있습니다, 작은 디렉터리에 사용되는 짧은 형식은 기본적으로 inode 번호 + 파일 이름 + 파일 이름 길이 + 총 길이의 최소 집합이 동일합니다.