새로운 ext4 인라인 데이터 기능을 사용하는 방법은 무엇입니까? (inode에 직접 데이터 저장)

새로운 ext4 인라인 데이터 기능을 사용하는 방법은 무엇입니까? (inode에 직접 데이터 저장)

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에서 인라인 데이터를 활성화하려면 다음을 사용해야 합니다.e2fsprogs1.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를 사용할 수 있습니다.

관련 정보