Bagaimana cara menggunakan fitur Ext4 Inline Data baru? (menyimpan data langsung di inode)

9

Jika saya membaca dokumentasi Ext4 dengan benar, mulai dari Linux 3.8 harus dimungkinkan untuk menyimpan data secara langsung di inode dalam vas file yang sangat kecil.

Saya mengharapkan file seperti itu memiliki ukuran 0 blok, tetapi bukan itu masalahnya.

#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

Saya berharap angka terakhir ini menjadi 0. Apakah saya kehilangan sesuatu?

Manu
sumber
1
Ini mungkin opsi filesystem yang perlu diaktifkan selama pembuatan filesystem, untuk mencegah masalah jika Anda akan me-mount filesystem dengan kernel yang lebih tua di beberapa waktu kemudian.
Wurtel

Jawaban:

7

Untuk mengaktifkan data sebaris ext4, Anda harus e2fsprogs1,43 atau lebih baru. Dukungan untuk data inline ditambahkan Maret 2014 untuk para gitrepositori tetapi hanya dirilis Mei 2016.

Setelah memilikinya, Anda dapat menjalankan mke2fs -O inline_dataperangkat yang sesuai untuk membuat sistem file baru dengan dukungan data sebaris; ini akan menghapus semua data Anda . Tampaknya belum memungkinkan untuk mengaktifkan data sebaris pada sistem file yang ada (setidaknya, tune2fstidak mendukungnya).

Sekarang buat file kecil, dan jalankan debugfsdi sistem file. cdke direktori yang sesuai, dan jalankan stat smallfile; Anda akan mendapatkan sesuatu seperti

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

Seperti yang Anda lihat, data disimpan inline. Ini juga bisa dilihat menggunakan df; sebelum membuat 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

Setelah membuat 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

File ada di sana, menggunakan inode tetapi ruang penyimpanan yang tersedia tidak berubah.

Stephen Kitt
sumber
4

Jika e2fsprogsversi Anda terlalu tua, atau sistem file sudah dibuat, Anda dapat mengatur flag fitur menggunakan debugfs(flag didukung sejak 2012, sedangkan mke2fsdan alat-alat lain menambahkan dukungan pada 2014+ dan banyak distribusi masih tidak mengirimkannya pada 2016 , termasuk Ubuntu Xenial).

Untuk melakukannya, buka partisi dalam mode baca-tulis:

debugfs -w /dev/sdxx

Dan kemudian tambahkan benderanya:

feature inline_data

(atau feature -inline_datauntuk mematikannya, tapi itu mungkin ide yang sangat buruk jika sudah ada file inline!)

Perhatikan, bagaimanapun, jika sistem Anda e2fsprogssudah tua, Anda mengarahkan diri Anda ke sudut, karena utilitas (termasuk debugfsitu sendiri) akan menolak untuk menyentuh sistem file seperti itu setelah mengatur bendera.

Perhatikan juga bahwa saat ini GRUB(2.02) tidak mendukung ini, jadi pengaturannya pada partisi boot akan membuat sistem tidak dapat di-boot. Ada tambalan yang tidak dihapus untuk menambah dukungan.

Pada saat penulisan ini, file dan direktori hingga inode_size-128dapat diuraikan, jadi 128 byte untuk inode 256 byte default. Anda dapat menggunakan inode yang lebih besar jika Anda ingin lebih banyak inlining.

Kipas inlining
sumber