Linux yazılımını büyütmenin en iyi yolu RAID 1 - RAID 10


22

mdadm dizi 1'den seviye 10'a kadar bir dizi büyümesini desteklemiyor gibi görünüyor.

RAID 1'de iki diskim var. İki yeni disk eklemek ve diziyi dört diskli RAID 10 dizisine dönüştürmek istiyorum.

Mevcut stratejim:

  1. İyi yedekleme yapın.
  2. İki eksik diski olan, düşürülmüş bir 4 disk RAID 10 dizisi oluşturun.
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove RAID 1 dizisinden bir disk.
  5. Kullanılabilir diski RAID 10 dizisine ekleyin ve yeniden senkronizasyonun tamamlanmasını bekleyin.
  6. RAID 1 dizisini yok edin ve son diski RAID 10 dizisine ekleyin.

Sorun, 5. adımda fazlalık bulunmamasıdır.

Daha iyi bir yolu var mı?


5
0 adımını unutmayın. Her şeyi iyi bir şekilde yedekleyin.
Anthony Lewis,

Adımlarının doğru olduğuna inanıyorum. Verileri bir kümeden diğerine kopyaladığınız süre boyunca artıklığı kaybedersiniz.
Kevin Kuphal

Bozulmuş bir 4disk RAID10 oluşturmak mümkün mü?
pauska

1
Evet, sadece "/ dev / hda eksik / dev / hdb eksik" i kullanırsınız, çünkü aksi halde bir çiftin tamamını kaybedersiniz ve hepsi dağılır. Bu soru için "kabul edilen cevap", tesadüfen, tamamen yanlıştır ve işe yaramaz.
womble

Ayrıca bunu yapmanın iyi bir yolunu arıyorum ve sanırım soruda açıklanan yöntem şu ana kadar bulduğum en iyisi. Mark Turner'ın cevabı, 4 cihaza yeniden şekillendirilemeyen 2 cihazlı bir dizi oluşturduğu için yardımcı olmaz (diğer 2 sadece yedek olarak eklenebilir). Ve Suresh Kumar'ın cevabı, tam olarak bu şekilde çalışmaz; eksik olan cihazların 3. ve 4. değil, 2. ve 4. olması gerekir. Sorudaki adımlar hakkında: 5. adımda tam yedeklilik olduğunu ve 6. adımda verilerin yarısı için artıklık olduğunu düşünüyorum. Aslında adımların yeniden yapıldığını görüyorum
aditsu

Yanıtlar:


8

Linux softraid ile sadece iki diskli bir RAID 10 dizisi yapabilirsiniz.

Aşağıda kullanılan cihaz adları:

  • md0 RAID1 türünün / düzeyinin eski dizisidir.
  • md1 RAID10 tür / düzey yeni dizisidir.
  • sda1ve sdb2olan yeni (veriler olmadan), boş bölümleri.
  • sda2ve sdc1eski bölümlerdir (önemli verilerle).

Kullanım durumunuza uyması için adları değiştirin. lsblkMevcut düzeninizi görüntülemek için örneğin kullanın .

0) Yedekleme, Yedekleme, Yedekleme, Yedekleme ve YEDEKLEME

1) Yeni dizi oluşturun (4 cihaz: 2 mevcut, 2 eksik):

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

Bu örnekte mizanpajın sda1eksik bir meslektaşı ve sdb2başka bir eksik meslektaşı olduğuna dikkat edin . md1Bu noktada verileriniz güvenli değil (etkin bir şekilde eksik üyeler ekleyene kadar RAID0'dır).

Düzen ve oluşturulan dizi kullanımının diğer ayrıntılarını görüntülemek için:

mdadm -D /dev/md1

Not! Dizinin düzenini kaydetmelisiniz:

# 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) Biçimlendirin ve monte edin. /dev/md1Hemen kullanılabilir olmalı, ama ihtiyaç biçimlendirilmiş ve sonra monte edilecek.

3) Dosyaları kopyalayın. Verileri eski RAID 1'den yeni RAID 10'a kopyalamak için örn. Rsync kullanın.

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

4) Eski RAID1'in (md0) ilk bölümünde başarısız olun ve yeni RAID10'a (md1) ekleyin.

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

Not! Bu verileri silecektir sda2. md0Hala kullanılabilir olmalı ama sadece diğer baskın üyesi tam olarak faaliyete oldu.

Ayrıca bunun senkronizasyon / kurtarma işlemlerine başlayacağını da unutmayın md1. Durumu kontrol etmek için aşağıdaki komutlardan birini kullanın:

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

