Menggunakan mdadm 3.3
Sejak mdadm
3.3 (dirilis 2013, Sep 3), jika Anda memiliki kernel 3.2+, Anda dapat melanjutkan sebagai berikut:
# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1
sdd1
adalah perangkat yang ingin Anda ganti, sdc1
adalah perangkat pilihan untuk melakukannya dan harus dinyatakan sebagai cadangan di array Anda.
--with
opsi bersifat opsional, jika tidak ditentukan, suku cadang apa pun yang tersedia akan digunakan.
Versi mdadm lama
Catatan:Anda masih membutuhkan kernel 3.2+.
Pertama, tambahkan drive baru sebagai cadangan (ganti md0
dan sdc1
dengan RAID dan perangkat disk Anda masing-masing):
# mdadm /dev/md0 --add /dev/sdc1
Kemudian, mulai operasi salin-ganti seperti ini (sdd1
menjadi perangkat yang gagal):
# echo want_replacement > /sys/block/md0/md/dev-sdd1/state
Hasil
Sistem akan menyalin semua blok yang dapat dibaca dari sdd1
ke sdc1
. Jika sampai pada blok yang tidak dapat dibaca, itu akan merekonstruksinya dari paritas. Setelah operasi selesai, bekas cadangan (di sini:sdc1
) akan menjadi aktif, dan drive yang gagal akan ditandai sebagai gagal (F) sehingga Anda dapat menghapusnya.
Catatan: kredit masuk ke frostschutz dan Ansgar Esztermann yang menemukan solusi asli (lihat pertanyaan rangkap).
Kernel lama
Jawaban lain menyarankan:
- Joni pendekatannya:ubah larik ke RAID6, "ganti" disk, lalu kembali ke RAID5,
- Hauke Laging pendekatannya:hapus sebentar disk dari larik RAID5, jadikan itu bagian dari RAID1 (mirror) dengan disk baru dan tambahkan drive cermin itu kembali ke larik RAID5 (teoretis)...
Jika Anda tidak keberatan menjalankan RAID-6 (2 disk paritas daripada 1), dan jika Anda menjalankan mdadmin 3.1.x atau lebih tinggi, Anda dapat mengonversi larik RAID-5 ke RAID-6 untuk menambahkan disk paritas tambahan . Ini akan menempatkan array di bawah tekanan selama pembangunan kembali. Dan ini memiliki beberapa implikasi kinerja karena ada lebih banyak disk paritas untuk diperbarui selama penulisan.
Tetapi jika berhasil diselesaikan, maka Anda dapat menyimpan disk Anda yang gagal dan ketika akhirnya gagal, Anda masih memiliki perlindungan paritas untuk larik. Saya rasa Anda dapat mengonversi larik dari RAID6 kembali ke RAID5 jika Anda tidak menunggu untuk menyimpannya sebagai RAID6.
Saya tidak tahu cara online untuk menyimpan array sebagai RAID-5 dan mengganti disk tanpa meletakkan array dalam mode terdegradasi, karena menurut saya Anda harus menandainya sebagai gagal menggantinya. Ide penyalinan dd Anda mungkin merupakan cara untuk melakukannya.
Ini mungkin memenuhi persyaratan
- online
- jangan menekankan disk apa pun kecuali disk yang akan diganti
Tetapi bahkan jika yang berikut ini berhasil, Anda mungkin tidak akan menemukan rekomendasi semacam itu "di buku"...
Ide:
- Keluarkan disk OLD dari array (sebentar):
mdadm --manage /dev/raid5 --fail /dev/OLD
- Buat perangkat md baru (RAID-1) dari disk LAMA dan BARU:
mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
- Masukkan kembali RAID-1 ke dalam larik (bukan /dev/OLD):
mdadm --manage /dev/raid5 --re-add /dev/md42
Apa harus :-) terjadi:
- RAID-5 membuat /dev/md42 sinkron. Ini seharusnya tidak memakan waktu lama.
- RAID-5 biasanya beroperasi kembali (namun lebih lambat).
- /dev/NEW disinkronkan dengan /dev/OLD.
Perhatikan kemajuan sinkronisasi (cat /proc/mdstat
atau mdadm --monitor
). Jika sinkronisasi selesai keluarkan RAID-1 dari RAID-5, hentikan RAID-1, tambahkan kembali /dev/NEW ke RAID-5. Jika semuanya baik-baik saja, timpa superblok mdraid di /dev/OLD untuk menghindari masalah:mdadm --zero-superblock
Peringatan: Sinkronisasi RAID-5 yang cepat hanya dapat berfungsi jika Anda menggunakan bitmap. Jika Anda tidak memilikinya, lebih baik lakukan pengujian dengan dummy RAID-5 (tanpa bitmap) terlebih dahulu. Atau tambahkan satu. Setidaknya menambahkan yang eksternal harus dimungkinkan. Jika tidak, mungkin perlu menghentikan RAID-5 sebelum mengganti perangkat. Namun, jika Anda mem-boot dari RAID-5, ini akan menjadi sedikit rumit.