Görünür disk boyutunu yükseltirken RAID'i büyütün / yeniden boyutlandırın


10

Başlangıçta disk başına sadece 2 TB'a hitap edebilen bir denetleyici kullanarak bir yazılım RAID'i oluşturdum. Diskler 3 TB disklerdir. İyi çalıştı, ancak her diskin sadece ilk 2 TB'ını kullandı.

Şimdi tam 3 TB'ı görmek için denetleyiciyi değiştirdim. Bu nedenle /dev/md0son 1 TB'yi de kullanmak istiyorum .

Denedim:

# mdadm --grow /dev/md0 --size=max
mdadm: component size of /dev/md0 has been set to 2147479552K

Ama gördüğünüz gibi sadece 2TB'yi görüyor. Eğer daha yüksek zorlamaya çalışırsam:

# mdadm --grow /dev/md0 --size=2147483648
mdadm: Cannot set device size for /dev/md0: No space left on device

Böylece bir şekilde sistem disklerin 3 TB (in /proc/partitions) olduğunu görebilir, ancak RAID bunları 3 TB olarak göremez.

mdadm detayları:

# mdadm --detail /dev/md0
/dev/md0:
    Version : 1.2
Creation Time : Fri Mar  2 15:14:46 2012
 Raid Level : raid6
 Array Size : 38654631936 (36863.93 GiB 39582.34 GB)
Used Dev Size : 2147479552 (2048.00 GiB 2199.02 GB)
Raid Devices : 20
Total Devices : 21
Persistence : Superblock is persistent

Update Time : Wed Apr 25 19:47:09 2012
      State : active
Active Devices : 20
Working Devices : 21
Failed Devices : 0
Spare Devices : 1

     Layout : left-symmetric
 Chunk Size : 4096K

       Name : node5:1
       UUID : 8603c3df:b740ba22:8c9c82fd:a18b3133
     Events : 845

Number   Major   Minor   RaidDevice State
  20      65       32        0      active sync   /dev/sds
   1      65       64        1      active sync   /dev/sdu
   2      65       80        2      active sync   /dev/sdv
   3      65       96        3      active sync   /dev/sdw
   4       8      192        4      active sync   /dev/sdm
   5       8       32        5      active sync   /dev/sdc
   6       8       48        6      active sync   /dev/sdd
   7       8       64        7      active sync   /dev/sde
   8       8       80        8      active sync   /dev/sdf
   9       8       96        9      active sync   /dev/sdg
  10       8      112       10      active sync   /dev/sdh
  11       8      128       11      active sync   /dev/sdi
  12       8      144       12      active sync   /dev/sdj
  13       8      160       13      active sync   /dev/sdk
  14       8      176       14      active sync   /dev/sdl
  15       8      208       15      active sync   /dev/sdn
  16       8      224       16      active sync   /dev/sdo
  17       8      240       17      active sync   /dev/sdp
  18      65        0       18      active sync   /dev/sdq
  19      65       16       19      active sync   /dev/sdr

  21      65       48        -      spare   /dev/sdt

Disk boyutları:

# cat /proc/partitions |grep 2930266584
   8       48 2930266584 sdd
   8       32 2930266584 sdc
   8      112 2930266584 sdh
   8       96 2930266584 sdg
   8       80 2930266584 sdf
   8      128 2930266584 sdi
   8      176 2930266584 sdl
   8       64 2930266584 sde
  65       32 2930266584 sds
   8      192 2930266584 sdm
   8      144 2930266584 sdj
  65       80 2930266584 sdv
   8      224 2930266584 sdo
   8      208 2930266584 sdn
   8      160 2930266584 sdk
   8      240 2930266584 sdp
  65        0 2930266584 sdq
  65       64 2930266584 sdu
  65       16 2930266584 sdr
  65       48 2930266584 sdt
  65       96 2930266584 sdw

Düzenle:

# mdadm --version
mdadm - v3.1.4 - 31st August 2010
# uname -a
Linux lemaitre 3.2.0-0.bpo.1-amd64 #1 SMP Sat Feb 11 08:41:32 UTC 2012 x86_64 GNU/Linux

