Cara terbaik untuk mengembangkan perangkat lunak Linux RAID 1 ke RAID 10

22

mdadm tampaknya tidak mendukung pertumbuhan array dari level 1 ke level 10.

Saya memiliki dua disk di RAID 1. Saya ingin menambahkan dua disk baru dan mengubah array menjadi array disk 10 RAID.

Strategi saya saat ini:

  1. Buat cadangan yang bagus.
  2. Buat 4 disk RAID 10 disk terdegradasi dengan dua disk yang hilang.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove satu disk dari array RAID 1.
  5. Tambahkan disk yang tersedia ke array RAID 10 dan tunggu hingga sinkronisasi selesai.
  6. Hancurkan array RAID 1 dan tambahkan disk terakhir ke array RAID 10.

Masalahnya adalah kurangnya redundansi pada langkah 5.

Apakah ada cara yang lebih baik?

Hans Malherbe
sumber
5
Jangan lupa langkah 0. Buat cadangan yang bagus untuk semuanya.
Anthony Lewis
Saya yakin langkah Anda benar. Anda kehilangan redundansi selama periode Anda menyalin data dari satu set ke set lainnya.
Kevin Kuphal
Apakah mungkin untuk membuat RAID10 4Disk terdegradasi?
pauska
1
Ya, Anda hanya menggunakan "/ dev / hda missing / dev / hdb missing", karena jika tidak, Anda kehilangan satu pasangan dan semuanya berantakan. "Jawaban yang diterima" untuk pertanyaan ini, kebetulan, sepenuhnya salah dan tidak berfungsi.
womble
Saya juga mencari cara yang baik untuk melakukan ini, dan saya pikir metode yang dijelaskan dalam pertanyaan adalah yang terbaik yang saya temukan sejauh ini. Jawaban Mark Turner tidak membantu karena menciptakan larik 2 perangkat yang tidak dapat dibentuk ulang menjadi 4 perangkat (2 lainnya hanya dapat ditambahkan sebagai suku cadang). Dan jawaban Suresh Kumar sama dengan yang dijelaskan dalam pertanyaan, kecuali itu tidak akan bekerja persis seperti itu; perangkat yang hilang harus yang ke-2 dan ke-4, bukan ke-3 dan ke-4. Tentang langkah-langkah dalam pertanyaan: Saya pikir langkah 5 memiliki redundansi penuh, dan langkah 6 memiliki redundansi untuk setengah data. Saya benar-benar melihat langkah-langkah yang dinomori ulang
aditsu

Jawaban:

8

Dengan linux softraid Anda dapat membuat array RAID 10 hanya dengan dua disk.

Nama perangkat yang digunakan di bawah:

  • md0 adalah array tipe / level RAID1 yang lama.
  • md1 adalah array baru tipe / level RAID10.
  • sda1dan sdb2yang baru , partisi kosong (tanpa data).
  • sda2dan sdc1merupakan partisi lama (dengan data penting).

Ganti nama agar sesuai dengan kasus penggunaan Anda. Gunakan misalnya lsblkuntuk melihat tata letak Anda saat ini.

0) Cadangan, Cadangan, Cadangan, Cadangan oh, dan CADANGAN

1) Buat array baru (4 perangkat: 2 ada, 2 hilang):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Perhatikan bahwa dalam contoh ini tata letak sda1memiliki rekanan yang hilang dan sdb2memiliki rekanan lain yang hilang. Data Anda pada saat md1ini tidak aman (efektifnya RAID0 sampai Anda menambahkan anggota yang hilang).

Untuk melihat tata letak dan detail lain dari penggunaan array yang dibuat:

mdadm -D /dev/md1

Catatan! Anda harus menyimpan tata letak array:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2) Format dan mount. The /dev/md1harus segera digunakan, tapi perlu diformat dan kemudian dipasang.

3) Salin file. Gunakan misalnya rsync untuk menyalin data dari RAID 1 lama ke RAID 10. yang baru (ini hanya sebuah contoh perintah, bacalah halaman manual untuk rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Gagal bagian pertama RAID1 lama (md0), dan tambahkan ke RAID10 baru (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

Catatan! Ini akan menghapus data dari sda2. The md0masih harus dapat digunakan tetapi hanya jika anggota raid lain adalah sepenuhnya operasional.

Perhatikan juga bahwa ini akan memulai proses sinkronisasi / pemulihan md1. Untuk memeriksa status, gunakan salah satu dari perintah di bawah ini:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

Tunggu sampai pemulihan selesai.

5) Instal GRUB pada Array baru (Anggap Anda booting darinya). Beberapa CD cadangan / boot Linux berfungsi paling baik.

6) Boot pada array baru. JIKA BEKERJA DENGAN BENAR Hancurkan array lama dan tambahkan disk yang tersisa ke array baru.