Kurtarma bitene kadar bekleyin .

5) GRUB'u yeni Diziye kurun (Ondan başlattığınızı varsayarsak). Bazı Linux kurtarma / önyükleme CD'leri en iyi şekilde çalışır.

6) Yeni dizide önyükleme yapın. DOĞRU ÇALIŞIRsa Eski diziyi imha edin ve kalan diski yeni diziye ekleyin.

DÖNÜŞÜ OLMAYAN NOKTA

Bu noktada, eski md0 dizisinin son üyesindeki verileri imha edeceksiniz. Her şeyin çalıştığından kesinlikle emin olun.

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

Ve tekrar - kurtarma bitene kadar bekleyinmd1 .

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

7) Güncelleme mdadm config

Güncellemeyi unutmayın /etc/mdadm/mdadm.conf(md0'ı kaldırın).

Ve config'i initramfs dosyasına kaydedin (yeniden başlattıktan sonra erişilebilir olması için)

update-initramfs -u

1
Dört disk nereden geliyor?
womble

Eh? Diziyi 2 diskli olarak oluşturmayı, verileri kopyalamayı, baskın 1'i bir diski sökerek bırakmayı, bu diski RAID10'a eklemeyi, ardından RAID10'a önyüklemeyi, eğer çalıştıysa RAID1'i yok etmeyi ve son diski hareket ettirmeyi açıkça belirtiyorum. yeni RAID ....
Mark Turner

4
Cevabımı yorumumdan sonra düzenlediniz. Ayrıca, işleminiz iki diske sahip iki diskli bir RAID-10 veriyor ... neredeyse dört diskli RAID-10. RAID-10 birimleri de yeniden şekillendirilemez.
womble

2
Komutları sizin verdiğiniz şekilde çalıştırdım ve / proc / mdstat ile gösterildiği gibi iki diskli iki diskli bir RAID-10 kullanıyorum. Bu, sürüm 2.6.30'da, mdadm v2.6.7.2 ile birlikte.
womble

3
"mdadm: raid10 array / dev / md1 yeniden şekillendirilemez." Bu ayrıca mdadm kılavuzunda da belirtilmiştir.
womble

9

Mark Turner ile aynı prosedürü uygulayın ancak bir baskın dizisi oluşturduğunuzda, 2 kayıp diski söyleyin

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

Sonra diğer adımlarla devam edin.

Kısacası, toplam 4 diski olan RAID10'u oluşturun (bunlardan 2'si eksik), resync, ondan sonra diğer iki diski ekleyin.


6

İki 2TB disk mdadm RAID 1'deki LVM'den dört disk RAID 10'daki (iki orijinal + iki yeni disk) LVM'ye geçmeyi yeni bitirdim.

@Aditsu'da belirtildiği gibi, diziyi oluştururken sürücü sırası önemlidir.

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

Yukarıdaki kod iki eksik diske sahip kullanılabilir bir dizi verir (tüm diskleri kullanmıyorsanız bölüm numaraları ekleyin). Üçüncü disk eklendiğinde, senkronizasyona başlayacaktır. Üçüncü senkronizasyondan önce dördüncü diski ekledim. Üçüncü disk bitene kadar yedek olarak gösterildi ve sonra senkronizasyona başladı.

Durumum için adımlar:

  1. İyi yedekleme yapın.

  2. İki eksik diske sahip düşürülmüş bir 4 disk RAID 10 dizisi oluşturun (eksik diskleri # 2 ve 4 olarak adlandırırız).

  3. Karısına, ilgilendiği dosyaları değiştirmemesini / eklememesini söyle

  4. Bir diski RAID 1 dizisinden arın ve çıkarın (disk 4).

  5. Disk 2'yi boş bırakarak fiziksel uzantıları RAID 1 dizisinden RAID 10 dizisine taşıyın.

  6. Etkin RAID 1 dizisini öldürün, şimdi boş diski (disk 2) RAID 10 dizisine ekleyin ve resync'in tamamlanmasını bekleyin.

  7. RAID 1'den (disk 4) çıkartılan ilk diski RAID 10 dizisine ekleyin.

  8. Karıma devam et.

7. adımda, sürücü 1, 2, OR 4'ün diziyi öldürmeden (disk 4'ün yeniden senkronizasyonu sırasında) başarısız olabileceğini düşünüyorum . Sürücü 3 başarısız olursa dizideki veriler tost olur.


