แน่นอนว่า Kernel ของ Linux ในปัจจุบันนั้น สนับสนุน file system ที่หลากหลาย แต่ละ file system ก็มีระบบจัดการ และ ดึงไฟล์จากสื่อหรือหน่วยเก็บข้อมูลที่ใช้วิธีการแตกต่างกัน และ การที่มีทางเลือกหลากหลาย มันก็เลยเป็นความจำเป็นของผู้ใช้งานที่จะต้องอย่างน้อยมีความเข้าใจ เกี่ยวกับการทำงานของแต่ละ file system เพื่อการเลือกใช้ให้ตรงกับงานที่เหมาะที่สุด นอกเหนือจาก ext4 ที่เรารู้จักและมีการใช้งานกันมาอย่างยาวนานแล้ว XFS ก็ถือเป็นอีกทางเลือกหนึ่งที่ได้รับความนิยมอย่างมากเช่นกัน และวันนี้เราจะไปทำความเข้าใจเกี่ยวระบบไฟล์ตัวนี้ พร้อมกับสิ่งที่ทำให้มันแตกต่างจาก file system
ทำความรู้จักกับ XFS
XFS คือหนึ่งใน file system ที่เสถียรตัวหนึ่งใน Linux และถูกออกแบบโดย Silicon Graphics Inc เปิดตัวครั้งแรกในปี 1994 บนระบบปฏิบัติการ IRIX (คล้าย UNIX) หลังจากนั้น ได้มีการนำไปใช้บน สังคมโอเพนซอร์ส ต่อมาในปี 2001 ได้มีการผนวกเข้ากับ Kernel หลังจากนั้น ก็ทำให้ distribution ต่างๆ ก็นำไปใช้งานหรือแนะนำให้กับผู้ใช้ และมีบาง distribution ที่ใช้งานเป็น default file system เช่น CentOS, RHEL และ Rocky Linux
เพราะ Silicon Graphics Inc ซึ่งในขณะนั้นเป็นบริษัทที่ขายฮาร์ดแวร์และระบบให้กับองค์กรขนาดใหญ่ เลยทำให้การออกแบบนั้น นั้นการรองรับข้อมูลปริมาณมหาศาล ทำให้ XFS นั้นขึ้นชื่อเรื่องประสิทธิภาพ นอกจากบน Linux Distribution ก็จะมี NAS ที่มีการนำไปใช้งานเหมือนกันเช่น Buffalo LinkStation & TeraStation, NetGear, LaCie, Iomega และอื่นๆ
สำหรับการพัฒนานั้น ก็มีหลักๆ อยู่ 3 ครั้ง จึงเป็นที่มา ว่าเป็นยุคๆ ของ XFS
XFS Gen 1 : มาจาก SGI XFS สำหรับทำงานบน IRIX OS ของ SGI ในยุคเริ่มแรก
XFS Gen 2 : เข้ามาทำงานบน Linux ได้แล้ว และ ทำงานบน NAS เพิ่มขึ้น
XFS Gen 3 : ส่วนนี้ทำงานอยู่บน Linux ปัจจุบันเป็นส่วนใหญ่ และ เรียกว่ามีการพัฒนาเพื่อให้เก็บ metadata เพื่อการตรวจสอบและยืนยันข้อมูลได้ดีขึ้น
XFS นั้นอนุญาตให้เราสร้าง volume ที่มีขนาดถึง 18 exabytes และ จัดการไฟล์ที่มีขนาดใหญ่ได้สูงสุดถึง 9 exabytes จำนวนของไฟล์ นั้นไม่จำกัด นอกจากนั้น ก็ยังจะสร้างข้ามดิสก์ได้อีกด้วย
มันทำงานในลักษณะทีเรียกว่า Journaling โดยจะมีการเก็บการเปลี่ยนแปลงก่อนที่จะทำการเขียนทับ ทำให้การันตีความสมบูรณ์ของไฟล์ได้ดีมาก
โครงสร้างพื้นฐานของ XFS File System
แทนที่ XFS จะทำการจัดสรรเนื้อที่ว่างเป็นบล็อกอิสระต่อกัน มันจะทำการรวมบล็อกเหล่านั้น เป็นหน่วยที่ต่อๆกัน โดยมีความยาวต่างกัน และ เราจะเรียกสิ่งเหล่านี้ว่า extent ไฟล์หนึ่งๆ อาจจะประกอบด้วยหลายๆ extent XFS นั้นจะพยายามทำให้ตัวเลขนั้นน้อยที่สุด และ พยายามที่จะรวม extent เข้าด้วยกัน เมื่อไฟล์นั้นใหญ่ขึ้น ข้อมูลเกี่ยวกับไฟล์ (metadata) จะถูกเก็บอยู่ใน inode และ inode เหล่านั้นจะถูกจัดสรรใน chunk โดยมีขนาด 64 ต่อตัว
file system นั้นสามารถแบ่งได้เป็น 3 ส่วนดังนี้
เป็นส่วนที่เก็บ metadata ของ file system และ ดาต้าของผู้ใช้ไฟล์ เนื้อที่ว่างของหน่วยเก็บข้อมูลจะถูกแบ่งย่อยๆ เป็นกลุ่มที่เท่าๆกัน โดยมีขนาดน้อยสุดคือ 16MB และขนาดมากสุดคือ 1TB แต่ละกลุ่มที่ถูกแบ่ง มีการควบคุาอย่างอิสระ เพราะฉะนั้นการดำเนินการเกี่ยวกับไฟล์สามารถทำได้ในเวลาเดียวกันหรือพร้อมกัน ในส่วน extent ที่ว่างอยู่นั้น ถูกจัดการด้วยคู่ของ B+ tree
ส่วนนี้จะเก็บการแก้ไขไฟล์ metadata โดยมีส่วนที่เป็น header เก็บว่ามันถูกทำสำเนาอย่างไร ในกรณีที่เกิดปัญหาขึ้นเช่นไฟดับหรือว่าอย่างอื่น ก็จะมีการดึงข้อมูลจาก log ขึ้นมาดำเนินการต่อนั่นเอง
เป็นส่วนที่จะเก็บไฟล์แบบเรียลไทม์ ด้วยความต้องการ I/O พิเศษ ปกติแล้วก็จะถูกใช้งาน สตอเรจประสิทธิภาพสูง โดยมีการแบ่ง extent เป็นส่วนที่มีขนาดเท่าๆ กัน มีการใช้ index แบบ array สองมิติ
Veeam และ XFS
Veeam นั้นแนะนำว่า หากท่านใช้ Linux Repo ท่านควรใช้ file system แบบ XFS ทั้งนี้เพราะว่า ระบบไฟล์แบบนี้ จะทำให้การทำ synthetic full นั้นทำงานได้อย่างรวดเร็ว เพราะเป็นเหมือนการเปลี่ยนแปลง pointer แทนการเขียนไฟล์จริงๆ ซึ่งก็เป็นหลักการเดียวกับ ReFS จากค่าย Windows Server เพราะฉะนั้น หากท่านใช้ Repo ใน Veeam ไม่ว่าจะเป็น Repo ธรรมดาหรือว่า Hardened Repo ท่านควรเลือก XFS อย่างยิ่ง
มีปัญหาเรื่องการใช้งาน Linux, Veeam ติดต่อเราได้เลยที่ Line OA : @avesta.co.th หรืออีเมล์ [email protected]