Linux 3.8부터 Ext4 문서를 올바르게 읽으면 아주 작은 파일의 꽃병에 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 blocks used by files
stat --printf='%b\n' small_file
8
이 마지막 숫자는 0이 될 것으로 예상합니다. 뭔가 빠졌습니까?
답변
에서 인라인 데이터를 사용하려면 1.43 이상 ext4
이 필요합니다 e2fsprogs
. 인라인 데이터에 대한 지원을 2014 년 3 월 추가 된 저장소 만 5 월 2016 년 릴리스되었습니다.git
그런 다음 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를 사용하지만 사용 가능한 저장 공간은 변경되지 않았습니다.
답변
귀하의 경우 e2fsprogs
버전이 너무 오래, 또는 파일 시스템이 이미 생성되어, 당신은 사용하는 기능 플래그를 설정할 수 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를 사용할 수 있습니다.