Bcachefs هو نظام ملفات يمكن نسخه عند الكتابة لأنظمة التشغيل المستندة إلى Linux.
قبل بضعة أيام، أعلن كينت أوفرستريت عن إصدار Bcachefs 1.33.0 ، وهو إصدار جديد من نظام الملفات يقدم تغييرات هيكلية عميقة في إدارة البيانات وبنية التعليمات البرمجية المصدرية الخاصة به.
يبدو أن هذا التحديث سيكون أحد أهم التحديثات في العامين الماضيين، حيث يركز على سلامة البيانات الوصفية وتحديث قاعدة التعليمات البرمجية C.
"التوفيق": حقبة جديدة لسلامة البيانات
أبرز الميزات الجديدة، والتي وُصفت بأنها أهم تغيير خلال العامين الماضيين، هي إضافة وظيفة التوفيق (rebalance_v2) . تحل هذه الآلية الجديدة محل نظام "إعادة التوازن" القديم، وتعالج أحد أبرز عيوبه: إذ أصبح النظام الآن قادرًا على إدارة ونقل ليس فقط بيانات المستخدم، بل أيضًا بيانات تعريف نظام الملفات.
يعمل برنامج Rebalance_v2 بشكل استباقي وتلقائي. ففي حال إضافة قرص جديد إلى مصفوفة التخزين أو تغيير خيارات التكرار، يبدأ برنامج Bcachefs فورًا بنسخ وتصحيح أي بيانات أو بيانات وصفية تالفة، مستخدمًا فهارس منفصلة لتحديد أولويات العمليات الحيوية. وهذا يضمن الحفاظ على سلامة النظام حتى أثناء عمليات الصيانة المكثفة.
تنظيف الكود وإعداد لغة Rust
في جوهرها، تُقدم النسخة 1.33.0 إعادة هيكلة شاملة لرمز C لجعله أكثر أمانًا وتوافقًا مع التنفيذ المستقبلي في Rustقام المطور بإجراء عملية تنظيف شاملة، مما أدى إلى تقليل عدد العبارات. goto من 2.500 إلى 600 فقط، مما يبسط التدفق المنطقي للبرنامج بشكل كبير.
بالإضافة إلى ذلك، تم إدخال وحدات ماكرو جديدة مثل DARRAY() y try()صُممت هذه التقنيات لمحاكاة سلوك المتجهات الديناميكي ومعالجة الأخطاء في لغتي Rust وC++. وهذا لا يُحدث نقلة نوعية في الكود الحالي فحسب، بل يُسهّل أيضًا قابلية نقله ويُقلل من احتمالية حدوث أخطاء في الذاكرة مستقبلًا.
تحسين التشخيص ومرونة التخزين
مع مراعاة إدارة النظام، يُحسّن هذا الإصدار بشكلٍ كبير وضوح رسائل الخطأ . يستطيع Bcachefs الآن التمييز بين ما إذا كان العطل ناتجًا عن خلل برمجي أو مشكلة في الأجهزة المادية، بل ويقترح خطوات الاستعادة اللازمة. وهذا أمرٌ بالغ الأهمية لتجنب التشخيصات الخاطئة التي تُلقي باللوم فيها على نظام الملفات في عطل القرص.
تمتد هذه الشفافية إلى عدة مستويات:
- أخطاء الإدخال/الإخراج التفصيلية: عندما تُبلغ طبقة الكتل عن عطل، يقوم Bcachefs الآن بإرسال الرمز المحدد (مثل
BLK_STS_IOERR)، مما يساعد في تحديد ما إذا كان القرص الصلب هو السبب. - أخطاء التجميع: إذا كانت الأجهزة مفقودة لتجميع وحدة تخزين، فإن النظام يشير الآن بدقة إلى الوحدة المفقودة، ويعرض اسمها وطرازها بناءً على آخر مرة شوهدت فيها.
- حدود معدل الخطأ: تم فصل الحدود بين الأخطاء "البرمجية" (soft) والأخطاء "الصلبة" (hardware)، مما يضمن عدم إخفاء سيل من الأخطاء الطفيفة لعطل حرج في القرص.
بالإضافة إلى ذلك، الأمر bcachefs fs top لقد تحسّن الوضع. تعرض العدادات الداخلية الآن سرعات نقل البيانات بدلاً من مجرد أرقام ثابتة، مما يجعل ربط الأحداث أسهل بكثير (مثل data_update_fail) مع انخفاضات في الأداء في الوقت الفعلي.
تحسينات في أشجار B وخيارات تركيب جديدة
تم تحسين أداء النظام تحت الأحمال الثقيلة بفضل تغييرات في إدارة شجرة B. أصبح دمج العقد الفارغة يتم الآن بشكل غير متزامن، مما يزيل اختناقات مخزن الكتابة المؤقت. بالإضافة إلى ذلك، تمت إضافة عملية استرداد اختيارية. merge_btree_nodes، لتحسين بنية الشجرة يدويًا إذا لزم الأمر.
ومن الميزات الإضافية العملية للغاية القدرة على تشغيل نظام الملفات باستخدام التكوين replicas=2 على قرص واحديتيح هذا للمستخدمين البدء بمحرك أقراص واحد مع العلم أن النظام "يجب" أن يكون لديه نظام احتياطي؛ بمجرد توصيل محرك أقراص ثان، يقوم Bcachefs تلقائيًا بنسخ البيانات دون الحاجة إلى تدخل يدوي معقد.
وأخيرًا، تجدر الإشارة إلى أن الإصدار الجديد، المتوفر بالفعل لتوزيعات مثل Debian و Fedora و Arch Linux و NixOS، يتطلب نواة Linux 6.16 أو أعلى ويتم توزيعه في حزمتين أساسيتين: وحدة النواة (bcachefs-kernel-dkms) وأدوات المستخدم (bcachefs-tools).