การเปิดตัว ZFS บน Linux 0.8.0 การใช้งาน ZFS สำหรับเคอร์เนล Linux

หลังจากพัฒนามาเกือบสองปี นำเสนอ ปล่อย ZFS บนลินุกซ์ 0.8.0การใช้งานระบบไฟล์ ZFS ที่บรรจุเป็นโมดูลสำหรับเคอร์เนล Linux โมดูลได้รับการทดสอบกับเคอร์เนล Linux ตั้งแต่ 2.6.32 ถึง 5.1 แพ็คเกจการติดตั้งพร้อมในเร็ว ๆ นี้ จะได้เตรียม สำหรับ Linux ดิสทริบิวชันหลักๆ ได้แก่ Debian, Ubuntu, Fedora, RHEL/CentOS โมดูล ZFS บน Linux รวมอยู่ใน Debian, Ubuntu, Gentoo, Sabayon Linux และ ALT Linux แล้ว

ในฐานะที่เป็นส่วนหนึ่งของ 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

เพิ่มความคิดเห็น