ext4 파일 시스템의 작은 디렉토리는 2024 블록을 차지합니까? [폐쇄]

ext4 파일 시스템의 작은 디렉토리는 2024 블록을 차지합니까? [폐쇄]

내 작업 컴퓨터에 ext4 파일 시스템이 있는데 1MB 이상의 공간을 차지하는 디렉토리를 발견했습니다. 이 디렉토리에는 7개의 항목이 있습니다. 디렉토리에는 20개 이상의 항목이 포함되지 않습니다.

여기서 무슨 일이 일어나고 있는 걸까요? 디렉토리에는 아직 어떤 문제도 발생하지 않았습니다. 걱정해야 할까요?

제가 아는 한, 볼륨에 ACL이나 범위를 설정하지 않았습니다. 제가 만들 때 기본 블록 크기인 4096을 사용했습니다.

=[3 dc@work ~/documents/work/foo ]= $ ls -lat -r
[...]
drwxr-xr-x  2 dchurch users    4096 Dec 23 11:53 _old/
drwxr-xr-x  5 dchurch users    4096 Dec 30 17:43 ./
drwxr-xr-x  3 dchurch users 1032192 Jan  2 08:51 account_import/
drwxr-xr-x 14 dchurch users    4096 Jan  2 08:54 ../
=[3 dc@work ~/documents/work/foo ]= $ ls -la account_import/
total 5500
drwxr-xr-x 3 dchurch users 1032192 Jan  2 08:51 ./
drwxr-xr-x 5 dchurch users    4096 Dec 30 17:43 ../
drwxr-xr-x 2 dchurch users    4096 Jan  2 08:54 _first/
-rw-r--r-- 1 dchurch users  804852 Dec 17 15:37 ca.csv
-rw-r--r-- 1 dchurch users    3495 Dec 17 16:14 slurp.php
-rw-r--r-- 1 dchurch users    3707 Dec 17 16:13 slurp.php~
-rw-r--r-- 1 dchurch users 3769577 Dec 17 15:37 us.csv
=[3 dc@work ~/documents/work/foo ]= $ stat account_import
  File: 'account_import'
  Size: 1032192         Blocks: 2024       IO Block: 4096   directory
Device: 804h/2052d      Inode: 4458105     Links: 3
Access: (0755/drwxr-xr-x)  Uid: ( 1000/ dc)   Gid: (  100/   users)
Access: 2015-01-05 04:40:11.629350078 -0600
Modify: 2015-01-02 08:51:06.024793685 -0600
Change: 2015-01-02 08:51:06.024793685 -0600
 Birth: -

답변1

4096B는 디렉토리의 초기 크기로 한 섹터와 같습니다. 그러나 저장할 데이터의 양(메타데이터, 파일 이름 포함)이 증가하고 디렉터리 크기도 증가하지만 디스크 조각화 문제를 줄이기 위해 다시 감소하지는 않습니다.

 $ mkdir testdir
 $ cd testdir
 $ ls -lhd .
   drwxrwxr-x 2 me me 4.0K Jan  5 18:06 .
 $ for ((i=0; i<1000; i++)); do touch this_is_a_long_file_name_$i; done 
 $ ls -lhd .
   drwxrwxr-x 2 me me 64K Jan  5 18:08 .
 $ rm this*
 $ ls -lhd .
   drwxrwxr-x 2 me me 64K Jan  5 18:09 .

편집: 이것은 reiserfs를 사용한 동일한 실험입니다.

 $ mkdir testdir
 $ cd testdir
 $ ls -lhd .
   drwxr-xr-x 2 me me 48 gen  5 18:54 .
 $  for ((i=0; i<1000; i++)); do touch this_is_a_really_long_file_name_$i; done
 $ !ls
   ls -lhd .
   drwxr-xr-x 2 me me 55K gen  5 18:55 .
 $ rm this*
 $ !ls
   ls -lhd .
   drwxr-xr-x 2 me me 48 gen  5 18:55 .

이것은 xfs용입니다:

 $ mkdir testdir
 $ cd testdir
 $ ls -lhd .
   drwxr-xr-x 2 me me 6 gen  5 19:00 .
 $ for ((i=0; i<1000; i++)); do touch this_is_a_really_long_file_name_$i; done
 $ ls -lhd .
   drwxr-xr-x 2 me me 48K gen  5 19:01 .
 $ rm this*
 $ !ls
   ls -lhd .
   drwxr-xr-x 2 me me 6 gen  5 19:01 .

분명히 둘 다 아니야레이셀프스xfs*는 또한 많은 수의 파일을 삭제한 후 디렉터리 크기가 원래 값으로 돌아가기 때문에 디스크 조각화에 신경 쓰지 않습니다.

관련 정보