RAID6 tam diskleri kullanır (yani bölüm yok)

Bu sabah sistem çöktü. Yeniden başlatmanın ardından sistem RAID'i (ki bu korkunçtu) bulamadı. Tüm diskler yedek parça (S) olarak gösterildi:

cat /proc/mdstat 
Personalities : 
md0 : inactive sdr[20](S) sds[21](S) sdq[18](S) sdp[17](S) sdo[16](S) sdn[15](S) sdl[14](S) sdk[13](S) sdj[12](S) sdi[11](S) sdh[10](S) sdg[9](S) sdf[8](S) sde[7](S) sdd[6](S) sdc[5](S) sdm[4](S) sdv[3](S) sdu[2](S) sdt[1](S)
      42949652460 blocks super 1.2

Burada bile mdadm3 TB boyutunu bulamadığı açıktır .

Koştum mdadm --stop /dev/md0. /Etc/mdadm/mdadm.conf içindeki giriş kaldırıldı. Ran mdadm -A --scan --force, RAID'in çevrimiçi olmasına ve yeniden oluşturulmasına neden oldu.


RAID6 için 20 disk kullanıyorsunuz - doğru mu? Her diskte bölüm yok mu? Ne fdisk -l /dev/sddgösteriyor? Hangi işletim sistemini kullanıyorsunuz, mdadm sürümü nedir?
Nils

Yanıtlar:


5

Etrafta / sys dürttü ve cevap çok daha yakın var.

# cd /sys/block/md0/md
# cat component_size
2147479552

Bu, daha önce gördüklerimizle aynı fikirde. Ama bu:

# grep . dev-sd*/size
dev-sdc/size:2147482623
dev-sdd/size:2147482623
dev-sde/size:2147482623
dev-sdf/size:2930265560
dev-sdg/size:2147482623
dev-sdh/size:2147482623
dev-sdi/size:2147482623
dev-sdj/size:2147482623
dev-sdk/size:2147482623
dev-sdl/size:2147483648
dev-sdm/size:2147482623
dev-sdn/size:2147482623
dev-sdo/size:2147482623
dev-sdp/size:2147482623
dev-sdq/size:2147482623
dev-sdr/size:2147482623
dev-sds/size:2147482623
dev-sdt/size:2147482623
dev-sdu/size:2147482623
dev-sdv/size:2147482623
dev-sdw/size:2930265560

RAID'in neden yanlış boyutu gördüğünü açıklıyor gibi görünüyor: Sürücülerin çoğu 2 TB olarak, değiştirilen 2 ise 3 TB olarak görünüyor. Tüm sürücüler aynı modeldir, bu yüzden algılanan boyutu değiştirebilirsek görelim:

# parallel echo 2930265560 \> ::: dev-sd*/size
# grep . dev-sd*/size
dev-sdc/size:2930265560
dev-sdd/size:2930265560
dev-sde/size:2930265560
dev-sdf/size:2930265560
dev-sdg/size:2930265560
dev-sdh/size:2930265560
dev-sdi/size:2930265560
dev-sdj/size:2930265560
dev-sdk/size:2930265560
dev-sdl/size:2930265560
dev-sdm/size:2930265560
dev-sdn/size:2930265560
dev-sdo/size:2930265560
dev-sdp/size:2930265560
dev-sdq/size:2930265560
dev-sdr/size:2930265560
dev-sds/size:2930265560
dev-sdt/size:2930265560
dev-sdu/size:2930265560
dev-sdv/size:2930265560
dev-sdw/size:2930265560

Voila. Bileşen_boyutu hala küçük olsa da:

# cat component_size
2147479552

Belki de mdadm tarafından değiştirilebilir:

# mdadm --grow /dev/md0 --size=max

Bu maalesef kilitleniyor mdadmve daha sonra / dev / md0'a erişim engelleniyor. Bileşen_boyutuna erişim de:

# cat component_size   # This blocks

Sucks. Ama iyi yanı, syslog'da şöyle diyor:

Apr 27 20:45:50 server kernel: [124731.725019] md0: detected capacity change from 39582343102464 to 54010589478912

