1. Introduction
Ext4 วิวัฒนาการมาจากระบบไฟล์ของลีนุกซ์ที่ได้รับความนิยมมากที่สุดก็คือ Ext3
Ext3 นั้นมีจุดเด่นก็คือระบบไฟล์แบบ Journaling ที่เพิ่มเข้าไปใน Ext2
แต่ Ext4 ได้ปรับปรุงแก้ไขส่วนสำคัญในเรื่องของโครงสร้างของระบบไฟล์ อย่างเช่น
ได้มีการกำหนดพื้นที่ที่เก็บข้อมูลไฟล์ไว้ล่วงหน้า ทำให้ระบบไฟล์มีการจัดสรรพื้นที่เก็บข้อมูลที่ดีขึ้น
ประสิทธิภาพมากขึ้นรวมทั้งความน่าเชื่อถือและคุณสมบัติที่ดีขึ้นอีกด้วย
Note :
1. Ext4 ถูกนำมาใช้ใน kernel 2.6.28
2. Journaling หมายถึง เมื่อข้อมูลในระบบเสียหาย ไม่ต้องมีการใช้คำสั่ง fsck
เพื่อตรวจสอบและซ่อมแซมแฟ้มข้อมูลนั้น เพราะว่าการทำงานของ journaling
นั้นจะมีการกู้แฟ้มข้อมูลที่เสียหายขึ้นมาให้โดยอัติโนมัติ
2. EXT4 features
2.1 Large file system/file sizes
Ext3 รองรับพื้นที่ได้มากสุด 16 TB และขนาดของไฟล์ใหญ่ที่สุด 2 TB
แต่ Ext4 ได้มีการเพิ่ม block address เป็นขนาด 48-bit
ทำให้สามารถรองรับพื้นที่ได้ถึง 1 EB (= 1,048,576 TB)และขนาดของไฟล์ใหญ่ที่สุด 16 TB
1 EB = 1024 PB
1 PB = 1024 TB
1 TB = 1024 GB
แล้วเขายังตั้งคำถามต่ออีกว่า ทำไมไม่เป็น 64bit หละ?
เขาบอกว่ามันมีข้อจำกัดอยู่ซึ่งถ้าเป็นขนาด 64 bit แล้วจะมี address บางส่วนหายไป
ซึ่งผมลองคำนวณดูว่า
Ext4 ขนาด 64bit นี้จะพื้นที่มากถึง 74,000EB เลยที่เดียว
Note :
ขนาดของบล็อค(block size) ใน Ext4 เท่ากับ 4KB
2.2 Sub Directoryใน
Ext3 มีไดเรกทอรีย่อย 32,000 ไดเรกทอรีย่อย
แต่ใน
Ext4 สามารถมีไดเรกทอรีย่อยได้ถึง 64,000 ไดเรกทอรีย่อย
Note :
ตรงนี้บางแหล่งอ้างอิงบอกว่ามีได้ถึง 640,000 หรือบางแหล่งบอกว่ามีได้ไม่จำกัด
2.3 Extents (การเขียนไฟล์แบบใหม่ใน
Ext4)
Extents เป็นการเขียนไฟล์แบบใหม่ที่เพิ่มเข้ามาใน
Ext4 แทนที่
block mapping ใน
Ext3ซึ่ง
Extents จะมีการจองพื้นที่ที่อยู่ติดกัน ก่อนที่จะเขียนไฟล์
ทำให้ไฟล์ที่มีขนาดใหญ่มีประสิทธิภาพมากขึ้นและช่วยลดการกระจายของข้อมูล
2.4 Multiblock allocationใน
Ext3 เวลาที่มีการเขียนไฟล์ก็จะมีการจัดสรรพื้นที่ทีละบล็อค (only allocates one block)
ในแต่ละครั้งที่เขียนลงไฟล์ ก็คือว่าถ้ามีการเขียนไฟล์ขนาด 100MB
ก็จะมีการจัดสรรบล็อคในการเขียนไฟล์ 25,600 ครั้ง (block size = 4KB)
แต่ใน
Ext4 ใช้ "multiblock allocator" (mballoc) ซึ่งจะมีการจัดสรรบล็อกได้ทีละหลายๆบล็อค
ในการเรียกเขียนไฟล์ใน1ครั้ง
2.5 delayed allocationในระบบไฟล์แบบเก่าจะมีการการจัดสรรพื้นที่ของบล็อคโดยทันทีเพื่อให้ข้อมูลถูกเขียนลงดิสก์
แต่ในบางครั้งข้อมูลอาจจะถูกเก็บไว้ที่
แคช (
cache)
ไม่ได้ถูกเขียนลงดิสก์จริงๆ มันก็จะเสียเวลาไปกับการ จัดสรรพื้นที่ของบล็อคไป
ใน
Ext4 ใช้เทคนิคที่เรียกว่า
allocate-on-flush หรือที่รู้จักกันในชื่อ delayed allocation
ซึ่งวิธีของ delayed allocation นี้ ถ้าเกิดมีการเขียนไฟล์ขึ้นมามันจะยังไม่จัดสรรพื้นที่ของบล็อคที่จะเขียนโดยทันที
จนกว่าข้อมูลนั้นจะถูกเขียนลงดิสก์จริงๆ จึงจะมีการจัดสรรพื้นที่ของบล็อค
2.6 Faster file system checking (Fast
fsck)
เพิ่มความเร็วในการตรวจสอบและซ่อมแซมแฟ้มข้อมูลของระบบไฟล์
เหมือนกับ
Scandisk บน window
2.7 Compatibilityในระบบไฟล์
Ext3 สามารถเปลี่ยนไปเป็น
Ext4 ด้วยวิธีง่ายๆเพียงแค่ 2 คำสั่ง
คือ tune2fs และ
fsck (จะกล่าวถึงในหัวข้อที่ 3.2) นั่นก็หมายความว่าเราสามารถเพิ่มประสิทธิภาพ
เรื่องข้อจำกัดของพื้นที่ในการเก็บข้อมูล และคุณสมบัติที่เพิ่มขึ้นในระบบไฟล์ของเรา
โดยไม่ต้อง reformatting และ/หรือ reinstalling โปรแกรมและระบบปฏิบัติการ
และเขายังบอกอีกว่า เราสามารถอัพเกรดระบบไฟล์โดยที่ไม่ต้องเสี่ยงกับข้อมูลที่สูญหาย
(แต่เขาวงเล็บไว้ว่า "เพื่อความแน่ใจก็ควรจะ
backup ข้อมูลสำคัญๆไว้แม้ว่าจะไม่ได้อัพเกรดระบบไฟล์ก็ตาม")
ตรงนี้สำคัญ : เมื่อเราเปลี่ยนระบบไฟล์จาก
Ext3 ไปเป็น
Ext4 ด้วยวิธีข้างต้นนี้ ครั้งหนึ่งแล้ว
เราจะไม่สามารถเปลี่ยนระบบไฟล์กลับไปเป็น
Ext3 ได้เนื่องจาก
Ext4 มีโครงสร้างของระบบไฟล์แบบใหม่
ถ้าเราเปลี่ยนกลับไปเป็น
Ext3 ระบบจะแจ้งเตือนว่า "wrong fs type"
(แต่เราสามารถเปลี่ยนระบบไฟล์กลับมาเป็น
Ext3 ได้อีกครั้งหนึ่งด้วยวิธี
mount จะกล่าวถึงในหัวข้อที่ 3.3)
2.8 Improved timestampsแก้ปัญหา
Year 2038 problem ด้วยการเพิ่มไปอีก 2 bit ที่ timestamp field
ทำให้ขยายเวลาไปอีกกว่า 500 ปี
(ภาพแสดงปัญหาปี 2038) 2.9 Persistent preallocationคุณสมบัตินี้ผมขออธิบายง่ายๆด้วยการไปเปรียบเทียบกับบน window นะครับ
ก็คือให้นึกถึงเวลาที่เราโหลดบิต (
P2P applications) แม้ว่าเราจะโหลดไฟล์ยังไม่เสร็จก็ตาม
สมมติว่าโหลดไป 20% แต่การจองพื้นที่สำหรับการเขียนไฟล์ก็จองไป 100%
ซึ่งตรงนี้เป็นการจองพื้นที่แบบถาวรแม้ว่าเราจะปิดเครื่องไปแล้วมาโหลดต่ออีกวันหนึ่งก็ตาม
ใน
linux ก็เหมือนกันตรงนี้จะมาช่วยลดการกระจายของข้อมูล
2.10 Online defragmentation (คุณสมบัตินี้กำลังอยู่ในช่วงพัฒนาและจะมาเพิ่มในอนาคต)ถึงจะมี delayed allocation,
extents และ multiblock allocation มาช่วยในการลดกระจายของข้อมูล
แต่บางทีก็ยังเกิดการกระจายของข้อมูลได้อยู่ ตรงนี้เขาเปรียบเทียบให้ดูว่า
ถ้าเราเขียนไฟล์ขึ้นมา 3 ไฟล์ลงบนดิสก์ แล้ววันหนึ่งต่อมาเรามาแก้ไขไฟล์ที่อยู่ตรงกลาง
แต่การแก้ไขนี้มันไปเพิ่มขนาดหรือจำนวนบิต ทำให้พื้นที่ตรงนั้นไม่พอ ไฟล์ที่เราแก้ไขจึงต้องไปอยู่อีกที่หนึ่ง
ซึ่งไม่อยู่ติดกับที่เหลืออีก 2ไฟล์เดิม
เพื่อแก้ไขปัญหานี้ใน
Ext4 จึงมี e4defrag tool
ซึ่งสามารถจัดระเบียบของข้อมูลเฉพาะของไฟล์นั้นๆ หรือทั้งระบบก็ได้
2.11 Inode-related features- Larger inodes : เพิ่มขนาดของ inode เป็น 256 bytes ( จากของเดิม 128 bytes ใน Ext3 )
เพื่อรองรับการเก็บ timestamps แบบ Nanoseconds - Inode reservation : เพิ่มการจองให้ inode เมื่อมีการสร้าง Directory (คาดว่าจะมีใช้ในอนาคต)
เมื่อมีการสร้างไฟล์ใหม่ขึ้นมาใน Directory ระบบก็จะสามารถใช้ inode ตรงส่วนที่ถูกจองไว้ได้เลย - Nanoseconds timestamps : ที่ inode fields ในส่วนของ modified time จะเก็บ timestamps
ในหน่วย nanosecond แทนที่หน่วย second ใน Ext3
Inode จะเก็บรายละเอียดต่างๆของไฟล์ เช่น
• การแสดงสิทธิต่าง ๆ ของไฟล์
• การบอกถึงชนิดของไฟล์
• แสดงถึงเจ้าของและกลุ่มเจ้าของไฟล์
• วันเวลาที่สร้างไฟล์ เปลี่ยนแปลงไฟล์ หรือการเข้าถึงไฟล์ (access file)
• จำนวนการเชื่อมโยงของไฟล์เชื่อมโยง
3. How to use Ext43.1 Creating a new Ext4 filesystem $ mkfs -t ext4 /dev/filesystem
Or
$ mkfs.ext4 /dev/filesystem
3.2 Migrate existing Ext3 filesystems to Ext4ในการอัพเกรดระบบไฟล์จาก
Ext3 ไปเป็น
Ext4 เราใช้เพียง 2 คำสั่งคือ tune2fs and
fsckแล้วก่อนทำอย่าลืม umount filesystem ก่อนนะครับ
tonhor@ubuntu:~# tune2fs -O extents,uninit_bg,dir_index /dev/filesystem
tune2fs 1.41.4 (27-Jan-2009)
Please run e2fsck on the filesystem.
tonhor@ubuntu:~# fsck -pDf /dev/filesystem
fsck 1.41.4 (27-Jan-2009)
/dev/sdb1: Group descriptor 0 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 1 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 2 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 3 checksum is invalid. FIXED.
/dev/sdb1: Group descriptor 4 checksum is invalid. FIXED.
[..]
3.3 Mount an existing Ext3 filesystem with Ext4 without changing the formatถ้าเราต้องการให้ระบบไฟล์ของเราเปลี่ยนจาก
Ext3 เป็น
Ext4 แล้วสามารถเปลี่ยนกลับมาเป็น
Ext3 ได้อีก
เราสามารถใช้การ mount ระบบไฟล์
Ext3 เป็น
Ext4 ได้
tonhor@ubuntu:~# mount -t ext4 /dev/filesystem /mnt/ext3
และเปลี่ยนระบบไฟล์กลับมาเป็น
Ext3 อีกครั้งด้วยการ mount
tonhor@ubuntu:~# mount -t ext3 /dev/filesystem /mnt/ext3
ที่มา: http://tonhor.exteen.com/20090502/what-is-ext4-ext4