Miklix

استبدال محرك أقراص معطل في مجموعة mdadm على Ubuntu

نُشرت: ١٥ فبراير ٢٠٢٥ م في ١٠:٠١:١٠ م UTC
آخر تحديث: ١٢ يناير ٢٠٢٦ م في ٨:٤٩:٥٠ ص UTC

إذا كنت في الموقف المخيف المتمثل في تعطل محرك الأقراص في مصفوفة mdadm RAID، فإن هذه المقالة تشرح كيفية استبداله بشكل صحيح على نظام Ubuntu.


لقد تمت ترجمة هذه الصفحة آليًا من الإنجليزية بهدف جعلها متاحة لأكبر عدد ممكن من الأشخاص. لسوء الحظ، لم يتم تطوير تقنية الترجمة الآلية بعد، لذا قد تحدث أخطاء. إذا كنت تفضل ذلك، يمكنك عرض النسخة الإنجليزية الأصلية هنا:

Replacing a Failed Drive in an mdadm Array on Ubuntu

تستند المعلومات الواردة في هذه المقالة إلى نظام التشغيل أوبونتو 18.04 وإصدار mdadm المضمن في مستودعاته؛ وهو الإصدار v4.1-rc1 وقت كتابة هذه المقالة. وقد تكون هذه المعلومات صالحة أو غير صالحة لإصدارات أخرى.

لقد تعطلت مؤخرًا وحدة تخزين في خادم الملفات المنزلي الخاص بي، والذي يتكون من تسعة أقراص في مصفوفة RAID-6 من نوع mdadm. هذا أمرٌ مُقلقٌ دائمًا، ولكن لحسن الحظ تمكنت من الحصول بسرعة على قرص بديل تم توصيله في اليوم التالي، مما سمح لي ببدء عملية إعادة بناء النظام.

أعترف أنني كنتُ بخيلًا بعض الشيء عند إعداد خادم الملفات في البداية؛ اثنان فقط من الأقراص عبارة عن أقراص تخزين شبكي (Seagate IronWolf)، بينما البقية أقراص مكتبية (Seagate Barracuda). وليس من المستغرب أن يكون أحد الأقراص المكتبية هو الذي تعطل (بعد ما يقارب ثلاث سنوات من الخدمة). لقد توقف عن العمل تمامًا؛ بعد نقله إلى علبة USB مكتبية، لم أحصل منه إلا على صوت طقطقة مزعج، ولم يتمكن كل من نظامي Ubuntu 20.04 وWindows 10 من التعرف عليه.

حسنًا، لننتقل إلى قطعة الغيار (نعم، القرص الجديد الذي اشتريته كان من نوع IronWolf، لقد تعلمت الدرس) - على الرغم من أن فقدان قرص في مصفوفة قيد التشغيل أمرٌ مخيف، إلا أنه يصبح أكثر رعبًا إذا لم تكن على دراية بالإجراء الصحيح لاستبداله. ليست هذه المرة الأولى التي أضطر فيها إلى استبدال قرص تالف في مصفوفة mdadm، ولكن لحسن الحظ، هذا نادر الحدوث لدرجة أنني عادةً ما أضطر إلى البحث عن الأوامر المناسبة. هذه المرة قررت إعداد دليل صغير خاص بي للرجوع إليه مستقبلًا.

إذن، أولاً وقبل كل شيء، عندما تتلقى رسالة البريد الإلكتروني المزعجة التي تُفيد بفشل النظام من mdadm، عليك تحديد القرص الذي تعطل. صحيح أنه سيُظهر لك اسم الجهاز (في حالتي /dev/sdf)، لكن قد لا يكون من الواضح أي قرص فعلي هو المقصود، لأن هذه الأسماء قد تتغير عند إعادة تشغيل الجهاز.

إذا لم تكن متأكدًا حتى من اسم الجهاز الذي فشل، يمكنك استخدام الأمر التالي لمعرفة ذلك (استبدل /dev/md0 بجهاز RAID الخاص بك):

mdadm -–query -–detail /dev/md0

كما ذكرت، في حالتي كان /dev/sdf، لذا دعونا نتابع من هذا المنطلق.

بعد ذلك، يمكنك محاولة العثور على الرقم التسلسلي للقرص المعطل عن طريق إصدار هذا الأمر:

smartctl -–all /dev/sdf | grep -i 'Serial'

(إذا لم يتم العثور على smartctl، فأنت بحاجة إلى تثبيت حزمة smartmontools على Ubuntu)

يمكن بعد ذلك مقارنة الرقم التسلسلي بالأرقام التسلسلية الموجودة على الملصق المادي الموجود على محركات الأقراص لمعرفة أي منها قد تعطل.

