ext4 문서를 올바르게 읽었다면 Linux 3.8부터 파일이 매우 작은 경우 inode에 직접 데이터를 저장할 수 있어야 합니다.
나는 그러한 파일의 크기가 0 블록일 것이라고 예상했지만 그렇지 않습니다.
# creating a small file
printf "abcde" > small_file
# checking size of file in bytes
stat --printf='%s\n' small_file
5
# number of 512-byte blocks used by file
stat --printf='%b\n' small_file
8
여기서 마지막 숫자는 0이 될 것으로 예상했습니다. 내가 뭐 놓친 거 없니?
답변1
ext4에서 인라인 데이터를 활성화하려면 다음을 사용해야 합니다.e2fsprogs
1.43 이상. 2014년 3월에 추가된 인라인 데이터 지원Git 저장소하지만 2016년 5월까지 출시되지 않았습니다.
완료되면 mke2fs -O inline_data
적절한 장치에서 실행하여 인라인 데이터 지원이 포함된 새 파일 시스템을 생성할 수 있습니다.모든 데이터가 삭제됩니다.. 분명히 기존 파일 시스템에서 인라인 데이터를 활성화하는 것은 아직 불가능합니다(적어도 tune2fs
지원되지는 않습니다).
이제 작은 파일을 생성하고 debugfs
파일 시스템에서 실행하십시오. cd
적절한 디렉토리로 이동하여 실행하면 stat smallfile
다음과 같은 결과가 나타납니다.
Inode: 32770 Type: regular Mode: 0644 Flags: 0x10000000
Generation: 2302340561 Version: 0x00000000:00000001
User: 1000 Group: 1000 Size: 6
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x553731e9:330badf8 -- Wed Apr 22 07:30:17 2015
atime: 0x553731e9:330badf8 -- Wed Apr 22 07:30:17 2015
mtime: 0x553731e9:330badf8 -- Wed Apr 22 07:30:17 2015
crtime: 0x553731e9:330badf8 -- Wed Apr 22 07:30:17 2015
Size of extra inode fields: 28
Extended attributes:
system.data (0)
Size of inline data: 60
보시다시피 데이터는 인라인으로 저장됩니다. 이는 df
;을 사용해도 볼 수 있습니다. 파일을 생성하기 전에:
% df -i /mnt/new
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg--large--mirror-inline 65536 12 65524 1% /mnt/new
% df /mnt/new
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg--large--mirror-inline 1032088 1280 978380 1% /mnt/new
파일을 생성한 후:
% echo Hello > smallfile
% ls -l
total 1
-rw-r--r-- 1 steve steve 6 Apr 22 07:35 smallfile
% df -i /mnt/new
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/vg--large--mirror-inline 65536 13 65523 1% /mnt/new
% df /mnt/new
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg--large--mirror-inline 1032088 1280 978380 1% /mnt/new
파일이 있고 inode를 사용하지만 사용 가능한 저장 공간은 변경되지 않았습니다.
답변2
e2fsprogs
버전이 너무 오래되었거나 파일 시스템이 이미 생성된 경우 set 기능 플래그를 사용할 수 있습니다 debugfs
(이 플래그는 2012년부터 지원되지만 mke2fs
다른 도구는 2014+에 지원을 추가했으며 많은 배포판에서는 여전히 2016년에 이를 제공하지 않습니다. Ubuntu Xenial 포함).
이렇게 하려면 읽기-쓰기 모드로 파티션을 엽니다.
debugfs -w /dev/sdxx
그런 다음 플래그를 추가합니다.
feature inline_data
(또는 feature -inline_data
끄고 인라인 파일이 이미 존재하는 경우 이는 아마도 매우 나쁜 생각일 것입니다!)
그러나 시스템이 오래된 경우 유틸리티( 자체 포함)가 플래그를 설정한 후 해당 파일 시스템에 접근하는 것을 거부하므로 e2fsprogs
문제가 발생할 수 있다는 점에 유의하십시오.debugfs
또한 GRUB
이 기능은 현재(2.02) 지원되지 않으므로 부팅 파티션에 설정하면 시스템을 부팅할 수 없게 됩니다. 병합되지 않은 항목이 있습니다.수리하다지원을 추가하세요.
이 글을 쓰는 시점에서 inode_size-128
파일과 디렉터리는 최대 인라인될 수 있으므로 기본 256바이트 inode는 128바이트입니다. 더 많은 인라인을 원하면 더 큰 inode를 사용할 수 있습니다.