新しいExt4インラインデータ機能の使用方法 (inodeに直接データを保存)


9

Linux 3.8以降、Ext4のドキュメントを正しく読んだら、非常に小さなファイルの花瓶のiノードにデータを直接格納できるはずです。

このようなファイルのサイズは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
おそらく後でファイルシステムを古いカーネルでマウントした場合に問題が発生しないようにするために、ファイルシステムの作成時に有効にする必要のあるファイルシステムオプションです。
wurtel 2015

回答:


7

でインラインデータを有効にするにはext4e2fsprogs1.43以降にする必要があります。インラインデータのサポートは、2014年3月までに追加されましたリポジトリだけ2016年5月にリリースされました。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

ファイルはそこにあり、iノードを使用していますが、使用可能なストレージ領域は変更されていません。


4

あなたの場合は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バイトのiノードは128バイトです。より多くのインライン化が必要な場合は、より大きなiノードを使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.