mdadm raid5 çift disk hatasını kurtar - bir bükülme ile (sürücü sırası)


14

Öncelikle hata yaptığımı ve bu RAID'deki verilerin çoğu için olmasa da çoğu için bir yedeğim olduğunu kabul edeyim . Verilerin geri kalanını kurtarma umudum hala var. Diskleri bir kurtarma uzmanı şirketine götürecek param yok.

Hata # 0,% 100 yedek almıyor. Biliyorum.

mdadm4x3 TB'lık bir RAID5 sistemim var . Sürücüler / dev / sd [be], hepsi bir bölümlü /dev/sd[b-e]1. Çok büyük sürücülerdeki RAID5'in riskli olduğunu biliyorum, ama yine de yaptım.

Son olaylar

RAID, iki sürücü arızasından sonra bozulur. Bir sürücü [/ dev / sdc] gerçekten kayboldu, diğeri [/ dev / sde] bir güç çevriminden sonra geri döndü, ancak RAID'e otomatik olarak yeniden eklenmedi. Bu yüzden sadece 2 aktif sürücüyle [/ dev / sdb ve / dev / sdd] 4 aygıtlı bir RAID kaldı.

Hata # 1, RAID'i geri yüklemek için sürücülerin dd kopyalarını kullanmıyor. Sürücüler ya da zamanım yoktu. Hata # 2, süper bloğun ve mdadm -Ekalan sürücülerin yedeğini almıyor .

Kurtarma girişimi

RAID'i bozulmuş modda yeniden monte ettim

mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.

Sonra verilerime erişebildim. /dev/sdcBir yedek ile değiştirdim ; boş; özdeş sürücü.

Ben eski kaldırıldı /dev/sdc1RAID dan

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

Hata # 3, sürücüyü değiştirmeden önce bunu yapmayın

Daha sonra yeni bölümü /dev/sdcböldüm ve RAID'e ekledim.

mdadm --add /dev/md0 /dev/sdc1

Daha sonra RAID'i geri yüklemeye başladı. ETA 300 dk. Süreci /proc/mdstat% 2'ye kadar takip ettim ve sonra başka şeyler yapmaya gittim.

Sonucu kontrol etme

Birkaç saat sonra (ancak 300 dakikadan az), süreci kontrol ettim. Bir okuma hatası nedeniyle durmuştu /dev/sde1.

Sorun gerçekten başladığı yer

Daha sonra RAID'den kaldırdım /dev/sde1ve yeniden ekledim. Bunu neden yaptığımı hatırlayamıyorum; geç olmuştu.

mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1

Ancak /dev/sde1artık yedek olarak işaretlendi. Bu yüzden doğru diziyi ve /dev/sdc1eksik olduğunu düşündüğüm şeyi kullanarak --assume-clean kullanarak tüm diziyi yeniden oluşturmaya karar verdim .

mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1

Bu işe yaradı, ancak bağlanmaya çalışırken dosya sistemi tanınmadı. (EXT4 olmalı).

Cihaz sırası

Daha sonra sahip olduğum bir yedeği kontrol /proc/mdstatettim ve sürücü siparişini buldum.

md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1]
      8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

Daha sonra bu RAID'in yaklaşık bir yıl önce bir sürücü kaybına uğradığını ve hatalı sürücüyü yedek bir sürücüyle değiştirerek ondan kurtulduğumu hatırladım. Bu, cihaz sırasını biraz karıştırmış olabilir ... bu nedenle sürücü [3] değil, yalnızca [0], [1], [2] ve [4].

Permute_array betiği ile sürücü siparişi bulmaya çalıştım: https://raid.wiki.kernel.org/index.php/Permute_array.pl ama bu doğru siparişi bulamadı.

Sorular

