Làm cách nào để sử dụng tính năng Ext4 Inline Data mới? (lưu trữ dữ liệu trực tiếp trong inode)


9

Nếu tôi đọc tài liệu Ext4 một cách chính xác, bắt đầu từ Linux 3.8, có thể lưu trữ dữ liệu trực tiếp trong nút trong bình của một tệp rất nhỏ.

Tôi đã mong đợi một tập tin như vậy có kích thước 0 khối, nhưng nó không phải là trường hợp.

#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

Tôi hy vọng con số cuối cùng ở đây là 0. Tôi có đang thiếu thứ gì không?


1
Đây có thể là một tùy chọn hệ thống tập tin cần được kích hoạt trong quá trình tạo hệ thống tập tin, để ngăn chặn sự cố nếu bạn có thể gắn hệ thống tập tin với một nhân cũ hơn vào một thời gian sau.
wurtel

Câu trả lời:


7

Để bật dữ liệu nội tuyến ext4, bạn sẽ cần e2fsprogs1.43 trở lên. Hỗ trợ cho dữ liệu nội tuyến đã được bổ sung tháng 3 năm 2014 để các gitkho lưu trữ nhưng chỉ được phát hành tháng 5 năm 2016.

Khi bạn đã có điều đó, bạn có thể chạy mke2fs -O inline_datatrên một thiết bị phù hợp để tạo một hệ thống tệp mới với sự hỗ trợ dữ liệu nội tuyến; điều này sẽ xóa tất cả dữ liệu của bạn . Rõ ràng là chưa thể kích hoạt dữ liệu nội tuyến trên một hệ thống tệp hiện có (ít nhất, tune2fskhông hỗ trợ nó).

Bây giờ tạo một tệp nhỏ và chạy debugfstrên hệ thống tệp. cdvào thư mục thích hợp và chạy stat smallfile; bạn sẽ nhận được một cái gì đó như

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

Như bạn có thể thấy dữ liệu được lưu trữ nội tuyến. Điều này cũng có thể được nhìn thấy bằng cách sử dụng df; trước khi tạo tập tin:

% 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

Sau khi tạo tệp:

% 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

Các tập tin ở đó, nó sử dụng một nút nhưng không gian lưu trữ có sẵn đã không thay đổi.


4

Nếu e2fsprogsphiên bản của bạn quá cũ hoặc hệ thống tập tin đã được tạo, bạn có thể đặt cờ tính năng bằng cách sử dụng debugfs(cờ được hỗ trợ từ năm 2012, trong khi đó mke2fsvà các công cụ khác đã thêm hỗ trợ vào năm 2014+ và nhiều bản phân phối vẫn không gửi chúng vào năm 2016 , bao gồm Ubuntu Xenial).

Để làm như vậy, hãy mở phân vùng ở chế độ đọc-ghi:

debugfs -w /dev/sdxx

Và sau đó thêm cờ:

feature inline_data

(hoặc feature -inline_datatắt nó đi, nhưng đó có lẽ là một ý tưởng thực sự tồi tệ nếu đã có các tệp nội tuyến!)

Tuy nhiên, xin lưu ý, nếu hệ thống của bạn đã e2fsprogscũ, bạn sẽ tự lái xe vào một góc, vì các tiện ích (bao gồm cả debugfschính nó) sẽ từ chối chạm vào hệ thống tệp như vậy sau khi đặt cờ.

Cũng lưu ý rằng hiện tại GRUB(2.02) không hỗ trợ điều này, vì vậy việc đặt nó trên phân vùng khởi động sẽ khiến hệ thống không thể khởi động. Có một bản vá không trộn để thêm hỗ trợ.

Tại thời điểm viết bài này, các tệp và thư mục inode_size-128có thể được nội tuyến, do đó, 128 byte cho các nút 256 byte mặc định. Bạn có thể sử dụng các nút lớn hơn nếu bạn muốn nội tuyến nhiều hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.