จะใช้คุณสมบัติใหม่ของ Ext4 Inline Data ได้อย่างไร? (การจัดเก็บข้อมูลโดยตรงในไอโหนด)


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เก็บแต่เผยแพร่เฉพาะในเดือนพฤษภาคม 2559

เมื่อคุณมีแล้วคุณสามารถทำงาน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+ และการกระจายจำนวนมากยังไม่ส่งในปี 2559 , รวม. Ubuntu Xenial)

ในการทำเช่นนั้นให้เปิดพาร์ติชันในโหมดอ่าน - เขียน:

debugfs -w /dev/sdxx

จากนั้นเพิ่มธง:

feature inline_data

(หรือfeature -inline_dataเปิดปิด แต่อาจเป็นความคิดที่เลวถ้ามีไฟล์อินไลน์อยู่แล้ว!)

อย่างไรก็ตามโปรดทราบว่าหากระบบของคุณe2fsprogsเก่าคุณกำลังขับรถเข้ามุมเนื่องจากยูทิลิตี้ (รวมถึงdebugfsตัวเอง) จะปฏิเสธที่จะสัมผัสกับระบบไฟล์ดังกล่าวหลังจากตั้งค่าสถานะแล้ว

โปรดทราบว่าปัจจุบันGRUB(2.02) ไม่รองรับสิ่งนี้ดังนั้นการตั้งค่าบนพาร์ติชันสำหรับบูตจะทำให้ระบบไม่สามารถบูตได้ มีโปรแกรมแก้ไขที่ไม่มีการรวมเพื่อเพิ่มการสนับสนุน

เมื่อถึงเวลาของการเขียนไฟล์และไดเรคทอรีสูงถึงinode_size-128สามารถถูก inline ดังนั้น 128 ไบต์สำหรับ 256 ไบต์เริ่มต้น inodes คุณสามารถใช้ไอโหนดที่ใหญ่กว่านี้ได้ถ้าคุณต้องการอินไลน์เพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.