إصدار ZFS على Linux 0.8.0 ، تطبيقات ZFS لنواة Linux

بعد ما يقرب من عامين من التطوير المقدمة الإفراج عن ZFS على Linux 0.8.0، وهو تطبيق لنظام ملفات ZFS الذي تم تجميعه كوحدة نمطية لنواة Linux. تم اختبار الوحدة باستخدام Linux kernels من 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 (وحدة إدارة البيانات) ، ZVOL (حجم مقلد ZFS) و ZPL (ZFS POSIX Layer). بالإضافة إلى ذلك ، يوفر المشروع القدرة على استخدام ZFS كخلفية لنظام الملفات العنقودية Luster. يعتمد عمل المشروع على كود ZFS الأصلي المستورد من مشروع OpenSolaris وتم تعزيزه بالتحسينات والإصلاحات من مجتمع Illumos. يتم تطوير المشروع بمشاركة موظفي مختبر ليفرمور الوطني بموجب عقد مع وزارة الطاقة الأمريكية.

يتم توزيع الكود بموجب ترخيص CDDL مجاني ، وهو غير متوافق مع GPLv2 ، والذي لا يسمح بدمج ZFS على Linux في الفرع الرئيسي لنواة Linux ، حيث لا يُسمح بدمج الكود بموجب تراخيص GPLv2 و CDDL. للتحايل على عدم توافق الترخيص هذا ، تقرر توزيع المنتج بأكمله بموجب ترخيص CDDL كوحدة قابلة للتحميل بشكل منفصل ، والتي يتم توفيرها بشكل منفصل عن النواة. تم تصنيف استقرار ZFS على قاعدة بيانات Linux على أنه مشابه لأنظمة الملفات الأخرى لنظام Linux.

