Saturday, May 9, 2009

What is Ext4? Ext4 คืออะไร?

ที่มา: http://tonhor.exteen.com/20090502/what-is-ext4-ext4
  • ใน jaunty jackalope เค้า support ext4 เลยต้องหาข้อมูลเค้าซะหน่อย
  • ไปเจอเว็บของอาจารย์ท่านหนึ่ง เขียนไว้ละเอียดดีมากๆ เลย

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

(ภาพจาก kerneltrap.org)

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 Ext4

3.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

ref :

No comments:

Post a Comment

Popular Posts