หลังจากพัฒนามาเกือบสองปี
ในฐานะที่เป็นส่วนหนึ่งของ ZFS บน Linux มีการเตรียมการใช้งานส่วนประกอบ ZFS ที่เกี่ยวข้องกับทั้งการทำงานของระบบไฟล์และการทำงานของตัวจัดการวอลุ่ม โดยเฉพาะอย่างยิ่ง มีการใช้ส่วนประกอบต่อไปนี้: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) และ ZPL (ZFS POSIX Layer) นอกจากนี้ โครงการยังมีความสามารถในการใช้ ZFS เป็นแบ็กเอนด์สำหรับระบบไฟล์คลัสเตอร์ Luster งานของโครงการอิงตามรหัส ZFS ดั้งเดิมที่นำเข้ามาจากโครงการ OpenSolaris และปรับปรุงด้วยการปรับปรุงและแก้ไขจากชุมชน Illumos โครงการกำลังได้รับการพัฒนาโดยมีส่วนร่วมของพนักงานของห้องปฏิบัติการแห่งชาติ Livermore ภายใต้สัญญากับกระทรวงพลังงานของสหรัฐอเมริกา
รหัสนี้แจกจ่ายภายใต้ใบอนุญาต CDDL ฟรี ซึ่งเข้ากันไม่ได้กับ GPLv2 ซึ่งไม่อนุญาตให้ ZFS บน Linux รวมเข้ากับสาขาหลักของเคอร์เนล Linux เนื่องจากไม่อนุญาตให้ผสมรหัสภายใต้ใบอนุญาต GPLv2 และ CDDL เพื่อหลีกเลี่ยงความไม่ลงรอยกันของใบอนุญาตนี้ จึงมีการตัดสินใจที่จะแจกจ่ายผลิตภัณฑ์ทั้งหมดภายใต้ใบอนุญาต CDDL เป็นโมดูลที่โหลดได้แยกต่างหาก ซึ่งจัดมาให้แยกต่างหากจากแกนกลาง ความเสถียรของ ZFS บนโค้ดเบสของ Linux นั้นเทียบได้กับระบบไฟล์อื่นๆ สำหรับ Linux
การเปลี่ยนแปลงที่สำคัญ:
- เพิ่มการรองรับในตัวสำหรับการเข้ารหัสข้อมูลที่เก็บไว้ที่ระดับของระบบไฟล์และพาร์ติชัน อัลกอริทึมการเข้ารหัสเริ่มต้นคือ aes-256-ccm มีการเสนอคำสั่ง "zfs load-key" เพื่อโหลดคีย์การเข้ารหัส
- ใช้ความสามารถในการถ่ายโอนข้อมูลที่เข้ารหัสเมื่อดำเนินการคำสั่ง 'zfs send' และ 'zfs gets' เมื่อระบุตัวเลือก “-w” ข้อมูลที่เข้ารหัสแล้วในพูลจะถูกถ่ายโอนไปยังพูลอื่นตามที่เป็นอยู่ โดยไม่มีการถอดรหัสระหว่างกลาง ด้วยการคัดลอกดังกล่าว ข้อมูลจะยังคงได้รับการปกป้องโดยคีย์ของผู้ส่ง ซึ่งอนุญาตให้ใช้โหมดนี้ในการสำรองข้อมูลไปยังระบบที่ไม่น่าไว้วางใจ (ในกรณีที่ผู้รับบุกรุก ผู้โจมตีจะไม่สามารถเข้าถึงข้อมูลได้หากไม่มีคีย์)
- เพิ่มการสนับสนุนสำหรับการถอดไดรฟ์หลักออกจากพูลหน่วยเก็บข้อมูล เชื่อมต่อทั้งแบบแยกส่วนและเป็นส่วนหนึ่งของมิเรอร์ การลบจะดำเนินการด้วยคำสั่ง "zpool remove" กระบวนการลบจะคัดลอกข้อมูลจากไดรฟ์ที่แยกไปยังไดรฟ์หลักที่เหลืออยู่ในพูล
- เพิ่มคำสั่ง "จุดตรวจสอบ zpool" เพื่อบันทึกสถานะปัจจุบันของพูลด้วยความสามารถในการย้อนกลับการเปลี่ยนแปลงเพิ่มเติมไปยังจุดที่บันทึกไว้ (สร้างภาพรวมของพูลทั้งหมด) คุณลักษณะนี้อาจมีประโยชน์ในกระบวนการปฏิบัติงานการดูแลระบบที่ซับซ้อนซึ่งอาจเป็นอันตราย ซึ่งภายใต้สภาวะปกติจะนำไปสู่การเปลี่ยนแปลงที่แก้ไขไม่ได้ (เช่น การเปิดใช้งานแฟล็กสำหรับฟังก์ชัน ZFS ใหม่หรือการล้างข้อมูล)
- มีการเพิ่มคำสั่ง "zpool trim" เพื่อแจ้งไดรฟ์ที่ใช้ในพูลเกี่ยวกับเซกเตอร์ที่ไม่ได้ใช้งานแล้ว การใช้การดำเนินการ TRIM ทำให้สามารถเพิ่มประสิทธิภาพของ SSD และป้องกันการลดลงของประสิทธิภาพ มีการเสนอคุณสมบัติ "autotrim" ใหม่เพื่อเปิดใช้งานกระบวนการเบื้องหลังอย่างต่อเนื่องในการส่งคำสั่ง TRIM;
- เพิ่มคำสั่ง "zpool initialize" เพื่อเตรียมใช้งานพื้นที่ดิสก์ที่ไม่ได้ถูกจัดสรรทั้งหมด ซึ่งช่วยให้พร้อมใช้งานได้ทันที โดยไม่ทำให้ประสิทธิภาพลดลงเมื่อเข้าถึงครั้งแรก (เช่น เมื่อโฮสต์พื้นที่จัดเก็บข้อมูลเสมือนจริง เช่น VMware VMDK)
- เพิ่มการสนับสนุนสำหรับบัญชีและโควต้าระดับโครงการ นอกเหนือไปจากโควต้าระดับผู้ใช้และกลุ่มที่มีอยู่ก่อนหน้านี้ โดยพื้นฐานแล้ว โปรเจ็กต์เป็นพื้นที่แยกต่างหากของอ็อบเจ็กต์ที่เกี่ยวข้องกับตัวระบุแยกต่างหาก (รหัสโปรเจ็กต์) การเชื่อมโยงถูกกำหนดผ่านการดำเนินการ 'chattr -p' หรือผ่านการสืบทอดแอตทริบิวต์ สำหรับการจัดการโครงการจะมีการแสดงคำสั่ง "zfs project" และ "zfs projectspace" ซึ่งช่วยให้คุณจัดการการสร้างโครงการและตั้งค่าขีด จำกัด พื้นที่ดิสก์สำหรับพวกเขา
- เพิ่มความสามารถในการสร้างสคริปต์ Lua เพื่อทำงานต่างๆ ด้วย ZFS โดยอัตโนมัติ สคริปต์ทำงานในสภาพแวดล้อมแยกพิเศษโดยใช้คำสั่ง "โปรแกรม zpool"
- ใช้ห้องสมุดใหม่แล้ว
pyzf ซึ่งมี API ที่เสถียรสำหรับการจัดการ ZFS จากแอปพลิเคชัน Python ไลบรารีเป็นตัวห่อหุ้มรอบ libzfs_core และจัดเตรียมชุดฟังก์ชันที่เหมือนกัน แต่ใช้ประเภท Python ที่ใกล้เคียงกว่า - ยูทิลิตี arcstat, arcsummary และ dbufstat ถูกทำให้เข้ากันได้กับ Python 3 ยูทิลิตี arcstat.py, arc_summary.py และ dbufstat.py ถูกเปลี่ยนชื่อเป็นเวอร์ชันที่ไม่มีนามสกุล ".py";
- เพิ่มการสนับสนุนสำหรับอินเทอร์เฟซเคอร์เนล Linux Direct IO (O_DIRECT) ซึ่งอนุญาตให้เข้าถึงข้อมูลโดยไม่ต้องบัฟเฟอร์และข้ามแคช
- แนะนำการเพิ่มประสิทธิภาพการทำงาน:
- การทำงานของคำสั่ง "scrub" และ "resilver" ได้รับการเร่งเนื่องจากการแบ่งออกเป็นสองขั้นตอน (มีการจัดสรรเฟสแยกต่างหากสำหรับการสแกนข้อมูลเมตาและกำหนดตำแหน่งของบล็อกที่มีข้อมูลบนดิสก์ ซึ่งช่วยให้สามารถตรวจสอบเพิ่มเติมโดยใช้ข้อมูลตามลำดับ การอ่าน);
- เพิ่มการรองรับคลาสการจัดสรร
อนุญาตให้ SSD ที่มีขนาดค่อนข้างเล็กรวมกันและใช้เพื่อจัดเก็บบล็อกที่ใช้กันทั่วไปบางประเภทเท่านั้น เช่น ข้อมูลเมตา ข้อมูล DDT และบล็อกไฟล์ขนาดเล็ก - ปรับปรุงประสิทธิภาพของคำสั่งผู้ดูแลระบบ เช่น
"zfs list" และ "zfs get" โดยแคชข้อมูลเมตาที่จำเป็นสำหรับการดำเนินการ - เพิ่มการสนับสนุนสำหรับการขนานของการดำเนินการจัดสรรบล็อกโดยเรียกใช้กระบวนการจัดสรรแยกต่างหากสำหรับแต่ละกลุ่ม metaslab ในระบบทั่วไปมีประสิทธิภาพเพิ่มขึ้น 5-10% แต่สำหรับระบบขนาดใหญ่ (8 128 GB SSD, 24 คอร์ NUMA, 256 GB of RAM) การเพิ่มการจัดสรรบล็อกสามารถทำได้ถึง 25%
- เพิ่มความเป็นไปได้ในการเลื่อนการดำเนินการของคำสั่ง "resilver" (สร้างการกระจายข้อมูลใหม่โดยคำนึงถึงการเปลี่ยนแปลงในการกำหนดค่าของไดรฟ์) - หากการดำเนินการก่อนหน้านี้ยังไม่เสร็จสมบูรณ์เมื่อเริ่มดำเนินการใหม่ ตัวจัดการใหม่จะเริ่มดำเนินการหลังจาก จุดสิ้นสุดของอันที่แล้ว
- มีการเพิ่มการเพิ่มประสิทธิภาพลงใน ZIL (ZFS Intent Log) เพื่ออนุญาตให้สร้างและประมวลผลบล็อกต่อหน้าบล็อกที่ยังคงถูกประมวลผลโดยที่เก็บข้อมูล
- ลดเวลาการลงทะเบียนสำหรับพาร์ติชัน (zvol) ในระบบ เมื่อพูลมีพาร์ติชันจำนวนมาก ตอนนี้พาร์ติชันจะพร้อมใช้งานทันทีหลังจากดำเนินการ "นำเข้า zpool"
- เพิ่มการรองรับสำหรับการคำนวณแบบเร่งด้วยฮาร์ดแวร์ของแฮช SHA256 และการดำเนินการเข้ารหัส AES-GSM โดยใช้ชิป Intel QAT (Quick Assist Technology) เพิ่มการรองรับการเร่งด้วยฮาร์ดแวร์ของชิปเซ็ต Intel C62x และ CPU Atom C3000
ที่มา: opennet.ru