Dapatkah saya membuat perangkat lunak RAID 1 dengan satu perangkat


20

Saya memiliki satu disk yang ingin saya buat mirrornya; sebut saja disk ini sda. Saya baru saja membeli disk berukuran identik lainnya, yang dapat kita sebut sdb. sdadan sdbmemiliki satu partisi yang dipanggil sda1dan sdb1masing - masing.

Saat membuat serangan, saya tidak ingin menghapus sdapembersihan saya dan mulai lagi, saya hanya ingin mulai mirroring dengan sdb. Cara berpikir saya adalah:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... untuk membuat array tanpa sdbdisk, kemudian jalankan sesuatu seperti (Saya sedang memikirkan perintah berikut dengan keras, karena saya tidak yakin bagaimana mencapai langkah ini)

mdadm /dev/md0 --add /dev/sdb1

Catatan sdb1diasumsikan diformat mirip dengansda1

Apakah ini mungkin?


Ya kamu bisa. Tidak semudah itu --add, dan Anda harus berhati-hati, tetapi tidak terlalu rumit. Lihat Bagaimana cara mengatur mirroring disk di Ubuntu? (Saya tidak bisa mengajukan pertanyaan itu sebagai duplikat karena aturan baru.)
Gilles 'SO- stop being evil'

Jawaban:


28

Jawaban sederhana untuk pertanyaan dalam judul adalah "Ya". Tetapi apa yang benar-benar ingin Anda lakukan adalah langkah selanjutnya, yaitu membuat data yang ada dicerminkan.

Dimungkinkan untuk mengonversi disk yang ada, tetapi berisiko, seperti disebutkan, karena lokasi metadata. Jauh lebih baik untuk membuat cermin kosong (rusak) dengan disk baru dan menyalin data yang ada ke dalamnya. Kemudian, jika tidak berhasil, Anda cukup boot kembali ke sumber asli yang tidak dicerminkan.

Pertama, inisialisasi /dev/sdb1sebagai yang baru /dev/md0dengan drive yang hilang dan inisialisasi sistem file (saya anggap ext3, tetapi pilihan ada di tangan Anda)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Sekarang, /dev/sda1kemungkinan besar sistem file root Anda ( /) jadi untuk keselamatan Anda harus melakukan langkah selanjutnya dari live CD, disk penyelamatan atau sistem bootable lainnya yang dapat mengakses keduanya /dev/sda1dan /dev/md0meskipun saya telah berhasil melakukan ini dengan beralih ke mode pengguna tunggal.

Salin seluruh konten sistem file /dev/sda1ke /dev/md0. Sebagai contoh:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Edit /etc/fstabatau pastikan bahwa pada boot berikutnya, /dev/md0sudah terpasang bukan /dev/sda1. Sistem Anda mungkin diatur untuk boot dari /dev/sda1dan parameter boot mungkin menentukan ini sebagai perangkat root, jadi ketika me-reboot Anda harus secara manual mengubah ini sehingga root adalah /dev/md0(dengan asumsi /dev/sda1root). Setelah reboot, periksa bahwa /dev/md0sekarang sudah terpasang ( df) dan itu sedang berjalan sebagai cermin terdegradasi ( cat /proc/mdstat). Tambahkan /dev/sda1ke array:

mdadm /dev/md0 --add /dev/sda1

Karena pembangunan kembali akan menimpa /dev/sda1, versi metadata yang Anda gunakan tidak relevan. Seperti biasa ketika membuat perubahan besar, buat cadangan penuh (jika mungkin) atau setidaknya pastikan bahwa apa pun yang tidak dapat dibuat kembali aman.

Anda perlu membuat ulang konfigurasi boot untuk digunakan /dev/md0sebagai root (jika /dev/sda1sudah root) dan mungkin perlu dibuat ulang mdadm.confuntuk memastikan /dev/md0selalu dimulai.


Sempurna persis apa yang saya butuhkan: D
whoami

2
Jangan gunakan cpuntuk menyalin sistem file, Anda akan kehilangan beberapa hal seperti tautan keras, atribut tambahan ... Gunakan taratau rsyncdengan opsi yang tepat. Saat mem-boot Live CD, berhati-hatilah karena pemetaan pengguna-uid berbeda (lihat opsi --numeric-pemilik tar / rsync). Lihat juga clone2fs untuk kloning sistem file extx.
Stéphane Chazelas

1
Opsi untuk cpmenangani link pelestarian (-d), mode, kepemilikan, dan cap waktu (-p), melakukannya secara rekursif (-R) dan tetap menggunakan satu sistem file (-x), tapi saya pikir Anda mungkin benar tentang tautan keras dan diperluas atribut.
StarNamer