TITIK TANPA PENGEMBALIAN

Pada titik ini Anda akan memusnahkan data pada anggota terakhir dari array md0 lama. Pastikan benar semuanya bekerja.

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

Dan lagi - tunggu sampai pemulihan aktif md1.

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7) Perbarui konfigurasi mdadm

Ingatlah untuk memperbarui /etc/mdadm/mdadm.conf(menghapus md0).

Dan simpan config ke initramfs (tersedia setelah reboot)

update-initramfs -u
Mark Turner
sumber
1
Di mana empat disk itu masuk?
womble
Eh? Saya jelas menyatakan untuk membuat array dengan 2 disk, menyalin data, gagal raid 1 dengan menghapus satu disk, menambahkan disk ke RAID10, kemudian boot ke RAID10, jika berhasil, hancurkan RAID1 dan pindahkan disk terakhir ke RAID baru ....
Mark Turner
4
Anda mengedit jawaban Anda setelah komentar saya. Juga, prosedur Anda memberikan RAID-10 dua disk dengan dua suku cadang ... bukan RAID-10 empat disk. Volume RAID-10 juga tidak dapat dibentuk ulang.
womble
2
Saya menjalankan perintah seperti yang Anda berikan, dan saya berakhir dengan dua disk RAID-10 dengan dua suku cadang, seperti yang ditunjukkan oleh / proc / mdstat. Ini ada di kernel 2.6.30, dengan mdadm v2.6.7.2.
womble
3
"mdadm: raid10 array / dev / md1 tidak dapat dibentuk kembali." Ini juga disebutkan di halaman mdadm.
womble
9

Ikuti prosedur yang sama dengan Mark Turner tetapi ketika Anda membuat array serangan, sebutkan 2 disk yang hilang

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

Dan kemudian lanjutkan dengan langkah-langkah lain.

Singkatnya, buat RAID10 dengan total 4 disk (dari yang 2 hilang), sinkronisasi ulang, tambahkan dua disk lain setelah itu.

Sam Whited
sumber
6

Baru saja selesai beralih dari LVM pada dua disk 2TB mdadm RAID 1 ke LVM pada empat disk RAID 10 (dua asli + dua disk baru).

Seperti @aditsu mencatat urutan drive penting ketika membuat array.

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

Kode di atas memberikan array yang dapat digunakan dengan dua disk yang hilang (tambahkan nomor partisi jika Anda tidak menggunakan seluruh disk). Segera setelah disk ketiga ditambahkan, disk akan mulai disinkronkan. Saya menambahkan disk keempat sebelum sinkronisasi selesai ketiga. Itu ditampilkan sebagai cadangan sampai disk ketiga selesai kemudian mulai disinkronkan.

Langkah-langkah untuk situasi saya:

  1. Buat cadangan yang bagus.

  2. Buat array RAID 10 disk 4 yang terdegradasi dengan dua disk yang hilang (kami akan memanggil disk yang hilang # 2 dan 4).

  3. Katakan pada istri untuk tidak mengubah / menambahkan file yang dia pedulikan

  4. Gagal dan hapus satu disk dari array RAID 1 (disk 4).

  5. Pindahkan ekstensi fisik dari array RAID 1 ke array RAID 10 meninggalkan disk 2 kosong.

  6. Bunuh array RAID 1 yang aktif, tambahkan disk yang sekarang kosong (disk 2) ke array RAID 10, dan tunggu sampai sinkronisasi selesai.

  7. Tambahkan disk pertama yang dihapus dari RAID 1 (disk 4) ke array RAID 10.

  8. Beri istri maju.

Pada langkah 7 saya pikir drive 1, 2, OR 4 dapat gagal (selama sinkronisasi disk 4) tanpa mematikan array. Jika drive 3 gagal, data pada array bersulang.

pengguna75601
sumber
+1, terutama untuk langkah 3;)
-1, instruksi tidak jelas, tidak punya istri, kehilangan data saya
ZAB
1

