Kembangkan / ubah ukuran RAID saat memutakhirkan ukuran disk yang terlihat

10

Saya awalnya membuat perangkat lunak RAID menggunakan pengontrol yang hanya bisa mengatasi 2TB per disk. Disk adalah disk 3 TB. Ini bekerja dengan baik, tetapi hanya menggunakan 2TB pertama dari setiap disk.

Saya sekarang telah mengubah controller untuk melihat 3TB penuh. Karena itu saya ingin /dev/md0menggunakan 1 TB terakhir juga.

Saya telah mencoba:

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

Tapi seperti yang Anda lihat, hanya melihat 2TB. Jika saya mencoba memaksanya lebih tinggi:

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

Jadi, entah bagaimana sistem dapat melihat disk berukuran 3TB (dalam /proc/partitions), tetapi RAID tidak dapat melihatnya sebagai 3TB.

Rincian mdadm:

# 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

Ukuran disk:

# 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

Edit:

# 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 menggunakan disk lengkap (yaitu tidak ada partisi)

Pagi ini sistem macet. Setelah reboot, sistem tidak menemukan RAID (yang mengerikan). Semua disk muncul sebagai suku cadang (S):

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

Bahkan di sini jelas bahwa mdadmtidak menemukan ukuran 3 TB.

Saya berlari mdadm --stop /dev/md0. Menghapus entri di /etc/mdadm/mdadm.conf. Ran mdadm -A --scan --force, yang menyebabkan RAID untuk online dan membangun kembali.

Ole Tange
sumber
Anda menggunakan 20 seluruh disk untuk RAID6 - benar? Tidak ada partisi di setiap disk? Apa yang fdisk -l /dev/sddditunjukkan? OS apa yang Anda gunakan, apa versi mdadm?
Nils

Jawaban:

5

Saya menyodok sekitar / sys dan semakin dekat dengan jawabannya.

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

Itu setuju dengan apa yang telah kita lihat sebelumnya. Tapi ini:

# 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

tampaknya menjelaskan mengapa RAID melihat ukuran yang salah: Sebagian besar drive muncul sebagai 2TB sedangkan 2 yang telah diganti muncul sebagai 3TB. Semua drive adalah model yang sama, jadi mari kita lihat, jika kita dapat mengubah ukuran yang dirasakan:

# 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. Component_size masih kecil, meskipun:

# cat component_size
2147479552

Mungkin itu bisa diubah oleh mdadm:

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

Sayangnya ini terkunci mdadmdan akses selanjutnya ke / dev / md0 diblokir. Dan begitu pula akses ke component_size:

# cat component_size   # This blocks

Menyebalkan. Tetapi bagian baiknya adalah bahwa di syslog dikatakan:

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

Sistem file di / dev / md0 masih berjalan.

Setelah reboot saya harus melakukan 'mdadm --grow / dev / md0 --size = max' lagi. Kemudian tunggu resyncsampai selesai. Lagi-lagi akses ke / dev / md0 diblokir. Jadi reboot lain, diikuti oleh xfs_growfs /dev/md0dan kemudian ukurannya selesai.

Ole Tange
sumber
Saya sangat menyukai colokan paralel (1), Ole :) Terima kasih atas investigasinya, tekan saja kasus yang serupa.
Michael Shigorin
1
Saya kira "mdadm --update = devicesize" akan melakukannya juga, lihat halaman manual: "Ini akan menyebabkan mdadm menentukan jumlah ruang maksimum yang dapat digunakan pada setiap perangkat dan memperbarui bidang yang relevan dalam metadata."
rudimeier
3

Saya pikir selama pembuatan ukuran perangkat terdaftar di suatu tempat di metadata. Mengubah pengontrol tidak mengubah metadata.

Hapus cadangan dari md, lalu tambahkan kembali ke RAID yang ditetapkan sebagai drive baru. Anda mungkin harus menghapus metadata (periksa halaman manual untuk --zero-superblock atau hapus seluruh disk). Jika itu berfungsi untuk satu disk, ulangi prosedur untuk semua drive yang tertinggal juga. Lalu akhirnya lakukan --grow.

Jangan hapus disk tambahan sampai sinkronisasi selesai !!

jippie
sumber
Tidak jelas bagi saya jika Anda telah menguji apakah ini benar-benar berfungsi. Pembangunan kembali memakan waktu sekitar 1,5 hari. Mengganti semua 20 drive akan menyebabkan kerusakan selama sebulan penuh. Ketika Anda menulis "Jika itu berfungsi untuk satu disk", bagaimana Anda menguji apakah itu berfungsi untuk disk tunggal?
Ole Tange
Tidak, saya belum menguji ini, tetapi saya telah melihat beberapa masalah md sebelumnya dan saya memiliki perasaan tentang cara kerjanya ... dan gagal. Saya tidak memiliki drive dengan metadata buruk tergeletak di sekitar untuk mengujinya. Saya menyadari waktu sinkronisasi yang lama, itulah sebabnya saya menyarankan untuk menggunakan cadangan. Anda memiliki RAID6, yang berarti 2 drive dapat gagal dan Anda memiliki cadangan. Itu berarti total 3 drive yang dapat gagal sebelum Anda memiliki masalah. Anda dapat memeriksa dengan satu drive, setidaknya Anda tahu apakah ini masalah Anda. Saya hanya memiliki informasi terbatas tentang pengaturan Anda. Jangan menarik drive dari set RAID Anda jika Anda tidak nyaman melakukannya
jippie
Oh, saya mengerti pertanyaan Anda. mdadm akan memperingatkan Anda bahwa Anda mencoba menambahkan perangkat yang jauh lebih besar dari yang lain. Tidak masalah tentang beberapa byte, tetapi memperingatkan Anda ketika perbedaannya relatif besar.
jippie
1
Anda dapat faildrive, lalu remove, zero-superblockuntuk menghapus metadata. Saat set RAID Anda digunakan, Anda dapat menambahkannya sebagai cadangan, yang berarti tidak akan disinkronkan hingga drive lain gagal (itu adalah perilaku normal) tetapi hanya berfungsi untuk satu drive ATAU Anda adddan itu membutuhkan sinkronisasi. Saya tahu itu membutuhkan selamanya. Atau Anda menerima kenyataan bahwa Anda tidak dapat menambahkan semua penyimpanan yang tersedia. Salah satu keuntungan menggunakan tabel partisi yang tidak Anda miliki. Tidak menggunakan tabel partisi tidak buruk, tetapi dalam kasus khusus ini akan membantu Anda.
jippie
1
Lihat komentar saya di atas: "mdadm akan memperingatkan Anda bahwa Anda mencoba menambahkan perangkat yang jauh lebih besar dari yang lain."
jippie