/ Dev / md0 dosya sistemi hala çalışıyordu.

Yeniden başlattıktan sonra tekrar 'mdadm --grow / dev / md0 --size = max' yapmak zorunda kaldım. Ardından resynctamamlanmasını bekleyin . Yine / dev / md0 dosyasına erişim engellendi. Böylece başka bir yeniden başlatma, ardından xfs_growfs /dev/md0yeniden boyutlandırma tamamlandı.


Paralel (1) fişi iyice beğendim, Ole :) Soruşturma için teşekkürler, sadece benzer bir davaya çarptı.
Michael Shigorin

1
Sanırım "mdadm --update = deviceize" bunu da yapardı, man sayfasına bakın: "Bu, mdadm'ın her cihazda maksimum kullanılabilir alan miktarını belirlemesine ve meta verilerdeki ilgili alanı güncellemesine neden olacaktır."
rudimeier

3

Oluşturma sırasında cihazın boyutu meta verilerde bir yere kaydedildiğini düşünüyorum. Denetleyiciyi değiştirmek meta verileri değiştirmez.

Yedeklemeyi md'den çıkarın, ardından yeni sürücü olarak RAID setine yeniden ekleyin. Muhtemelen meta verileri kaldırmanız gerekir (sıfır sayfasını süper -blok için kontrol edin veya tüm diski silin). Bu tek bir disk için çalışıyorsa, kalan tüm sürücüler için de aynı işlemi tekrarlayın. Sonunda --grow yapın.

Senkronizasyon bitene kadar ek diskleri çıkarmayın !!


Bunun gerçekten işe yarayıp yaramadığını test edip etmediğiniz benim için belli değil. Yeniden yapılanma yaklaşık 1.5 gün sürer. 20 sürücünün de değiştirilmesi, bir ay boyunca çalışmanın bozulmasına neden olur. "Bu tek bir disk için işe yarıyorsa" yazdığınızda, tek bir disk için çalıştığını nasıl test edersiniz?
Ole Tange

Hayır, bunu test etmedim, ancak daha önce bazı MD problemleri gördüm ve nasıl çalıştığı hakkında bazı hislerim var ... ve başarısız oluyor. Test etmek için etrafta kötü meta veriler bulunan sürücülerim yok. Uzun senkronizasyon süresinin farkındayım, bu yüzden yedeklemeyi kullanmanızı öneririm. RAID6'nız var, yani 2 sürücü arızalı ve yedek bir tane var. Bu, bir sorun yaşamadan önce başarısız olabilecek toplam 3 sürücü anlamına gelir. Tek bir sürücü ile kontrol edebilirsiniz, en azından bunun sorun olup olmadığını biliyorsunuz. Kurulumunuz hakkında yalnızca sınırlı bilgilerim var. RAID
setinizden

Oh, sorunuzu anlıyorum. mdadm, diğer cihazlardan çok daha büyük bir cihaz eklemeye çalıştığınız konusunda sizi uyaracaktır. Birkaç bayt umursamaz, ancak fark nispeten büyük olduğunda sizi uyarır.
jippie

1
Şunları yapabilirsiniz failBir sürücü, daha sonra removeda, daha sonra zero-superblockda meta kaldırın. RAID setiniz kullanımda olduğundan, yedek olarak ekleyebilirsiniz, yani başka bir sürücü başarısız olana kadar senkronize olmaz (normal davranıştır), ancak yalnızca tek bir sürücü için çalışır VEYA siz addve senkronizasyon gerektirir. Sonsuza dek süreceğini biliyorum. Veya kullanılabilir tüm depolama alanlarını ekleyemeyeceğinizi kabul edersiniz. Kullanmadığınız bir bölüm tablosu kullanmanın avantajlarından biri. Bir bölüm tablosu kullanmamak kötü değildir, ancak bu durumda size yardımcı olabilir.
jippie

1
Yukarıdaki yorumuma bakın: "mdadm, diğer cihazlardan çok daha büyük bir cihaz eklemeye çalıştığınız konusunda sizi uyaracaktır."
jippie
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.