新しい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

ここで最後の数字はゼロになると予想しました。私は何を逃したことがありませんか?

答え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を使用できます。

関連情報