Çökmüş bir Linux MD RAID5 dizisi nasıl kurtarılır?


17

Bir süre önce evde bir RAID5 sistemim vardı. 4 disklerden biri başarısız oldu, ancak kaldırdıktan ve geri koyduktan sonra Tamam gibi görünüyordu, bu yüzden bir resync başlattım. Bittiğinde, dehşetime göre, 4 diskten 3'ünün başarısız olduğunu fark ettim. Ancak bunun mümkün olduğuna inanmıyorum. Disklerde farklı bir RAID dizisinin her bir parçası için birden çok bölüm vardır.

  • md0, sda1, sdb1, sdc1 ve sdd1'den oluşan bir RAID1 dizisidir.
  • md1, sda2, sdb2, sdc2 ve sdd2'den oluşan bir RAID5 dizisidir.
  • md2, sda3, sdb3, sdc3 ve sdd3'ten oluşan bir RAID0 dizisidir.

md0 ve md2 tüm diskleri bildirirken md1 3 bildirimi başarısız oldu (sdb2, sdc2, sdd2). Benim sabit fikrim başarısız olduğunda tüm bölümlerin sadece ortadaki bölümlerin değil, kaybolması gerektiğine inanıyorum.

Bu noktada bilgisayarı kapattım ve sürücüleri söktüm. O zamandan beri o bilgisayarı daha küçük bir diskle kullanıyordum.

Verileri kurtarma umudu var mı? Bir şekilde mdadm'ı disklerimin gerçekten çalıştığına ikna edebilir miyim? Gerçekten bir sorun olabilir tek disk sdc ama bu da diğer diziler tarafından bildirilir.

Güncelleme

Sonunda eski diskleri bağlama ve bu makineyi SystemRescueCd'den önyükleme şansım oldu. Yukarıdaki her şey bellekten yazılmıştır. Şimdi bazı zor verilerim var. İşte çıktımdadm --examine /dev/sd*2

/dev/sda2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:40:48 2010
          State : clean
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b48835 - correct
         Events : 53204

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     0       8        2        0      active sync   /dev/sda2

   0     0       8        2        0      active sync   /dev/sda2
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdb2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 2
Working Devices : 3
 Failed Devices : 1
  Spare Devices : 1
       Checksum : 68b4894a - correct
         Events : 53205

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       18        1      active sync   /dev/sdb2

   0     0       0        0        0      removed
   1     1       8       18        1      active sync   /dev/sdb2
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdc2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48975 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     2       8       34        2      active sync   /dev/sdc2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2
/dev/sdd2:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : 53eb7711:5b290125:db4a62ac:7770c5ea
  Creation Time : Sun May 30 21:48:55 2010
     Raid Level : raid5
  Used Dev Size : 625064960 (596.11 GiB 640.07 GB)
     Array Size : 1875194880 (1788.33 GiB 1920.20 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 1

    Update Time : Mon Aug 23 11:44:54 2010
          State : clean
 Active Devices : 1
Working Devices : 2
 Failed Devices : 2
  Spare Devices : 1
       Checksum : 68b48983 - correct
         Events : 53210

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     4       8       50        4      spare   /dev/sdd2

   0     0       0        0        0      removed
   1     1       0        0        1      faulty removed
   2     2       8       34        2      active sync   /dev/sdc2
   3     3       0        0        3      faulty removed
   4     4       8       50        4      spare   /dev/sdd2

Görünüşe göre son açılıştan bu yana işler değişti. Bu doğru sda2 okuyorsanız, sdb2 ve sdc2 çalışıyor ve senkronize veriler içeriyor ve sdd2 yedek. Kesinlikle 3 başarısız disk gördüğümü hatırlıyorum ama bu iyi haber. Ancak dizi hala çalışmıyor:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md125 : inactive sda2[0](S) sdb2[1](S) sdc2[2](S)
      1875194880 blocks

md126 : inactive sdd2[4](S)
      625064960 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

md0, md127 olarak yeniden adlandırıldı. md125 ve md126 çok garip. Bunlar iki değil bir dizi olmalıdır. Buna md1 denirdi. md2 tamamen gitti ama benim takasımdı bu yüzden umrumda değil.

Farklı isimleri anlayabiliyorum ve gerçekten önemli değil. Ama neden 3 "aktif senkronizasyon" diski olan bir dizi okunamıyor? Ve sdd2'nin ayrı bir dizide olmasının nesi var?

Güncelleme

Süper blokları yedekledikten sonra aşağıdakileri denedim:

root@sysresccd /root % mdadm --stop /dev/md125
mdadm: stopped /dev/md125
root@sysresccd /root % mdadm --stop /dev/md126
mdadm: stopped /dev/md126

Çok uzak çok iyi. Sdd2 yedek olduğundan henüz eklemek istemiyorum.

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2 missing 
mdadm: cannot open device missing: No such file or directory
mdadm: missing has no superblock - assembly aborted

Görünüşe göre bunu yapamam.

root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c}2        
mdadm: /dev/md1 assembled from 1 drive - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdb2[1](S) sda2[0](S)
      1875194880 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