Saya telah memindahkan raid1 saya ke raid10 sekarang dan sementara halaman ini membantu saya tetapi ada beberapa hal yang hilang dalam jawaban di atas. Terutama tujuan saya adalah untuk menjaga waktu kelahiran ext4.

pengaturannya adalah:

  • 2 raid1 disk masing-masing jenis msdos dan md0 dengan partisi ext4 dan mbr dengan msdos
  • 2 disk baru yang baru menjadi pendahuluan baru (semua ukuran sama)
  • menghasilkan 4 disk raid md127 ext4 tetapi karena ukuran saya harus beralih dari mbr ke gpt
  • ini adalah disk rumah saya, jadi tidak ada pengaturan bootmanager yang diperlukan atau dimaksudkan
  • menggunakan ubuntu sehari-hari saya (jadi: tidak menggunakan disk penyelamat eksternal)
  • menggunakan gparted, dd dan mdadm

seperti orang lain katakan sebelumnya: langkah nol harus menjadi cadangan dan selalu bisa terjadi kesalahan dalam proses yang menghasilkan dataloss ekstrim

  1. CADANGAN

  2. pengaturan serangan baru

    1. buat razia baru

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (Saya menemukan bahwa tata letak itu penting .. ke-2 dan ke-4 tampaknya merupakan duplikat dalam serangan 'dekat' default)

    2. mengatur partisi raid saya menggunakan gparted pengaturan gpt pada md127 dan kemudian menambahkan partisi baru (ext4) dengan ukuran yang lama atau lebih besar
  3. migrasi

    1. sekarang mendapatkan data lebih dari ... saya pertama kali mencoba menggunakan rsync yang berhasil tetapi gagal untuk menjaga waktu lahir ... gunakan dd untuk mengkloning dari serangan lama ke yang baru

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      TUNGGU ITU
      Anda dapat memeriksa dengan mengirim USR1 ke proses itu

      kill -s USR1 <pid>
      
    2. memperbaiki raid
      gparted adalah alat yang hebat: Anda menyuruhnya untuk memeriksa & memperbaiki partisi dan mengubah ukurannya ke ukuran penuh dari disk itu hanya dengan beberapa mouseclicks;)

    3. atur uuid baru ke partisi itu dan perbarui fstab Anda dengannya (ubah uuid)

    4. simpan seranganmu di conf

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      dan hapus yang lama

      vim /etc/mdadm/mdadm.conf 
      
    5. reboot jika Anda tidak berada pada sistem cadangan
  4. menghancurkan yang lama

    1. gagal yang pertama dan tambahkan ke serangan baru

      mdadm /dev/md0 --fail /dev/sdc1 --remove /dev/sdc1
      

      kemudian buat gpt di perangkat itu dan atur partisi kosong baru

      mdadm /dev/md127 --add /dev/sdc1
      

      TUNGGU ITU
      Anda dapat memeriksa

      cat /proc/mdstat
      
    2. hentikan yang kedua

      mdadm --stop /dev/md0 
      

      lalu buat gpt di perangkat terakhir itu dan atur lagi partisi kosong

      mdadm /dev/md127 --add /dev/sdd1
      

      TUNGGU ITU lagi

Summer-Sky
sumber
0

Saya melakukannya dengan LVM. Konfigurasi awal: - sda2, sdb2 - dan dibuat raid1 md1 di atas. sda1 dan sdb1 digunakan untuk raid1 kedua untuk / partisi boot. - md1 adalah pv dalam ruang grup volume, dengan beberapa lvm ada di dalamnya.

Saya telah menambahkan disk sdc dan sdd dan membuat partisi di sana seperti pada sda / sdb.

Begitu:

  1. membuat md10 sebagai:

    mdadm --create / dev / md10 --level raid10 --raid-devices = 4 / dev / sdc2 hilang / dev / sdd2

  2. memperpanjang vg di atasnya:

    pvcreate / dev / md10 vgextend space / dev / md10

  3. memindahkan volume dari md1 ke md10:

    pvmove -v / dev / md1 / dev / md10

(tunggu sampai selesai) 4. kurangi grup volume:

vgreduce space /dev/md1
pvremove /dev/md1
  1. hentikan array md1:

    mdadm -S / dev / md1

  2. tambahkan disk dari md1 lama ke md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. perbarui konfigurasi di /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(dan hapus md1 tua di sana)

Semuanya dilakukan pada sistem live, dengan volume aktif yang digunakan untuk kvm;)

undefine
sumber