جایگزینی درایو ناموفق در آرایه mdadm در اوبونتو
منتشر شده: ۱۵ فوریهٔ ۲۰۲۵ ساعت ۲۲:۰۳:۱۴ (UTC)
آخرین به روز رسانی: ۱۲ ژانویهٔ ۲۰۲۶ ساعت ۸:۵۰:۰۹ (UTC)
اگر در وضعیت وحشتناک خرابی درایو در آرایه RAID mdadm قرار دارید، این مقاله نحوه تعویض صحیح آن را در سیستم اوبونتو توضیح میدهد.
Replacing a Failed Drive in an mdadm Array on Ubuntu
اطلاعات موجود در این پست بر اساس اوبونتو ۱۸.۰۴ و نسخه mdadm موجود در مخازن آن است؛ در زمان نگارش این مطلب v4.1-rc1. ممکن است برای نسخههای دیگر معتبر باشد یا نباشد.
اخیراً در فایل سرور خانگیام که شامل نه درایو در یک آرایه RAID-6 از نوع mdadm است، دچار خرابی ناگهانی درایو شدم. این همیشه ترسناک است، اما خوشبختانه توانستم به سرعت یک درایو جایگزین تهیه کنم که روز بعد تحویل داده شد تا بتوانم بازسازی را شروع کنم.
باید اعتراف کنم که وقتی در ابتدا سرور فایل را راهاندازی کردم، کمی بیش از حد ارزان بودم؛ فقط دو تا از درایوها، درایوهای NAS واقعی (Seagate IronWolf) هستند، در حالی که بقیه درایوهای دسکتاپ (Seagate Barracuda) هستند. جای تعجب نیست که این یکی از درایوهای دسکتاپ بود که از کار افتاده بود (البته پس از تقریباً سه سال خدمت). کاملاً از کار افتاده بود؛ پس از انتقال آن به یک محفظه USB دسکتاپ، تنها چیزی که از آن نصیبم شد، صدای کلیک آزاردهندهای بود و نه اوبونتو 20.04 و نه ویندوز 10 قادر به شناسایی آن نبودند.
خب، حالا میرسیم به بخش تعویض (و بله، درایو جدیدی که خریدم یک IronWolf بود، درسی که گرفتم) - هر چقدر هم که از دست دادن یک درایو در یک آرایه در حال اجرا ترسناک باشد، اگر روش صحیح تعویض آن را ندانید، ترسناکتر هم میشود. این اولین باری نیست که مجبور میشوم یک درایو خراب را در یک آرایه mdadm تعویض کنم، اما خوشبختانه آنقدر نادر است که معمولاً باید به دنبال دستورات مناسب بگردم. این بار تصمیم گرفتم راهنمای کوچک خودم را برای مراجعه بعدی بنویسم.
بنابراین، اول از همه، وقتی ایمیل مربوط به رویداد خرابی را از mdadm دریافت میکنید، باید مشخص کنید که کدام درایو از کار افتاده است. مطمئناً، نام دستگاه (در مورد من /dev/sdf) را به شما میگوید، اما احتمالاً مشخص نیست که در واقع کدام درایو فیزیکی است زیرا این نامها میتوانند هنگام بوت شدن دستگاه تغییر کنند.
اگر حتی مطمئن نیستید که نام کدام دستگاه از کار افتاده است، میتوانید از دستور زیر برای فهمیدن آن استفاده کنید (به جای /dev/md0، نام دستگاه RAID خود را قرار دهید):
همانطور که گفته شد، در مورد من این /dev/sdf بود، بنابراین بیایید با همان ادامه دهیم.
سپس، میتوانید با اجرای این دستور، شماره سریال درایو خراب را پیدا کنید:
(اگر smartctl پیدا نشد، باید بسته smartmontools را در اوبونتو نصب کنید)
سپس میتوان شماره سریال را با شماره سریالهای روی برچسب فیزیکی درایوها مقایسه کرد تا مشخص شود کدام یک از آنها خراب شده است.
این بار، اما خیلی خوش شانس نبودم. درایو کاملاً از کار افتاده بود و حتی از ارائه SMART یا سایر دادهها، از جمله شماره سریال، خودداری میکرد.
از آنجایی که به سرور دسترسی فیزیکی داشتم (که اگر قرار است خودتان یک درایو فیزیکی را تعویض کنید، واقعاً به آن نیاز دارید ;-)) و وقتی دیسک از کار افتاد، سرور در حال اجرا بود (و به لطف افزونگی RAID-6 به خوبی به کار خود ادامه داد)، از روش بسیار ابتدایی، اما در واقع بسیار مؤثر و واضح کپی کردن یک فایل بزرگ به سرور و تماشای اینکه کدام چراغ HDD چشمک نمیزند، استفاده کردم. ظرف چند ثانیه مقصر را شناسایی کردم.
حالا، قبل از اینکه درایو فیزیکی را جدا کنید، بهتر است با صدور این دستور (به جای نام دستگاهها، نامهای خودتان را جایگزین کنید) رسماً mdadm را از این قصد مطلع کنید:
در صورت موفقیت، mdadm با پیامی مبنی بر اینکه درایو را "به طور کامل" حذف کرده است، پاسخ خواهد داد، ظاهراً به این دلیل که دستگاه حمله مجازی در آن زمان در حال اجرا بوده است.
اگر با پیام خطایی شبیه به "دستگاه یا منبع مشغول است" از کار افتاد، ممکن است mdadm در واقع درایو را برای از کار افتادن کامل ثبت نکرده باشد. برای انجام این کار، این دستور را اجرا کنید (باز هم، به یاد داشته باشید که نام دستگاهها را با نامهای خودتان در صورت لزوم جایگزین کنید):
پس از آن، باید بتوانید دستگاه را با دستور قبلی از آرایه حذف کنید.
حالا وقتشه که واقعاً درایو رو عوض کنید. اگه واقعاً، واقعاً - تقریباً، واقعاً - مطمئن هستید که دستگاه و کنترلر شما از قابلیت تعویض سریع (hot swapping) پشتیبانی میکنه، میتونید این کار رو بدون خاموش کردن دستگاه انجام بدید. این روش، روشی مناسب برای سیستمهای تولیدی حیاتی هست که روی سختافزار سرور واقعی و مناسبی کار میکنن که مطمئناً میدونید میتونه از پسش بربیاد. البته، سرور فایل خانگی من بر اساس یک مادربرد دسکتاپ رده مصرفکننده با چند کنترلر SATA نیمهنام در اسلاتهای PCIe هست تا پورتهای SATA بیشتری ارائه بده.
اگرچه SATA معمولاً باید از قابلیت تعویض در حین کار (hot swapping) پشتیبانی کند، اما من در این تنظیمات نمیخواستم ریسک کنم، بنابراین تصمیم گرفتم دستگاه را خاموش کنم و درایو را تعویض کنم.
قبل از انجام این کار، ایده خوبی است که دستگاه raid را در فایل /etc/fstab کامنت کنید تا اوبونتو سعی نکند آن را در بوت بعدی به طور خودکار نصب کند، زیرا ممکن است به دلیل آرایه RAID ضعیف، هنگ کند و شما را مجبور به رفتن به حالت ریکاوری کند. اگر سیستم دسکتاپ باشد، این ممکن است مشکل بزرگی نباشد، اما من این سرور را بدون اتصال مانیتور یا کیبورد به صورت Headless اجرا میکنم، بنابراین این کمی دردسرساز خواهد بود.
پس از بوت شدن دستگاه با درایو جدید و براق نصب شده، از lsblk یا روش دیگری برای شناسایی آن استفاده کنید. اگر چیز دیگری را تغییر نداده باشید، احتمالاً (اما نه لزوماً) نام درایو جایگزین شده را خواهد گرفت. در مورد من، این اتفاق افتاد، بنابراین درایو جدید نیز /dev/sdf نامیده میشود.
از آنجایی که آرایه من به جای دستگاههای فیزیکی، بر اساس پارتیشنها است، لازم بود جدول پارتیشن را از یک درایو فعال به درایو جدید کپی کنم تا مطمئن شوم که دقیقاً یکسان هستند. اگر آرایه خود را روی دستگاههای فیزیکی اجرا میکنید، میتوانید از این مرحله صرف نظر کنید.
من برای این منظور از sgdisk استفاده کردم و جدول پارتیشن را از /dev/sdc به /dev/sdf کپی کردم. حتماً نام دستگاهها را با نامهای خودتان جایگزین کنید.
به ترتیب اینجا توجه کنید: شما درایو "به" را اول لیست میکنید! این برای من کمی غیرمنطقی است، اما فقط مطمئن شوید که آن را درست انجام میدهید تا دوباره با خرابی درایو در آرایه مواجه نشوید ;-)
سپس برای جلوگیری از تداخل UUID، UUID های جدیدی برای درایو جدید ایجاد کنید:
و حالا بالاخره زمان آن رسیده که درایو جدید را به آرایه اضافه کنیم و بازسازی را شروع کنیم! (خب، این واقعاً یک مهمانی نیست، در واقع یک فرآیند کاملاً کند و نگرانکننده است زیرا شما واقعاً، واقعاً نمیخواهید در این زمان یک درایو دیگر از کار بیفتد. البته آبجو ممکن است کمک کند)
به هر حال، برای اضافه کردن درایو جدید به آرایه، این دستور را اجرا کنید (باز هم، مطمئن شوید که نام دستگاهها را با نام خودتان جایگزین میکنید):
اگر همه چیز خوب پیش برود، درایو بدون هیچ مشکلی به آرایه اضافه میشود. من معتقدم که در واقع به طور پیشفرض به عنوان "دیسک یدکی داغ" اضافه میشود، اما از آنجایی که این آرایه فاقد یک دیسک است (همان دیسکی که از کار افتاده است)، بلافاصله مورد استفاده قرار میگیرد و فرآیند بازسازی آغاز میشود.
میتوانید به این شکل آن را زیر نظر داشته باشید:
احتمالاً این کار کمی طول خواهد کشید؛ روی سرور سطح پایین من (که عمدتاً مبتنی بر سختافزارهای مصرفی و درایوهای دسکتاپ است، توجه داشته باشید) توانست به کمی کمتر از ۱۰۰ مگابایت در ثانیه برسد. به خاطر داشته باشید که این RAID-6 است، بنابراین محاسبات برابری زیادی در بازسازی دخیل است؛ یک RAID-10 بسیار سریعتر میبود. این دستگاه خاص دارای یک پردازنده چهار هستهای AMD A10 9700E است ("E" به این معنی است که یک مدل کممصرف با کلاک پایینتر است، یعنی خیلی سریع نیست)، فقط برای اینکه ایدهای از آنچه انتظار دارید به شما بدهم. با ۹ درایو ۸ ترابایتی در تنظیمات من، بازسازی کامل کمی بیش از ۲۴ ساعت طول کشید.
در طول بازسازی، میتوانید سیستم فایل را روی آرایه سوار کنید و در صورت تمایل مانند حالت عادی از آن استفاده کنید، اما من ترجیح میدهم این کار را تا زمان اتمام بازسازی به عهدهی خود بازسازی بگذارم. به خاطر داشته باشید که اگر یک درایو از کار بیفتد، ممکن است به زودی درایو دیگری نیز از کار بیفتد، بنابراین میخواهید بازسازی در سریعترین زمان ممکن انجام شود زیرا واقعاً نمیخواهید درایو دیگری در طول آن از کار بیفتد. بنابراین، آن را با ورودی/خروجیهای (IO) دیگری که کاملاً ضروری نیستند، سنگین نکنید.
پس از اتمام، آن را دوباره به فایل /etc/fstab خود اضافه کنید، سیستم را مجدداً راهاندازی کنید و از فایلهای خود لذت ببرید :-)