التغييرات الرئيسية:

  • تمت إضافة دعم مدمج لتشفير البيانات المخزنة على مستوى نظام الملفات والأقسام. خوارزمية التشفير الافتراضية هي aes-256-ccm. تم اقتراح الأمر "zfs load-key" لتحميل مفاتيح التشفير ؛
  • نفذت القدرة على نقل البيانات المشفرة عند تنفيذ الأمرين "zfs send" و "zfs get". عند تحديد الخيار "-w" ، يتم نقل البيانات المشفرة بالفعل في التجمع إلى تجمع آخر كما هي ، بدون فك تشفير وسيط. مع هذا النسخ ، تظل البيانات محمية بواسطة مفتاح المرسل ، مما يسمح باستخدام هذا الوضع للنسخ الاحتياطي لأنظمة غير جديرة بالثقة (إذا تم اختراق المستلم ، فلن يتمكن المهاجم من الوصول إلى البيانات بدون المفتاح) ؛
  • دعم إضافي لإزالة محركات الأقراص الأساسية من مجموعة تخزين ، متصلة بشكل فردي وكجزء من مرآة. تتم الإزالة باستخدام الأمر "zpool remove". تقوم عملية الحذف بنسخ البيانات من محرك الأقراص المستبعد إلى محركات الأقراص الأساسية المتبقية في التجمع ؛
  • تمت إضافة الأمر "zpool checkpoint" لحفظ الحالة الحالية للمجمع مع القدرة على التراجع عن المزيد من التغييرات إلى النقطة المحفوظة في الوقت المناسب (يتم إنشاء لقطة للمجمع بأكمله). يمكن أن تكون هذه الميزة مفيدة في عملية أداء الأعمال الإدارية المعقدة التي يحتمل أن تكون خطرة ، والتي تؤدي في ظل الظروف العادية إلى تغييرات لا رجعة فيها (على سبيل المثال ، تنشيط العلامات لوظيفة ZFS الجديدة أو مسح البيانات) ؛
  • تمت إضافة الأمر "zpool trim" لإعلام محركات الأقراص المستخدمة في التجمع بالقطاعات التي لم تعد قيد الاستخدام. يتيح استخدام عملية TRIM زيادة كفاءة محركات أقراص الحالة الثابتة ومنع تدهور أدائها. تم اقتراح خاصية "autotrim" جديدة لتمكين عملية الخلفية المستمرة لنقل أوامر TRIM ؛
  • تمت إضافة أمر "zpool initialize" لتهيئة كل مساحة القرص غير المخصصة ، مما يسمح لها بأن تكون جاهزة للاستخدام على الفور ، دون تدهور الأداء عند الوصول الأول (على سبيل المثال ، عند استضافة مخازن افتراضية مثل VMware VMDK) ؛
  • تمت إضافة دعم للمحاسبة والحصص على مستوى المشروع ، بالإضافة إلى حصص المستخدمين والمجموعات المتوفرة مسبقًا. في جوهرها ، تعد المشاريع مساحة منفصلة للكائنات المرتبطة بمعرف منفصل (معرف المشروع). يتم تعريف الارتباط من خلال عملية "chattr -p" أو عبر وراثة السمة. لإدارة المشروع ، يتم تقديم الأمرين "zfs project" و "zfs projectspace" ، مما يسمح لك بإدارة إنشاء المشاريع وتعيين حدود مساحة القرص لها ؛
  • تمت إضافة القدرة على إنشاء نصوص Lua لأتمتة العمل المتنوع باستخدام ZFS. يتم تشغيل البرامج النصية في بيئات معزولة خاصة باستخدام الأمر "zpool program" ؛
  • تم تنفيذ مكتبة جديدة pyzfs، والذي يوفر واجهة برمجة تطبيقات مستقرة لإدارة 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" بسبب الانقسام إلى مرحلتين (تم تخصيص مرحلة منفصلة لمسح البيانات الوصفية وتحديد موقع الكتل التي تحتوي على بيانات على القرص ، مما يسمح بمزيد من التحقق باستخدام البيانات المتسلسلة قراءة)؛
    • دعم إضافي لفئات التخصيص ،
      السماح بتجميع محركات أقراص الحالة الصلبة الصغيرة نسبيًا واستخدامها لتخزين أنواع معينة فقط من الكتل شائعة الاستخدام ، مثل البيانات الوصفية وبيانات الـ دي.دي.تي وكتل الملفات الصغيرة ؛

    • تحسين أداء أوامر المسؤول مثل
      "zfs list" و "zfs get" عن طريق التخزين المؤقت للبيانات الوصفية الضرورية لعملهم ؛

    • تمت إضافة دعم لموازنة عمليات تخصيص الكتلة عن طريق تشغيل عمليات تخصيص منفصلة لكل مجموعة metaslab. في الأنظمة التقليدية ، هناك زيادة في الأداء بنسبة 5-10٪ ، ولكن في الأنظمة الكبيرة (8 جيجابايت SSD ، 128 نواة NUMA ، 24 جيجابايت من ذاكرة الوصول العشوائي) ، يمكن أن تصل الزيادة في عمليات تخصيص الكتلة إلى 256٪ ؛
    • تمت إضافة إمكانية تأجيل تنفيذ الأمر "resilver" (إعادة إنشاء توزيع البيانات مع مراعاة التغييرات في تكوين محركات الأقراص) - إذا لم يكتمل الأمر السابق بعد عند بدء عملية جديدة ، فسيبدأ المعالج الجديد في التنفيذ فقط بعد انتهى السابق.
    • تمت إضافة التحسينات إلى ZIL (ZFS Intent Log) للسماح بإنشاء كتل ومعالجتها في وجود الكتل التي لا تزال قيد المعالجة بواسطة التخزين ؛
    • تقليل وقت التسجيل للأقسام (zvol) في النظام. عندما يحتوي التجمع على عدد كبير من الأقسام ، فإنها متاحة الآن على الفور بعد إجراء "استيراد zpool" ؛
    • دعم إضافي لحساب تسريع الأجهزة لعمليات تجزئة SHA256 وعمليات تشفير AES-GSM باستخدام رقائق Intel QAT (تقنية المساعدة السريعة). دعم إضافي لتسريع الأجهزة لمجموعة شرائح Intel C62x ووحدة المعالجة المركزية Atom C3000.

المصدر: opennet.ru

إضافة تعليق