Linux ต้องทำ disk defragment ไหม

Disk Fragmentation ผู้ใช้ Windows หลายคนคงสงสัยไม่น้อย ว่าผู้ใช้ *nix (Unix/Linux) ต้องทำ disk defragmentation เสมอๆ แบบที่ตนเองทำกับ Windows OS หรือไม่

ผู้เขียนเองก็สงสัยเช่นกัน หลายๆ คนเขาก็ว่า Ext2/Ext3 file system นั้นออกแบบมาดีแล้ว ไม่จำเป็นต้องทำ disk defragment เหมือน FAT หรือ NTFS file system หรอก แต่ก็ยังมีบางคนเชื่อเช่นกันว่า ในบางกรณี *nix OS ก็ยังมีความจำเป็นต้องทำ disk defragment เหมือนกัน

ITWorld.com
อธิบายเรื่อง Fragmentation and Unix file systems ไว้น่าสนใจทีเดียว เขาบอกว่า fragmentation เกิดเมื่อ system ไม่สามารถจัดหาพื้นที่ (disk space) เพื่อจัดเก็บแฟ้มข้อมูลทั้งแฟ้มได้ในที่เดียว จึงต้องตัดแบ่งแฟ้มข้อมูลเป็นส่วนๆ แล้วแยกเก็บหลายๆ ที่ จากนั้นใช้ระบบ file system ในการติดตามว่าส่วนต่างๆ ของแฟ้มข้อมูลนั้นเก็บไว้อยู่ที่ไหน ทำให้ต้องใช้เวลานานขึ้นเมื่อต้องการอ่านแฟ้มข้อมูลนี้ เพราะ system ต้องไปค้นที่ตาราง file system ก่อนเพื่อหาตำแหน่งส่วนต่างๆ ของแฟ้มนี้ แล้วนำมาส่วนต่างๆ เหล่านั้นมาประกอบกันเป็นหนึ่งแฟ้มข้อมูล

Fragmentation นั้นเป็นปัญหากับ FAT file system มากกว่า NTFS เพราะว่า FAT32 ออกมานานมากก่อนที่จะมีการคิดค้นวิธีการใหม่ๆ สำหรับ file system เพื่อให้ทำงานได้มีประสิทธิภาพมากขึ้น

สำหรับ Unix file system แล้ว ใช้วิธีการหลากหลายเพื่อลด fragmentation ให้น้อยที่สุด ตัวอย่างเช่น ufs file system ที่ใช้โดย Solaris และ BSD ทั้งหลาย ใช้วิธีเขียนข้อมูลที่เกี่ยวข้องกันไว้ภายใน cylinder กลุ่มเดียวกัน เพื่อเป็นการลด seek time ในการเข้าถึงแฟ้มข้อมูล ขณะที่พื้นที่ข้อมูลขนาดใหญ่ถูกใช้เพื่อปรับปรุง throughput ขณะเดียวกันพื้นที่ข้อมูลขนาดเล็กๆ ถูกใช้เก็บส่วนของแฟ้มข้อมูลที่ไม่ต้องการพื้นที่ทั้งบล๊อค ทำให้ลดพื้นที่เสียเปล่า

Linux ใช้ file system แบบ ext2 และ ext3 ซึ่งพยายามลด fragmentation ให้น้อยที่สุดเช่นกัน โดยใช้วิธีรักษาให้พื้นที่เก็บข้อมูลทั้งหมดของแฟ้มข้อมูลอยู่ใกล้ๆ กัน ซึ่งทำโดยจัดหาพื้นที่ไว้ล่วงหน้าให้มากพอ จึงสามารถเก็บข้อมูลไว้ในที่เดียวกันในกรณีที่แฟ้มข้อมูลมีขนาดใหญ่ขึ้น ช่วยลด fragmentation ไปได้ จะมีข้อยกเว้นอยู่บ้างก็สำหรับแฟ้มข้อมูลที่มีการเพิ่มขนาดอยู่เสมอๆ (เพราะพื้นที่จองล่วงหน้าก็มีขนาดจำกัดเช่นกัน)

ITWorld.com จึงสรุปว่าการทำ disk defragment จึงไม่มีความจำเป็นสำหรับระบบปฏิบัติการ Linux แต่นานๆ ครั้งเราอาจตรวจสอบปริมาณ fragmentation ด้วยคำสั่ง fsck บ้าง

** /dev/rdsk/c1d0s4
** Currently Mounted on /mail
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3 - Check Connectivity
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cyl groups
77 files, 1004062 used, 2094449 free (81 frags, 261796 blocks, 0.0%
fragmentation)

เขาบอกว่าเป็นไปได้น้อยมากที่เราจะพบบ fragmentation เกินกว่า 5%

แต่ถ้าเกิดเหตุการณ์พิสดารที่ Linux ของเรามี fragmentation เกินกว่า 5% แล้ว สิ่งที่ต้องทำคือสำรองข้อมูล file system ด้วยโปรแกรม เช่น dump หรือ ufsdump จากนั้นสร้าง file system ขึ้นมาใหม่ด้วยคำสั่ง newfs หรือ mkfs แล้วเรียก file system ที่สำรองไว้ขึ้นมาเขียนทับ

สำหรับ file system ขนาดใหญ่ ขั้นตอนทั้งหมดนี้อาจใช้เวลานานมาก ก็เลยมีคนพยายามจะสร้าง defragment for Linux ขึ้นเพื่อทำให้มันง่ายขึ้น สำหรับ Ubuntu ก็มี defrag ให้ใช้งานกันโดยเฉพาะ

ผู้เขียนเองก็ยังไม่เคยต้อง defragment Linux file system เลย สงสัยและเขียนไว้เผื่อๆ งั้นแหล่ะ เผื่อว่าวันหนึ่งอาจจะจำเป็นน่ะนะ