لكن هذه المرة لم يحالفني الحظ. كان القرص الصلب معطلاً تماماً، بل ورفض حتى تقديم بيانات SMART أو أي بيانات أخرى، بما في ذلك الرقم التسلسلي.

بما أنني كنت أملك وصولاً فعلياً إلى الخادم (وهو أمر ضروري حقاً إذا كنت ستستبدل قرصاً صلباً بنفسك، على ما أعتقد ;-))، وكان الخادم يعمل بالفعل عندما تعطل القرص (واستمر في العمل بشكل جيد بفضل نظام RAID-6 الاحتياطي)، فقد لجأت إلى الطريقة البدائية، ولكنها فعالة للغاية وواضحة، وهي ببساطة نسخ ملف كبير إلى الخادم ومراقبة أي مؤشر ضوئي للقرص الصلب لم يومض. في غضون ثوانٍ قليلة، تمكنت من تحديد القرص المتسبب بالمشكلة.

الآن، قبل إزالة القرص الصلب الفعلي، من المستحسن إبلاغ mdadm رسميًا بهذه النية، عن طريق إصدار هذا الأمر (استبدل أسماء الأجهزة بأسماء الأجهزة الخاصة بك حسب الاقتضاء):

mdadm -–manage /dev/md0 -–remove /dev/sdf1

عند النجاح، سيرد mdadm برسالة تقول إنه "أزال القرص أثناء التشغيل"، على ما يبدو لأن جهاز RAID الظاهري يعمل بالفعل في ذلك الوقت.

إذا فشلت العملية مع ظهور رسالة خطأ مشابهة لـ "الجهاز أو المورد مشغول"، فقد يكون ذلك لأن mdadm لم يسجل محرك الأقراص على أنه معطل تمامًا. لإجباره على ذلك، نفّذ هذا الأمر (مع مراعاة استبدال أسماء الأجهزة بأسماء الأجهزة الخاصة بك حسب الحاجة):

mdadm --manage /dev/md0 --fail /dev/sdf

بعد ذلك، يجب أن تكون قادراً على إزالة الجهاز من المصفوفة باستخدام الأمر السابق.

حان الآن وقت استبدال القرص الصلب. إذا كنت متأكدًا تمامًا من أن جهازك ووحدة التحكم يدعمان خاصية التبديل السريع، فيمكنك القيام بذلك دون إيقاف تشغيل الجهاز. هذه هي الطريقة المثلى لأنظمة الإنتاج الحيوية التي تعمل على خوادم حقيقية وموثوقة، والتي تعرف تمامًا أنها قادرة على تحمل هذه الخاصية. مع ذلك، يعتمد خادم الملفات المنزلي الخاص بي على لوحة أم سطح مكتب عادية مزودة بوحدتي تحكم SATA غير معروفتين في فتحات PCIe لتوفير منافذ SATA إضافية.

على الرغم من أن SATA بشكل عام يجب أن يدعم التبديل السريع، إلا أنني لم أكن لأخاطر بأي شيء في هذا الإعداد، لذلك اخترت إيقاف تشغيل الجهاز أثناء استبدال القرص الصلب.

قبل القيام بذلك، يُنصح بتعطيل جهاز RAID في ملف /etc/fstab حتى لا يحاول أوبونتو تركيبه تلقائيًا عند إعادة التشغيل، فقد يتسبب ذلك في توقف النظام وإجبارك على الدخول في وضع الاسترداد بسبب تدهور حالة مصفوفة RAID. قد لا يُمثل هذا مشكلة كبيرة في أجهزة سطح المكتب، ولكنني أشغل هذا الخادم بدون شاشة أو لوحة مفاتيح، لذا سيكون هذا الأمر مُرهقًا بعض الشيء.

بعد تشغيل الجهاز بعد تثبيت القرص الجديد، استخدم الأمر lsblk أو أي وسيلة أخرى لتحديده. إذا لم تُجرِ أي تغييرات أخرى، فمن المحتمل (ولكن ليس بالضرورة) أن يحمل نفس اسم القرص الذي استبدلته. في حالتي، حدث ذلك، لذا يُسمى القرص الجديد أيضًا /dev/sdf.

بما أن مصفوفة التخزين الخاصة بي تعتمد على الأقسام وليس على الأجهزة الفعلية، فقد احتجت إلى نسخ جدول الأقسام من محرك أقراص عامل إلى محرك الأقراص الجديد للتأكد من تطابقهما تمامًا. إذا كنت تستخدم أجهزة فعلية لتشغيل مصفوفة التخزين، فيمكنك تخطي هذه الخطوة.

