Menggantikan Pemacu Gagal dalam Tatasusunan mdadm pada Ubuntu
Diterbitkan: 19 Mac 2025 pada 9:33:58 PTG UTC
Jika anda berada dalam situasi yang ditakuti mengalami kegagalan pemacu dalam tatasusunan RAID mdadm, artikel ini menerangkan cara untuk menggantikannya dengan betul pada sistem Ubuntu.
Replacing a Failed Drive in an mdadm Array on Ubuntu
Maklumat dalam pos ini berdasarkan Ubuntu 18.04 dan versi mdadm yang terdapat dalam repositorinya; pada masa penulisan v4.1-rc1. Ia mungkin sah atau tidak untuk versi lain.
Saya baru-baru ini mengalami kegagalan pemacu secara tiba-tiba dalam pelayan fail rumah saya, yang terdiri daripada sembilan pemacu dalam susunan mdadm RAID-6. Itu selalu menakutkan, tetapi saya bernasib baik dapat dengan cepat mencari pemacu pengganti yang dihantar pada keesokan harinya supaya saya dapat memulakan pembinaan semula.
Saya mengaku agak kedekut semasa saya pertama kali memasang pelayan fail tersebut; hanya dua daripada pemacu tersebut adalah pemacu NAS sebenar (Seagate IronWolf), manakala yang lain adalah pemacu desktop (Seagate Barracuda). Tidak mengejutkan, salah satu pemacu desktop yang rosak (setelah hampir tiga tahun berkhidmat, walau bagaimanapun). Ia benar-benar mati; setelah memindahkannya ke dalam tempat USB desktop, yang saya dapat darinya hanyalah bunyi klik yang menakutkan dan kedua-dua Ubuntu 20.04 dan Windows 10 tidak dapat mengesannya.
Ah well, mari ke bahagian pengganti (dan ya, pemacu baru yang saya beli adalah IronWolf, pengajaran yang dipelajari) - sebanyak mana pun menakutkan kehilangan pemacu dalam susunan yang sedang berjalan, lebih menakutkan jika anda tidak tahu prosedur yang betul untuk menggantikannya. Ini bukan kali pertama saya terpaksa menggantikan pemacu yang rosak dalam susunan mdadm, tetapi bernasib baik ia jarang berlaku sehingga saya biasanya perlu mencari perintah yang betul. Kali ini saya memutuskan untuk membuat panduan kecil saya sendiri untuk rujukan masa depan.
Jadi, pertama sekali, apabila anda menerima e-mel acara kegagalan yang ditakuti dari mdadm, anda perlu mengenal pasti pemacu yang mana yang rosak. Sudah tentu, ia akan memberitahu anda nama peranti (dalam kes saya /dev/sdf), tetapi mungkin tidak jelas pemacu fizikal yang mana sebenarnya kerana nama-nama tersebut boleh berubah apabila mesin dihidupkan.
Jika anda tidak pasti nama peranti yang mana yang rosak, anda boleh menggunakan perintah berikut untuk mengetahui (ganti /dev/md0 dengan peranti RAID anda):
Seperti yang disebutkan, dalam kes saya ia adalah /dev/sdf, jadi mari teruskan dengan itu.
Seterusnya, anda boleh cuba untuk mencari nombor siri pemacu yang rosak dengan mengeluarkan perintah ini:
(jika smartctl tidak dijumpai, anda perlu memasang pakej smartmontools pada Ubuntu)
Nombor siri tersebut boleh dibandingkan dengan nombor siri pada label fizikal pada pemacu untuk mengetahui yang mana yang rosak.
Kali ini, saya tidak begitu bernasib baik. Pemacu itu benar-benar mati dan bahkan menolak untuk memberikan data SMART atau data lain, termasuk nombor siri.
Oleh kerana saya mempunyai akses fizikal ke pelayan (yang anda benar-benar perlukan jika anda ingin menggantikan pemacu fizikal sendiri, saya rasa ;-)) dan pelayan itu sebenarnya berjalan ketika cakera rosak (dan terus berjalan dengan baik terima kasih kepada redundansi RAID-6), saya menggunakan kaedah yang sangat asas, tetapi sebenarnya sangat berkesan dan jelas, iaitu dengan hanya menyalin fail besar ke pelayan dan memerhatikan lampu HDD mana yang tidak berkelip. Dalam beberapa saat saya telah mengenal pasti pelakunya.
Sekarang, sebelum menarik keluar pemacu fizikal, adalah idea yang baik untuk memaklumkan secara rasmi kepada mdadm tentang niat ini, dengan mengeluarkan perintah ini (ganti nama peranti dengan yang anda miliki seperti yang sesuai):
Jika berjaya, mdadm akan membalas dengan mesej yang mengatakan bahawa ia telah "dikeluarkan panas" pemacu tersebut, nampaknya kerana peranti raid maya sebenarnya sedang berjalan pada masa itu.
Jika ia gagal dengan mesej ralat seperti "peranti atau sumber sibuk", mungkin mdadm sebenarnya tidak mendaftarkan pemacu untuk benar-benar rosak. Untuk memaksanya melakukannya, keluarkan perintah ini (sekali lagi, ingat untuk menggantikan nama peranti dengan yang anda miliki seperti yang sesuai):
Selepas itu, anda sepatutnya boleh mengeluarkan peranti dari susunan dengan perintah sebelumnya.
Sekarang tiba masanya untuk menggantikan pemacu tersebut. Jika anda benar-benar, benar-benar - seperti, benar-benar - pasti mesin dan pengawal anda menyokong pertukaran panas, anda boleh melakukannya tanpa mematikan mesin. Itu adalah cara terbaik untuk sistem pengeluaran kritikal yang berjalan pada perkakasan pelayan sebenar yang anda tahu pasti boleh menanganinya. Pelayan fail rumah saya berasaskan papan induk desktop kelas pengguna dengan beberapa pengawal SATA semi-nama dalam slot PCIe untuk menyediakan lebih banyak port SATA, walau bagaimanapun.
Walaupun SATA secara amnya sepatutnya menyokong pertukaran panas, saya tidak berani mengambil risiko apa-apa dalam persediaan ini, jadi saya memilih untuk mematikan mesin semasa menggantikan pemacu tersebut.
Sebelum melakukan itu, adalah idea yang baik untuk mengulas peranti raid dalam fail /etc/fstab supaya Ubuntu tidak cuba untuk memasangnya secara automatik pada but seterusnya, kerana ia mungkin tergantung dan memaksa anda masuk ke mod pemulihan disebabkan oleh array RAID yang terdegradasi. Itu mungkin bukan masalah besar jika ia adalah sistem desktop, tetapi saya menjalankan pelayan ini tanpa monitor atau papan kekunci disambungkan, jadi ini akan sedikit menyusahkan.
Selepas menghidupkan mesin dengan pemacu baru yang dipasang, gunakan lsblk atau cara lain untuk mengenal pasti pemacu tersebut. Jika anda tidak mengubah apa-apa yang lain, ia akan mungkin (tetapi tidak semestinya) mendapat nama yang sama seperti pemacu yang anda ganti. Dalam kes saya, ia melakukannya, jadi yang baru juga dipanggil /dev/sdf.
Oleh kerana array saya berdasarkan pada partition dan bukannya peranti fizikal, saya perlu menyalin jadual partition dari pemacu yang berfungsi ke pemacu baru untuk memastikan mereka sama. Jika anda menjalankan array anda pada peranti fizikal, anda boleh langkau langkah ini.
Saya menggunakan sgdisk untuk tujuan ini, menyalin jadual partition dari /dev/sdc ke /dev/sdf. Pastikan untuk menggantikan nama peranti untuk disesuaikan dengan yang anda miliki sesuai keperluan.
Perhatian pada urutan di sini: anda senaraikan pemacu "ke" terlebih dahulu! Ini agak bertentangan dengan intuisi saya, tetapi pastikan anda mendapatkannya dengan betul supaya anda tidak mengalami kegagalan pemacu lain dalam array ;-)
Kemudian untuk mengelakkan konflik UUID, hasilkan UUID baru untuk pemacu baru:
Dan kini akhirnya masa untuk menambah pemacu baru ke dalam array dan memulakan proses pembinaan semula! (Okay, ia bukan benar-benar pesta, sebenarnya ia adalah proses yang agak perlahan dan menegangkan kerana anda benar-benar, benar-benar tidak mahu pemacu lain gagal pada masa ini. Mungkin bir boleh membantu, walaupun)
Bagaimanapun, untuk menambah pemacu baru ke dalam array, jalankan arahan ini (sekali lagi, pastikan untuk menggantikan nama peranti dengan yang anda miliki sesuai keperluan):
Jika semuanya berjalan dengan baik, pemacu akan ditambah ke dalam array tanpa masalah. Saya percaya ia sebenarnya ditambah sebagai "hot spare" secara lalai, tetapi kerana array ini kekurangan satu cakera (yang gagal), ia akan segera digunakan dan proses pembinaan semula akan bermula.
Anda boleh memantau proses ini seperti berikut:
Ini mungkin mengambil masa yang agak lama; pada pelayan rendah saya (yang sebahagian besarnya berdasarkan perkakasan gred pengguna dan pemacu desktop, perlu diingat) ia dapat mencapai hampir 100 MB/sec. Ingat bahawa ini adalah RAID-6, jadi terdapat banyak pengiraan pariti yang terlibat dalam pembinaan semula; RAID-10 akan jauh lebih pantas. Mesin ini mempunyai CPU AMD A10 9700E quad core (huruf "E" bermaksud ia adalah model cekap tenaga yang under-clocked, iaitu tidak terlalu pantas), hanya untuk memberi anda gambaran tentang apa yang boleh dijangkakan. Dengan sembilan pemacu 8 TB dalam setup saya, pembinaan semula penuh mengambil masa lebih dari 24 jam.
Semasa pembinaan semula, anda boleh memasang sistem fail pada array dan menggunakannya seperti biasa jika anda mahu, tetapi saya lebih suka meninggalkannya untuk pembinaan semula sehingga selesai. Ingat bahawa jika satu pemacu gagal, yang lain mungkin akan mengikuti, jadi anda mahu pembinaan semula diselesaikan secepat mungkin kerana anda benar-benar tidak mahu pemacu lain gagal semasa itu. Oleh itu, jangan membebaninya dengan IO lain yang tidak diperlukan.
Setelah selesai, tambahkan semula ke dalam fail /etc/fstab anda, reboot dan nikmati fail anda :-)