Bu da işe yaramadı. Tüm diskleri deneyelim.

mdadm --stop /dev/md1
mdadm: stopped /dev/md1
root@sysresccd /root % mdadm --assemble /dev/md1 /dev/sd{a,b,c,d}2
mdadm: /dev/md1 assembled from 1 drive and 1 spare - not enough to start the array.
root@sysresccd /root % cat /proc/mdstat                           
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)
      2500259840 blocks

md127 : active raid1 sda1[0] sdd1[3] sdc1[2] sdb1[1]
      64128 blocks [4/4] [UUUU]

unused devices: <none>

Şanssız. Bu cevaba dayanarak denemeyi planlıyorum:

mdadm --create /dev/md1 --assume-clean --metadata=0.90 --bitmap=/root/bitmapfile --level=5 --raid-devices=4 /dev/sd{a,b,c}2 missing
mdadm --add /dev/md1 /dev/sdd2

Güvenli mi?

Güncelleme

Yorumumda bu tabloyu yapmak için kullandığım süper blok ayrıştırıcı komut dosyasını yayınlıyorum . Belki birisi bunu faydalı bulabilir. Yardımların için teşekkür ederim.


Sanırım mdadm --re-addaradığınız şey bu değil. Son zamanlarda bir hafıza testi yaptın mı? Dizi hatasıyla ilgili herhangi bir günlük mesajınız var mı?
Gilles 'SO- kötü olmayı bırak

@Gilles: Başarısız dizide saklandıklarından, çökmeden önce günlükleri yok. Ve standart mdadm arayüzü ile düzeltebileceğimi sanmıyorum. Bir yeniden senkronizasyon içeren her türlü işlem, 4 diskten biriyle mümkün değildir. 3 "başarısız" diskler her şeyi geri yüklemek için yeterli bilgi içerdiğini düşünüyorum. Mesela dd ile okuyabilirim. "İyi" bir senkronize olmayabilir. Memtest yapacağım ama bu makine şimdi yeni bir diskle mükemmel çalışıyor.
stribika

2
Diziyi durdurmayı ve mdadm -A /dev/md1 /dev/sd{b,c,d}2(belki --force) ile yeni bir diziyi yeniden birleştirmeyi denediniz mi? (Eğer yapmadıysanız, önce süper blokları yedekleyin.)
Gilles 'SO- kötü olmayı durdurun'

@Gilles: Sorumu güncel bilgilerle güncelledim. Tam olarak yedeklemek için neye ihtiyacım var? Disklerin ilk birkaç bloğu mu yoksa bunun için özel bir araç var mı?
stribika

@stribika: Süperblok, bölümdeki 64kB sınırına hizalanmış son tam 64kB bloktur. Ben /dev/sdd2aynı UUID olmasına rağmen nasıl ayrı bir dizide olabilir hiçbir fikrim yok sd{a,b,c}2.
Gilles 'SO- kötü olmayı kes

Yanıtlar:


12

Öncelikle diskleri kontrol edin, akıllı selftest çalıştırmayı deneyin

for i in a b c d; do
    smartctl -s on -t long /dev/sd$i
done

İşlemin tamamlanması birkaç saat sürebilir, ancak her sürücünün test durumunu birkaç dakikada bir kontrol edin, örn.

smartctl -l selftest /dev/sda

Bir disk durumu okuma hataları nedeniyle tamamlanmadıysa, bu disk md1'in yeniden montajı için güvenli değildir. Otomatik test bittikten sonra dizinizi yeniden monte etmeye çalışabilirsiniz. İsteğe bağlı olarak, daha dikkatli olmak istiyorsanız, devam etmeden önce diskleri başka bir makineye taşıyın (kötü ram / denetleyici / vb. Durumunda).