Şimdi iki ana sorum var:

  1. Sürücülerdeki tüm süper blokları berbat ettim, ama sadece verdim:

    mdadm --create --assume-clean
    

    komutlar (bu yüzden verilerin üzerine yazmamalıydım /dev/sd[bde]1. Teorik olarak RAID'in /dev/sde1doğru bir cihaz siparişi bulursam geri yüklenebileceğini doğru mu?

  2. RAID'de /dev/sde1[4] cihaz numarasının verilmesi önemli mi? İle oluşturduğumda

    mdadm --create /dev/md0 --assume-clean -l5 -n4 \
      /dev/sdb1 missing /dev/sdd1 /dev/sde1
    

    [3] numarasına atanmıştır. Bunun parite bloklarının hesaplanmasıyla ilgili olup olmadığını merak ediyorum. Önemli olduğu ortaya çıkarsa, diziyi /dev/sdb1[0]eksik [1] ile nasıl yeniden oluşturabilirim /dev/sdd1[2] /dev/sde1[4]? Eğer işe yarayabilirsem bozulmuş modda başlatabilir ve yeni sürücüyü ekleyebilir /dev/sdc1ve tekrar senkronize etmesine izin verebilirim .

Bana bunun en iyi eylem yolu olmayabileceğini belirtmek isterseniz sorun değil, ama bunu fark ettiğimi göreceksiniz. Herhangi bir öneriniz varsa harika olurdu.


1
+1 Bu çok iyi düşünülmüş ve belgelenmiş bir sorudur. Keşke sana bir cevap versem.
Hibe

Yorumunuz için teşekkür ederim, sanırım bu zor bir soru.
Peter Bos

Bundan vazgeçtiniz mi, yoksa hala üzerinde mi çalışıyorsunuz? Üzerinde çalışıyorsanız, tavsiyem, etrafta yerleştirdiğiniz tüm sürücüleri kazıyın ve DD görüntüleri oluşturabileceğiniz başka bir makinede JBOD oluşturun, bu şekilde başa çıkmanız çok daha iyidir, çünkü tekrar tekrar denemeye devam edebilirsiniz . (LVM kullanın ve bittikten sonra anlık görüntüleri kullanın, böylece anlık görüntüyü silmeye devam edebilirsiniz ve her şeyi yeniden kopyalamanız gerekmez). Benzer bir teknede bulundum ve verilerin çoğu bozulmadan diziyi kurtarmayı başardım.
Regan

Tepkiniz için teşekkürler. Bir süre sonra bundan vazgeçtim, iki sürücüyü yenileriyle değiştirdim, yedeklemeden% 98 kurtardım,% 2 veri kaybını kabul ettim ve devam ettim. Şimdi RAID-Z kullanıyorum ve yedekleme stratejimi güncelledim. Çok uzak çok iyi.
Peter Bos

Yanıtlar:


3

Sorularınızı cevaplamak için,

  1. Geri yüklenebilir mi?

    • İlk şey ilk - DUR, arkanıza yaslanın ve biraz düşünün. Evet, algoritma, yığın boyutu ve disk sırası, mevcut olan herhangi bir dosya sistemini elde etmek, düzgün bir şekilde yeniden monte etmek için çok önemlidir. Ancak süper blokların üzerine yazdığınızdan, artık deneme yanılma ile karşılaşıyorsunuz.
    • İkincisi, önceki disk düzenini almanın herhangi bir yolu var mı? Disk düzenini güvenli bir yerde saklamak için her zaman bir mdadm --detail> backup dosyası yaparım. Disklerin baskında nasıl yapılandırıldığına dair herhangi bir kanıt için dmesg, / var / log öğesini kontrol edin.
    • Son olarak, önceki yığın boyutu ve disk sırasıyla eşleşirseniz, ext4 süperblokuna zarar vermiş olabilirsiniz - diğer süperblokları hızlı bir şekilde taramanın yolları vardır (ve mevcut dosya sistemlerinin süperbloklarını tarayan ve bunlara göz atmaya çalışan şık bir program vardır. manuel olarak: http://www.cgsecurity.org/wiki/Main_Page )
  2. Sdc yeni olduğundan, eksik fıkra ile manuel olarak bir araya getirmeye devam edeceğim ve evet, sde'nin bozulmuş modda montajı için doğru sırada olması gerekir. Doğru düzeni bulduktan sonra - diziden tüm verileri kopyalayın ve düzeni yeniden belgelendirerek yeniden başlayın (böylece bu sorunla tekrar karşılaşmazsınız).

İyi şanslar


1
ext3 / 4 yedek süper bloklar yazar. Süper blok ofseti, bunun yerine yedek süper blokları kullanmak için bağlama argümanı veya fsck olarak geçirebilirsiniz. Yine de, bir RAID 5 = oyunda iki sürücü azaldı.
dmourati

1

Başka bir şey yapmadan önce, dizinizde WERE olan sürücülerin her biri için bir 'mdadm --examine / dev / sdX1' ve bundan bir 'mdadm --detail / dev / md0' yakalayın. kesin düzen.

Ben sadece kendimi yapmak zorunda ayrı bir soruda bir Synology dizi kurtarmak için:

"E" durumunda sürücü ile Synology NAS üzerinde bir mdadm dizisi nasıl kurtarılır?

Düzenleme: Üzgünüm, tüm sürücülerdeki süper blokları kaybettiğinizi söylediğinizi gördüm.

Sonraki komutlarınız LOOK doğru. En basit seçenek, oluşturma işlemlerini olası her siparişle çalıştırmak ve daha sonra dosya sistemine salt okunur olarak bağlanıp erişemeyeceğinizi görmek olabilir.


1

Bu soru eski ve eminim şimdi kimse size yardım edemez, ama diğerleri için okuma:

Yaptığınız en tehlikeli hata, numaralandırdığınız bir hata değil, ki bu:

mdadm --create ...

orijinal disklerde, ne yapacağınızı bilmeden önce. Bu, meta verilerin üzerine yazdığından, sürücü sırası, veri ofseti, yığın boyutu vb. Kaydınız yoktur.

Bundan kurtulmak için, bunları doğru değerlerle tekrar yazmanız gerekir. Bunu bilmenin en kolay yolu meta verilere bakmaktır, ancak bunu zaten yok ettiniz. Bir sonraki yol tahmin etmektir. Bildikleriniz (4 cihaz, seviye 5) ve ayrıca farklı disk sırası dışında herhangi bir seçenek için farklı değerlerle, böyle bir komutun farklı kombinasyonlarını tahmin edin:

mdadm --create /dev/md0 --assume-clean --metadata=1.2 --raid-devices=4 --level=5 --layout=... --chunk=512 --data-offset=128M /dev/sdb1 missing /dev/sdd1 /dev/sde1

Ancak doğru sonucu bilmediğiniz için, yine, eski disklerde onları daha fazla yok ederek aynı ölümcül hatayı yapmamalısınız. Bunun yerine bir kaplama kullanın; örneğin bu prosedür orijinalleri güvende tutmak için çalışmalıdır.

Fsck veya mount ve doğrulayabileceğiniz bir çalışma dizisi üreten bazı argümanlar bulduktan sonra (örneğin, checksum / pgp ile saklamanız gereken bir iso gibi tüm baskın üyelere yayılacak kadar büyük bir dosyanın sağlama toplamını kontrol edin imza veya sıkıştırılmış -t veya gunzip -ta büyük bir arşiv)


Teşekkür ederim. Bu arada ZFS (RAIDZ2) kullanmaya başladım. Ancak notlarınızı okumak çok ilginçti. Bunu şimdi fark yaratmak komut yaptığı zaman ben değil mi kabul ederken, meta üzerine yazma. Ayrıca, bindirme dosyaları hakkında bilmiyordum. Gerçekten temiz! Teşekkürler!
Peter Bos
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.