rsync -aH --delete /mnt/olddisk/ /mnt/newarray/adalah pilihan yang bagus. Tambahkan -vih --progressjika Anda ingin benar-benar melihat apa yang dilakukannya.
rudolfbyker

4

Tentu, Anda dapat membuatnya dengan menetapkan bahwa disk kedua saat ini missing:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1

Manis terima kasih, saya mungkin OCD di sini, tetapi apakah ada alasan mengapa Anda menambahkan yang hilang sebelum / dev / sda1, apakah urutannya penting?
whoami

Saya pikir urutannya tidak masalah.
eppesuig

3
Hati-hati dengan itu! dengan --metadata = 1.2 (default baru), RAID metadata (1MB) akan dimasukkan di awal (menimpa konten di sana). Dan awal dari array md akan mulai 1MB di dalam / dev / sda1 (/ dev / md0 akan menjadi 1MB lebih pendek dari / dev / sda1). Dengan metadata = 0,9 (default lama), metadata (64kB) akan dimasukkan pada akhirnya mengesampingkan apa yang ada. Jadi gunakan --metadata = 0.9 dan ubah ukuran FS terlebih dahulu. Apa pun yang Anda lakukan, ambil cadangan sebelumnya.
Stéphane Chazelas

3

Kamu bisa melakukannya. Anda perlu sedikit berhati-hati, tetapi ini tidak berbahaya ¹ jika Anda sangat berhati-hati untuk tidak salah ketik dan tidak meninggalkan gotcha dalam pengaturan.

Saya sangat merekomendasikan untuk tidak melakukan manipulasi pada sistem live. Mungkin saja dalam beberapa kasus tetapi membutuhkan perawatan ekstra. Boot dari liveCD / liveUSB seperti Parted atau SystemRescueCD .

Pertama, Anda perlu mengecilkan volume sedikit, untuk memberikan ruang bagi metadata mdraid (superblok). Ada beberapa format metadata , Anda harus menggunakan salah satu yang menempatkan metadata di akhir disk. (Dalam beberapa pengaturan, Anda mungkin memiliki cukup ruang untuk meletakkan superblok di awal, tapi itu lebih rumit dan rawan risiko jadi saya membahasnya.)

Anda harus memastikan bahwa 128kB terakhir dari perangkat blok tidak digunakan, untuk memberikan ruang bagi superblock. Jadi, Anda harus menyusutkan sistem file /dev/sda1. Jika ini adalah filesystem ext2 / ext3 / ext4, dapatkan ukuran filesystem saat ini tune2fs /dev/sda1, kemudian jalankan di resize2fs /dev/sda1 NNNmana NNN adalah ukuran minus 128kB. Anda dapat melakukan ini dengan Berpisah sebagai gantinya. Jika Anda perlu mengecilkan sistem file extN, Anda harus melepasnya terlebih dahulu; sistem file btrfs dapat menyusut langsung.

Setelah Anda memastikan bahwa 128kB terakhir dari perangkat blok gratis, panggil mdadm --createuntuk membuat volume RAID-1. Ini tidak menyentuh bagian volume apa pun selain dari superblok. Awalnya, volume akan memiliki komponen tunggal: semua yang lain ditetapkan sebagai gagal. Anda harus lulus --level=1(atau setara -n 1) (pendekatan ini hanya berfungsi untuk RAID-1) dan --metadata=0.9atau --metadata=1.0(format superblok default 1.2 menempatkan superblock dekat bagian awal perangkat, yang dapat menimpa data). Argumen untuk --raid-devices( -n) adalah jumlah komponen (termasuk yang hilang) dalam volume RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Anda sekarang dapat mengaktifkan array dan menambahkan komponen lain.

mdadm --add /dev/md0 /dev/sdb1

Catatan tentang bootloader: Grub2 memahami Linux RAID-1 dan dapat mem-boot darinya. Bootloader seperti Grub1 yang tidak mengerti RAID membaca secara transparan dari volume mirror, tetapi sistem Anda tidak akan boot jika drive bootloader gagal dibaca. Jika volume RAID ada di partisi, pastikan untuk menginstal sektor boot Grub di kedua drive.

¹ Pastikan memiliki cadangan. “Tidak berbahaya” berarti “Anda mungkin tidak akan membutuhkannya”, bukan “mempertaruhkan data Anda”.

Mem-posting ulang dan sedikit diadaptasi dari Cara mengatur mirroring disk (RAID-1)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.