왜 유닉스에서 디렉토리의 크기가 항상 4096 바이트입니까? 바이트라는 것을 알고 있습니다. 그러나 그보다 작은

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

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



답변

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

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

$ 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/

출처


답변

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

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


답변

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


답변

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

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


답변