+1, özellikle 3. adım için;)

-1, talimat belli değil, karım yok, verilerimi kaybettim
ZAB

1

Şimdi baskınımı1 baskın10'a taşımıştım ve bu sayfa bana yardımcı olurken yukarıdaki cevaplarda eksik olan bazı şeyler var. Özellikle amacım ext4 doğum saatlerini tutmaktı.

kurulum şuydu:

  • Her biri msdos ve md0 tipinde ext4 bölmeli 2 adet baskın ve msdos ile mbr
  • 2 yeni yeni disk, yeni birinciller haline geliyor (hepsi aynı boyutta)
  • Bir 4 diskler baskını md127 ext4'te fakat boyutuna çıkan i geçmek zorunda gpt için mbr
  • benim kendi ev diskim, bu yüzden hiçbir önyükleme yöneticisi kurulumu gerekli veya amaçlanmamış
  • benim günlük ubuntu'umu kullanmak (yani: harici kurtarma diskini kullanmamak)
  • gparted, dd ve mdadm kullanarak

Daha önce de belirtildiği gibi: sıfır adım yedeklenmeli ve aşırı veri kaybına neden olan işlemde her zaman yanlış bir şeyler olabilir.

  1. YEDEK

  2. yeni baskının düzenlenmesi

    1. yeni bir baskın oluştur

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

      (Düzenin önemli olduğunu buldum ... 2. ve 4. varsayılanlar 'yakın' baskındaki kopyalar gibi görünüyor.

    2. i baskını bölmesini ayarlamak, md127'de gparted gpt ayarını kullanıyor ve ardından eskisinin büyüklüğünün yeni bir bölümünü (ext4) ekliyordu
  3. göç

    1. şimdi veriyi alıyorum ... ilk önce çalıştığım ancak doğum gününü koruyamadığım rsync'i kullanmaya çalışıyordum ... eski baskından yenisine klonlamak için gg kullandım

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

      BEKLEYİNİZ
      , USR1’i bu işleme göndererek kontrol edebilirsiniz.

      kill -s USR1 <pid>
      
    2. baskınını düzeltmek
      gparted harika bir araçtır: bölümü kontrol edip düzeltmenizi ve sadece birkaç fare tıklamasıyla diskin tam boyutuna getirmenizi söyleyin;)

    3. bu bölüme yeni bir uuid yerleştirin ve fstab'ınızı onunla güncelleyin (uuid değiştir)

    4. baskınını sakla

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

      ve eskisini çıkarın

      vim /etc/mdadm/mdadm.conf 
      
    5. Bir rescus sistemde değilseniz yeniden başlatın
  4. eskisini yok etmek

    1. ilki başarısız ve yeni baskınına ekle

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

      daha sonra bu cihaza gpt yapın ve yeni bir boş bölüm belirleyin

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

      Bunun için bekleyin
      sen kontrol edebilirsiniz

      cat /proc/mdstat
      
    2. ikincisini durdur

      mdadm --stop /dev/md0 
      

      sonra bu son cihaza gpt yapın ve tekrar yeni bir boş bölüm ayarlayın

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

      Tekrar bekleyin


0

LVM ile yaptım. İlk yapılandırma: - sda2, sdb2 - ve üstüne raid1 md1 oluşturdu. sda1 ve sdb1, / boot bölümü için ikinci baskın1 için kullanıldı. - md1, hacim grubu uzayında pv idi, üzerinde bir kaç lvm var.

Disk sdc ve sdd ekledim ve orada sda / sdb gibi bölümler oluşturdum.

Yani:

  1. md10 olarak oluşturuldu:

    mdadm - yaratma / dev / md10 - seviye raid10 - raid aygıtları = 4 / dev / sdc2 eksik / dev / sdd2

  2. vg'yi uzat

    Pvcreate / dev / md10 vgextend alanı / dev / md10

  3. birimler md1'den md10'a taşındı:

    pvmove -v / dev / md1 / dev / md10

(bekleyin) 4. hacim grubunu azaltın:

vgreduce space /dev/md1
pvremove /dev/md1
  1. md1 dizisini durdur:

    mdadm -S / dev / md1

  2. eski md1'den md10'a disk ekleyin:

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

  3. /etc/mdadm/mdadm.conf dosyasındaki güncelleme yapılandırması:

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

(ve orada eski md1 çıkarın)

Canlı sistemde yapılan her şey, kvm'ler için kullanılan aktif hacimlerle;)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.