새로운 Ext4 인라인 데이터 기능을 사용하는 방법은 무엇입니까? (아이 노드에 직접 데이터 저장) 0 블록이 될 것으로 예상했지만 실제로는 그렇지

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를 사용할 수 있습니다.