How to use the new Ext4 Inline Data feature ? (storing data directly in the inode)
Clash Royale CLAN TAG#URR8PPP
up vote
6
down vote
favorite
If I read the Ext4 documentation correctly, starting from Linux 3.8 it should be possible to store data directly in the inode in the vase of a very small file.
I was expecting such a file to have a size of 0 blocks, but it is not the case.
#creating a small file
printf "abcde" > small_file
#checking size of file in bytes
stat --printf='%sn' small_file
5
#number of blocks used by files
stat --printf='%bn' small_file
8
I would expect this last number here to be 0. Am I am missing something ?
linux ext4
add a comment |Â
up vote
6
down vote
favorite
If I read the Ext4 documentation correctly, starting from Linux 3.8 it should be possible to store data directly in the inode in the vase of a very small file.
I was expecting such a file to have a size of 0 blocks, but it is not the case.
#creating a small file
printf "abcde" > small_file
#checking size of file in bytes
stat --printf='%sn' small_file
5
#number of blocks used by files
stat --printf='%bn' small_file
8
I would expect this last number here to be 0. Am I am missing something ?
linux ext4
1
It is probably a filesystem option that needs to be enabled during creation of the filesystem, to prevent problems if you would happen to mount the filesystem with an older kernel at some later time.
â wurtel
Apr 21 '15 at 14:53
add a comment |Â
up vote
6
down vote
favorite
up vote
6
down vote
favorite
If I read the Ext4 documentation correctly, starting from Linux 3.8 it should be possible to store data directly in the inode in the vase of a very small file.
I was expecting such a file to have a size of 0 blocks, but it is not the case.
#creating a small file
printf "abcde" > small_file
#checking size of file in bytes
stat --printf='%sn' small_file
5
#number of blocks used by files
stat --printf='%bn' small_file
8
I would expect this last number here to be 0. Am I am missing something ?
linux ext4
If I read the Ext4 documentation correctly, starting from Linux 3.8 it should be possible to store data directly in the inode in the vase of a very small file.
I was expecting such a file to have a size of 0 blocks, but it is not the case.
#creating a small file
printf "abcde" > small_file
#checking size of file in bytes
stat --printf='%sn' small_file
5
#number of blocks used by files
stat --printf='%bn' small_file
8
I would expect this last number here to be 0. Am I am missing something ?
linux ext4
linux ext4
edited Apr 22 '15 at 16:00
Stephen Kitt
151k23337405
151k23337405
asked Apr 21 '15 at 14:02
Manu
324110
324110
1
It is probably a filesystem option that needs to be enabled during creation of the filesystem, to prevent problems if you would happen to mount the filesystem with an older kernel at some later time.
â wurtel
Apr 21 '15 at 14:53
add a comment |Â
1
It is probably a filesystem option that needs to be enabled during creation of the filesystem, to prevent problems if you would happen to mount the filesystem with an older kernel at some later time.
â wurtel
Apr 21 '15 at 14:53
1
1
It is probably a filesystem option that needs to be enabled during creation of the filesystem, to prevent problems if you would happen to mount the filesystem with an older kernel at some later time.
â wurtel
Apr 21 '15 at 14:53
It is probably a filesystem option that needs to be enabled during creation of the filesystem, to prevent problems if you would happen to mount the filesystem with an older kernel at some later time.
â wurtel
Apr 21 '15 at 14:53
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
3
down vote
accepted
To enable inline data in ext4
, you'll need to e2fsprogs
1.43 or later. Support for inline data was added in March 2014 to the git
repository but was only released in May 2016.
Once you have that, you can run mke2fs -O inline_data
on an appropriate device to create a new filesystem with inline data support; this will erase all your data. It's apparently not yet possible to activate inline data on an existing filesystem (at least, tune2fs
doesn't support it).
Now create a small file, and run debugfs
on the filesystem. cd
to the appropriate directory, and run stat smallfile
; you'll get something like
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
As you can see the data was stored inline. This can also be seen using df
; before creating the file:
% 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
After creating the file:
% 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
The file is there, it uses an inode but the storage space available hasn't changed.
add a comment |Â
up vote
1
down vote
If your e2fsprogs
version is too old, or the filesystem is already created, you can set the feature flag using debugfs
(the flag is supported since 2012, whereas mke2fs
and the other tools added support on 2014+ and many distributions still don't ship them in 2016, incl. Ubuntu Xenial).
To do so, open the partition in read-write mode:
debugfs -w /dev/sdxx
And then add the flag:
feature inline_data
(or feature -inline_data
to toggle it off, but that's probably a really bad idea if there are inline files already!)
Do note, however, if your system e2fsprogs
are old, you're driving yourself into a corner, since the utilities (including debugfs
itself) will refuse to touch such a filesystem after setting the flag.
Also note that current GRUB
(2.02) doesn't support this, so setting it on the boot partition will render the system unbootable. There is an unmerged patch to add support.
As of the time of this writing, files and directories of up to inode_size-128
can be inlined, so 128 bytes for the default 256 byte inodes. You can use larger inodes if you want more inlining.
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
To enable inline data in ext4
, you'll need to e2fsprogs
1.43 or later. Support for inline data was added in March 2014 to the git
repository but was only released in May 2016.
Once you have that, you can run mke2fs -O inline_data
on an appropriate device to create a new filesystem with inline data support; this will erase all your data. It's apparently not yet possible to activate inline data on an existing filesystem (at least, tune2fs
doesn't support it).
Now create a small file, and run debugfs
on the filesystem. cd
to the appropriate directory, and run stat smallfile
; you'll get something like
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
As you can see the data was stored inline. This can also be seen using df
; before creating the file:
% 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
After creating the file:
% 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
The file is there, it uses an inode but the storage space available hasn't changed.
add a comment |Â
up vote
3
down vote
accepted
To enable inline data in ext4
, you'll need to e2fsprogs
1.43 or later. Support for inline data was added in March 2014 to the git
repository but was only released in May 2016.
Once you have that, you can run mke2fs -O inline_data
on an appropriate device to create a new filesystem with inline data support; this will erase all your data. It's apparently not yet possible to activate inline data on an existing filesystem (at least, tune2fs
doesn't support it).
Now create a small file, and run debugfs
on the filesystem. cd
to the appropriate directory, and run stat smallfile
; you'll get something like
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
As you can see the data was stored inline. This can also be seen using df
; before creating the file:
% 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
After creating the file:
% 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
The file is there, it uses an inode but the storage space available hasn't changed.
add a comment |Â
up vote
3
down vote
accepted
up vote
3
down vote
accepted
To enable inline data in ext4
, you'll need to e2fsprogs
1.43 or later. Support for inline data was added in March 2014 to the git
repository but was only released in May 2016.
Once you have that, you can run mke2fs -O inline_data
on an appropriate device to create a new filesystem with inline data support; this will erase all your data. It's apparently not yet possible to activate inline data on an existing filesystem (at least, tune2fs
doesn't support it).
Now create a small file, and run debugfs
on the filesystem. cd
to the appropriate directory, and run stat smallfile
; you'll get something like
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
As you can see the data was stored inline. This can also be seen using df
; before creating the file:
% 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
After creating the file:
% 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
The file is there, it uses an inode but the storage space available hasn't changed.
To enable inline data in ext4
, you'll need to e2fsprogs
1.43 or later. Support for inline data was added in March 2014 to the git
repository but was only released in May 2016.
Once you have that, you can run mke2fs -O inline_data
on an appropriate device to create a new filesystem with inline data support; this will erase all your data. It's apparently not yet possible to activate inline data on an existing filesystem (at least, tune2fs
doesn't support it).
Now create a small file, and run debugfs
on the filesystem. cd
to the appropriate directory, and run stat smallfile
; you'll get something like
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
As you can see the data was stored inline. This can also be seen using df
; before creating the file:
% 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
After creating the file:
% 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
The file is there, it uses an inode but the storage space available hasn't changed.
edited 25 mins ago
answered Apr 22 '15 at 5:37
Stephen Kitt
151k23337405
151k23337405
add a comment |Â
add a comment |Â
up vote
1
down vote
If your e2fsprogs
version is too old, or the filesystem is already created, you can set the feature flag using debugfs
(the flag is supported since 2012, whereas mke2fs
and the other tools added support on 2014+ and many distributions still don't ship them in 2016, incl. Ubuntu Xenial).
To do so, open the partition in read-write mode:
debugfs -w /dev/sdxx
And then add the flag:
feature inline_data
(or feature -inline_data
to toggle it off, but that's probably a really bad idea if there are inline files already!)
Do note, however, if your system e2fsprogs
are old, you're driving yourself into a corner, since the utilities (including debugfs
itself) will refuse to touch such a filesystem after setting the flag.
Also note that current GRUB
(2.02) doesn't support this, so setting it on the boot partition will render the system unbootable. There is an unmerged patch to add support.
As of the time of this writing, files and directories of up to inode_size-128
can be inlined, so 128 bytes for the default 256 byte inodes. You can use larger inodes if you want more inlining.
add a comment |Â
up vote
1
down vote
If your e2fsprogs
version is too old, or the filesystem is already created, you can set the feature flag using debugfs
(the flag is supported since 2012, whereas mke2fs
and the other tools added support on 2014+ and many distributions still don't ship them in 2016, incl. Ubuntu Xenial).
To do so, open the partition in read-write mode:
debugfs -w /dev/sdxx
And then add the flag:
feature inline_data
(or feature -inline_data
to toggle it off, but that's probably a really bad idea if there are inline files already!)
Do note, however, if your system e2fsprogs
are old, you're driving yourself into a corner, since the utilities (including debugfs
itself) will refuse to touch such a filesystem after setting the flag.
Also note that current GRUB
(2.02) doesn't support this, so setting it on the boot partition will render the system unbootable. There is an unmerged patch to add support.
As of the time of this writing, files and directories of up to inode_size-128
can be inlined, so 128 bytes for the default 256 byte inodes. You can use larger inodes if you want more inlining.
add a comment |Â
up vote
1
down vote
up vote
1
down vote
If your e2fsprogs
version is too old, or the filesystem is already created, you can set the feature flag using debugfs
(the flag is supported since 2012, whereas mke2fs
and the other tools added support on 2014+ and many distributions still don't ship them in 2016, incl. Ubuntu Xenial).
To do so, open the partition in read-write mode:
debugfs -w /dev/sdxx
And then add the flag:
feature inline_data
(or feature -inline_data
to toggle it off, but that's probably a really bad idea if there are inline files already!)
Do note, however, if your system e2fsprogs
are old, you're driving yourself into a corner, since the utilities (including debugfs
itself) will refuse to touch such a filesystem after setting the flag.
Also note that current GRUB
(2.02) doesn't support this, so setting it on the boot partition will render the system unbootable. There is an unmerged patch to add support.
As of the time of this writing, files and directories of up to inode_size-128
can be inlined, so 128 bytes for the default 256 byte inodes. You can use larger inodes if you want more inlining.
If your e2fsprogs
version is too old, or the filesystem is already created, you can set the feature flag using debugfs
(the flag is supported since 2012, whereas mke2fs
and the other tools added support on 2014+ and many distributions still don't ship them in 2016, incl. Ubuntu Xenial).
To do so, open the partition in read-write mode:
debugfs -w /dev/sdxx
And then add the flag:
feature inline_data
(or feature -inline_data
to toggle it off, but that's probably a really bad idea if there are inline files already!)
Do note, however, if your system e2fsprogs
are old, you're driving yourself into a corner, since the utilities (including debugfs
itself) will refuse to touch such a filesystem after setting the flag.
Also note that current GRUB
(2.02) doesn't support this, so setting it on the boot partition will render the system unbootable. There is an unmerged patch to add support.
As of the time of this writing, files and directories of up to inode_size-128
can be inlined, so 128 bytes for the default 256 byte inodes. You can use larger inodes if you want more inlining.
answered Sep 11 '16 at 20:57
Inlining fan
111
111
add a comment |Â
add a comment |Â
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f197633%2fhow-to-use-the-new-ext4-inline-data-feature-storing-data-directly-in-the-inod%23new-answer', 'question_page');
);
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
1
It is probably a filesystem option that needs to be enabled during creation of the filesystem, to prevent problems if you would happen to mount the filesystem with an older kernel at some later time.
â wurtel
Apr 21 '15 at 14:53