왜 유닉스에서 디렉토리의 크기가 항상 4096 바이트입니까?


26

디렉토리 파일의 정보가 4096 바이트보다 훨씬 적습니다. 섹터 크기가 4096 바이트라는 것을 알고 있습니다. 그러나 그보다 작은 일반 파일이 존재합니다.

유닉스는 왜 각 폴더에 4096 바이트를 예약합니까?

답변:


30

해당 디렉토리에 포함 된 파일 (이름 포함)에 대한 메타 데이터를 저장하는 데 필요한 초기 크기입니다. 초기 할당은 한 섹터의 크기와 같지만 필요한 경우 그 이상으로 증가 할 수 있습니다. 일단 할당되면 조각화를 줄이기 위해 파일을 제거하면 공간이 확보되지 않습니다.

예를 들면 다음과 같습니다.

$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/

출처


3
"파일을 제거하면 공간이 확보되지 않습니다"부분에 감사드립니다. 백업을 복원했는데 왜 두 개의 동일한 디렉토리의 크기가 다른지 확실하지 않았습니다.
Tomasz Zieliński

11

때로는 일부 파일 시스템에서 4096 바이트가 가장 작은 할당 단위입니다. 그래서 디렉토리에 4096이 있습니다.

파일에도 동일하게 적용됩니다. 일부 파일은 4096 미만으로보고 될 수 있지만 실제로 디스크에서 최소 4096 개의 스토리지를 사용합니다.


4
파블로가 말했듯이 그래. 파일로보고있는 크기는 디스크 크기의 파일이 아니라 파일 내용 크기입니다. 작은 파일의 디스크 크기는 실제로 디스크 크기를 블록과 같은 크기로만 할당 할 수 있으므로 디렉토리와 마찬가지로 4096입니다.
Dan McGrath

1
이것은 질문과 관련이 없습니다.
harrymc

이것은 올바르지 않습니다. 허용 된 답변을 참조하십시오.
Duncan X Simpson

맞지 않습니까? 두 답변의 조합이 아닙니까? 4096은 페이지 크기입니다. 자세한 내용은 메모리 페이징 시스템을 참조하십시오.
Harrichael

5

4096은 종종 포함 된 메타 데이터의 실제 크기가 디렉토리 내용에 따라 변동하기 때문에 조각화를 줄이기 위해 예약되어 있습니다. 시간이 지남에 따라 지속적으로 증가 및 축소 (예 : 로그 파일 또는 동적 내용 포함)하면 성능이 저하 될 수 있습니다. 이것은 하나의 폴더에서 발생하지는 않지만 전체 파일 시스템에서 빠르게 추가됩니다.


3

파일 시스템에 따라 다릅니다. ext2 / 3 / 4에서 "is"는 4096입니다. reiserfs에서는 9608 (my $HOME) 1032 ( /tmp) 또는 48 (일부 dir in /tmp) 일 수 있습니다.

ext2 / 3 / 4 블록의 기본 값은 4096이며 파일은 이보다 작을 수 없습니다. 파일이 작 으면 어쨌든 전체 블록이 필요합니다. 디렉토리의 논리적 크기에 대해 물어 보는 것은 의미가 없으므로이 정보는 디스크에 없을 수도 있으며, 블록 크기에 사용 된 블록 수, 즉 실제 공간을보고해야합니다.


파일 크기도 파일과 함께 저장되어 있지 않다고 확신합니다. 필요할 때 계산됩니다. 그러나 파일의 경우 actual파일 크기를 보고합니다 .
Lazer

1
파일 크기는 inode와 함께 저장됩니다. 확실히 ext2 inode에는 그 안에 바이트 단위의 크기가 들어 있습니다. 그렇지 않으면 \0이진 파일에서 유효한 문자 로 파일이 끝나는 위치를 찾을 수 없습니다 . 추신. 저장하지 않고 familly를 확장하지 않는 (그리고 아마도 다른 인기가없는) FS를 만들 수 있습니다.
Maciej Piechotka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.