Jak korzystać z nowej funkcji danych wbudowanych Ext4? (przechowywanie danych bezpośrednio w i-węźle)

9

Jeśli poprawnie czytam dokumentację Ext4, począwszy od Linuksa 3.8 powinno być możliwe przechowywanie danych bezpośrednio w i-węzle w wazonie bardzo małego pliku.

Spodziewałem się, że taki plik będzie miał rozmiar 0 bloków, ale tak nie jest.

#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

Spodziewałbym się, że ten ostatni numer będzie wynosił 0. Czy coś mi brakuje?

Manu
źródło
1
Prawdopodobnie jest to opcja systemu plików, którą należy włączyć podczas tworzenia systemu plików, aby zapobiec problemom, gdybyś później zamontował system plików ze starszym jądrem.
wurtel

Odpowiedzi:

7

Aby włączyć wbudowane dane ext4, musisz mieć e2fsprogswersję 1.43 lub nowszą. Wsparcie dla danych inline dodano w marcu 2014 w gitrepozytorium , ale został zwolniony dopiero w maju 2016 r.

Gdy już to zrobisz, możesz uruchomić mke2fs -O inline_datana odpowiednim urządzeniu, aby utworzyć nowy system plików z wbudowaną obsługą danych; spowoduje to usunięcie wszystkich danych . Najwyraźniej nie jest jeszcze możliwa aktywacja danych wbudowanych w istniejącym systemie plików (przynajmniej tune2fsgo nie obsługuje).

Teraz utwórz mały plik i uruchom debugfsgo w systemie plików. cddo odpowiedniego katalogu i uruchom stat smallfile; dostaniesz coś takiego

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

Jak widać, dane zostały zapisane w linii. Można to również zobaczyć za pomocą df; przed utworzeniem pliku:

% 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

Po utworzeniu pliku:

% 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

Plik jest tam, używa i-węzła, ale dostępne miejsce do przechowywania się nie zmieniło.

Stephen Kitt
źródło
4

Jeśli Twoja e2fsprogswersja jest za stara lub system plików jest już utworzony, możesz ustawić flagę funkcji za pomocą debugfs(flaga jest obsługiwana od 2012 r., mke2fsA inne narzędzia dodały obsługę w wersji 2014+ i wielu dystrybucjach nadal nie dostarczają ich w 2016 r. , w tym Ubuntu Xenial).

W tym celu otwórz partycję w trybie do odczytu i zapisu:

debugfs -w /dev/sdxx

A następnie dodaj flagę:

feature inline_data

(lub feature -inline_datago wyłączyć, ale to prawdopodobnie bardzo zły pomysł, jeśli istnieją już pliki wbudowane!)

Pamiętaj jednak, że jeśli twój system e2fsprogsjest stary, wjeżdżasz w zakręt, ponieważ narzędzia (w tym także debugfssam) odmówią dotknięcia takiego systemu plików po ustawieniu flagi.

Zauważ również, że bieżący GRUB(2.02) tego nie obsługuje, więc ustawienie go na partycji rozruchowej spowoduje, że system nie będzie można uruchomić. Dostępna jest łatka nie połączona .

W chwili pisania tego tekstu inode_size-128można wstawiać pliki i katalogi o wielkości do , więc 128 bajtów dla domyślnych i-bajtów o wielkości 256 bajtów. Możesz użyć większych i-węzłów, jeśli chcesz więcej wstawiania.

Wciągający wentylator
źródło