Um Inline-Daten in ext4 zu aktivieren, müssen Sie e2fsprogs
verwenden 1.43 oder höher. Unterstützung für Inline-Daten wurde im März 2014 zum Git-Repository hinzugefügt, aber erst im Mai 2016 veröffentlicht.
Sobald Sie das haben, können Sie mke2fs -O inline_data
ausführen auf einem geeigneten Gerät, um ein neues Dateisystem mit Inline-Datenunterstützung zu erstellen; dadurch werden alle Ihre Daten gelöscht . Es ist anscheinend noch nicht möglich, Inline-Daten auf einem bestehenden Dateisystem zu aktivieren (mindestens tune2fs
unterstützt es nicht).
Erstellen Sie nun eine kleine Datei und führen Sie debugfs
aus auf dem Dateisystem. cd
in das entsprechende Verzeichnis und führen Sie stat smallfile
aus; Sie erhalten so etwas wie
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
Wie Sie sehen können, wurden die Daten inline gespeichert. Dies kann auch mit df
gesehen werden; vor dem Erstellen der Datei:
% 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
Nach dem Erstellen der Datei:
% 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
Die Datei ist da, sie verwendet einen Inode, aber der verfügbare Speicherplatz hat sich nicht geändert.
Wenn Ihr e2fsprogs
Version zu alt ist oder das Dateisystem bereits erstellt ist, können Sie das Feature-Flag mit debugfs
setzen (das Flag wird seit 2012 unterstützt, wobei mke2fs
und die anderen Tools haben ab 2014+ Unterstützung hinzugefügt und viele Distributionen liefern sie 2016 immer noch nicht aus, inkl. Ubuntu Xenial).
Öffnen Sie dazu die Partition im Lese-/Schreibmodus:
debugfs -w /dev/sdxx
Und fügen Sie dann das Flag hinzu:
feature inline_data
(oder feature -inline_data
um es auszuschalten, aber das ist wahrscheinlich eine wirklich schlechte Idee, wenn es bereits Inline-Dateien gibt!)
Beachten Sie jedoch, wenn Ihr System e2fsprogs
alt sind, fährt man sich in die Ecke, da die Utilities (u.a. debugfs
selbst) weigert sich, ein solches Dateisystem zu berühren, nachdem das Flag gesetzt wurde.
Beachten Sie auch den aktuellen GRUB
(2.02) unterstützt dies nicht, daher wird das System nicht mehr bootfähig gemacht, wenn Sie es auf der Boot-Partition setzen. Es gibt einen nicht zusammengeführten Patch, um Unterstützung hinzuzufügen.
Zum Zeitpunkt des Schreibens dieses Artikels wurden Dateien und Verzeichnisse von bis zu inode_size-128
kann inline sein, also 128 Bytes für die standardmäßigen 256-Byte-Inodes. Sie können größere Inodes verwenden, wenn Sie mehr Inlining wünschen.