Як використовувати нову функцію вбудованих даних Ext4? (зберігання даних безпосередньо в inode)


9

Якщо я прочитав документацію 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 blocks used by files
stat --printf='%b\n' small_file
8

Я б очікував, що цей останній номер тут буде 0. Я щось пропускаю?


1
Це, мабуть, опція файлової системи, яку потрібно ввімкнути під час створення файлової системи, щоб запобігти проблемам, якщо вам вдасться пізніше встановити файлову систему зі старшим ядром.
wurtel

Відповіді:


7

Щоб увімкнути вбудовані дані в ext4, вам знадобиться e2fsprogs1,43 або пізнішої версії. Підтримка вбудованих даних була додана в березні 2014 року в в gitсховище , але була випущена тільки в травні 2016 року.

Після цього ви можете запустити 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, але доступний простір для зберігання не змінився.


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можуть бути впорядковані, тож 128 байт для стандартних 256 байтових входів. Ви можете використовувати більші вставки, якщо хочете більше вкладишів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.