
내 작업 컴퓨터에 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 .
둘 다 아니라는 것은 명백하다reiserfsxfs*도 디스크 조각화에 크게 신경 쓰지 않습니다. 수많은 파일을 삭제하면 디렉터리 크기가 원래 값으로 돌아오기 때문입니다.