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でインラインデータを有効にするには、次のものを使用する必要があります。e2fsprogs
1.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を使用できます。