Son zamanlarda bunun gibi bir vakam vardı. Bir sürücü başarısız oldu, diziye yeniden ekledim ama yeniden oluşturma sırasında 4 sürücünün 3'ü tamamen başarısız oldu. / Proc / mdadm içeriği sizinkilerle aynıydı (belki aynı sırada değil)

md1 : inactive sdc2[2](S) sdd2[4](S) sdb2[1](S) sda2[0](S)

Ama şanslıydım ve diziyi bununla yeniden birleştirdim

mdadm --assemble /dev/md1 --scan --force

Sağladığınız --examine çıktısına bakarak, aşağıdaki senaryoların gerçekleştiğini söyleyebilirim: sdd2 başarısız oldu, kaldırdınız ve yeniden eklediniz, Bu yüzden yeniden oluşturmaya çalışan yedek bir sürücü oldu. Ancak sda2 yeniden oluşturulurken sdb2 başarısız oldu. Böylece olay sayacı dizideki son etkin sürücüler olan sdc2 ve sdd2'de daha büyüktür (sdd'nin yeniden oluşturma şansı olmasa da, bu yüzden en güncel olanıdır). Etkinlik sayaçlarındaki farklılıklar nedeniyle --force gerekli olacaktır. Yani bunu da deneyebilirsin

mdadm --assemble /dev/md1 /dev/sd[abc]2 --force

Sonuç olarak, yukarıdaki komut başarısız olursa, diziyi şu şekilde yeniden oluşturmayı denemeniz gerektiğini düşünüyorum:

mdadm --create /dev/md1 --assume-clean -l5 -n4 -c64 /dev/sd[abc]2 missing

Bunu yaparsanız --create, missingbölüm önemlidir, diziye dördüncü bir sürücü eklemeye çalışmayın, çünkü o zaman inşaat başlar ve verilerinizi kaybedersiniz . Diziyi eksik bir sürücü ile oluşturmak, içeriğini değiştirmez ve başka bir yerde bir kopya alma şansınız olur (raid5, raid1 ile aynı şekilde çalışmaz).

Bu, diziyi açamazsa, bu çözümü (perl betiği) burada deneyin Bir dizi yeniden oluşturma

Sonunda diziyi açmayı başarırsanız, dosya sistemi kirli ve muhtemelen bozuk olacaktır. Yeniden oluşturma sırasında bir disk arızalanırsa, dizinin duracağı ve diğer disklere yazma işlemi yapmadan donacağı beklenir. Bu durumda iki disk başarısız oldu, belki sistem tamamlanamayan yazma istekleri gerçekleştiriyordu, bu yüzden bazı verileri kaybetme şansınız var, ama aynı zamanda asla fark etmeyeceğiniz bir şans var :-)

edit: bazı açıklama eklendi.


mdadm --assemble /dev/md1 /dev/sd[abc]2 --forceçalıştı. Teşekkür ederim. Verilerimi kaydettiniz! :) İlk 3 daha önce düşündüğüm kadar iyi olmadığından dördüncü diski eklemeye çalışmayacağım. Kendi kendine test, her birinin 10-20 okunamayan bloğuna sahip olduğunu ortaya koydu. Önce bunu kontrol etmediğim için kendimi aptal hissediyorum.
stribika

Kapsamlı bir cevap için teşekkürler. Benden 50 temsil ile ödüllendirildi.
0xC0000022L

Permute_array.pl benim için harika çalıştı. Diğer kullanıcılar için not: Görmeyi beklediği aygıt dizisi, kaldırmış olabileceğiniz ölü sürücüler de dahil olmak üzere tüm sürücüleri içerir.

"--Create yaparsanız, eksik kısmı önemlidir, diziye dördüncü bir sürücü eklemeye çalışmayın, çünkü o zaman inşaat başlar ve verilerinizi kaybedersiniz." - BS. Eğer belirttiyseniz --assume-clean(yaptınız) olmaz.
poige

1

Kullandığımda birçok sorun yaşadım mdadm, ancak verileri hiç kaybetmedim. --forceTüm verilerinizi kaybedebileceğiniz için seçeneklerden kaçınmalısınız veya çok dikkatli bir şekilde kullanmalısınız. Lütfen/etc/mdadm/mdadm.conf

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.