استخدمتُ أداة sgdisk لهذا الغرض، حيث قمتُ بنسخ جدول الأقسام من /dev/sdc إلى /dev/sdf. تأكد من استبدال أسماء الأجهزة لتتوافق مع اسم جهازك.

لاحظ الترتيب هنا: عليك إدراج محرك الأقراص "إلى" أولاً! قد يبدو هذا غير بديهي بعض الشيء بالنسبة لي، لكن تأكد من القيام بذلك بشكل صحيح حتى لا تواجه مشكلة أخرى في محرك الأقراص ضمن المصفوفة ;-)

sgdisk -R /dev/sdf /dev/sdc

ثم لتجنب تعارضات UUID، قم بإنشاء UUIDs جديدة للقرص الجديد:

sgdisk -G /dev/sdf

وأخيرًا، حان الوقت لإضافة القرص الجديد إلى المصفوفة وبدء عملية إعادة البناء! (حسنًا، هي ليست عملية ممتعة حقًا، بل هي عملية بطيئة ومقلقة للغاية، لأنك بالتأكيد لا تريد أن يتعطل قرص آخر في هذا الوقت. ربما يساعد تناول بعض البيرة على تخفيف التوتر).

على أي حال، لإضافة القرص الجديد إلى المصفوفة، قم بتنفيذ هذا الأمر (مرة أخرى، تأكد من استبدال أسماء الأجهزة بأسماء الأجهزة الخاصة بك حسب الاقتضاء):

mdadm -–manage /dev/md0 -–add /dev/sdf1

إذا سارت الأمور على ما يرام، فسيتم إضافة القرص إلى المصفوفة بسلاسة. أعتقد أنه يُضاف كقرص احتياطي ساخن افتراضيًا، ولكن نظرًا لأن هذه المصفوفة تفتقر إلى قرص (القرص المعطل)، فسيتم استخدامه فورًا وستبدأ عملية إعادة البناء.

يمكنك مراقبته على النحو التالي:

watch cat /proc/mdstat

قد يستغرق هذا بعض الوقت؛ على خادمي المتواضع (المبني في الغالب على مكونات من فئة المستهلكين ومحركات أقراص سطح المكتب)، لم تتجاوز سرعة النقل 100 ميجابايت/ثانية. ضع في اعتبارك أن هذا نظام RAID-6، لذا يتضمن إعادة البناء الكثير من حسابات التكافؤ؛ وكان نظام RAID-10 أسرع بكثير. يحتوي هذا الجهاز تحديدًا على معالج AMD A10 9700E رباعي النواة (يشير الحرف "E" إلى أنه نموذج موفر للطاقة بتردد منخفض، أي ليس فائق السرعة)، وذلك لإعطائك فكرة عما يمكن توقعه. مع محركات الأقراص التسعة سعة 8 تيرابايت في إعدادي، استغرقت عملية إعادة البناء الكاملة ما يزيد قليلاً عن 24 ساعة.

أثناء عملية إعادة البناء، يمكنك تثبيت نظام الملفات على المصفوفة واستخدامه كالمعتاد إذا رغبت، لكنني أفضل تأجيل ذلك حتى اكتمال عملية إعادة البناء. تذكر أنه في حال تعطل أحد الأقراص، قد يتعطل قرص آخر قريبًا، لذا من المهم إتمام عملية إعادة البناء بأسرع وقت ممكن لتجنب تعطل أي قرص آخر خلالها. لذلك، تجنب تحميلها بعمليات إدخال/إخراج غير ضرورية.

بعد الانتهاء، أضفها مرة أخرى إلى ملف /etc/fstab، وأعد تشغيل الجهاز واستمتع بملفاتك :-)

شارك على بلوسكايشارك على الفيسبوكشارك على لينكدإنشارك على تمبلرشارك على إكسشارك على لينكدإنثبت على بينتريست

ميكيل كريستنسن

عن المؤلف

ميكيل كريستنسن
ميكيل هو مؤسس ومالك موقع miklix.com. يتمتع بخبرة تزيد عن 20 عامًا كمبرمج كمبيوتر/مطور برامج محترف ويعمل حاليًا بدوام كامل في إحدى شركات تكنولوجيا المعلومات الأوروبية الكبرى. عندما لا يقوم بالتدوين، يقضي وقت فراغه في مجموعة واسعة من الاهتمامات والهوايات والأنشطة، والتي قد تنعكس إلى حد ما في تنوع الموضوعات التي يغطيها هذا الموقع.