Bagaimana cara mengubah ukuran array RAID1 dengan mdadm?

12

Saya sudah menjalankan Ubuntu 11.04 (kernel 2.6.38-11). Saya mengganti 2x160GB dengan drive 2x500GB. Mereka dikonfigurasi sebagai RAID1.

Tabel partisi menunjukkan ukuran yang tepat. Inilah sfdisk:

# sfdisk -d /dev/sdb
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=       63, size=   192717, Id=fd, bootable
/dev/sdb2 : start=   192780, size=  7807590, Id=fd
/dev/sdb3 : start=  8000370, size=968767695, Id=fd
/dev/sdb4 : start=        0, size=        0, Id= 0

Dan fdisk:

# fdisk -l /dev/sdb

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0006c78f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          12       96358+  fd  Linux raid autodetect
/dev/sdb2              13         498     3903795   fd  Linux raid autodetect
/dev/sdb3             499       60801   484383847+  fd  Linux raid autodetect

Tapi saya tidak melihat ruang baru:

root@green:~# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/md2              143G  134G  8.3G  95% /


root@green:~# mdadm --examine /dev/sdb3
/dev/sdb3:
          Magic : a92b4efc
        Version : 0.90.00
           UUID : b8f83980:f60d820c:74c46fbf:0baa68bc
  Creation Time : Sun Mar 29 18:48:46 2009
     Raid Level : raid1
  Used Dev Size : 152247936 (145.19 GiB 155.90 GB)
     Array Size : 152247936 (145.19 GiB 155.90 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 2

    Update Time : Mon Oct 10 19:22:36 2011
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 7b5debb7 - correct
         Events : 10729526


      Number   Major   Minor   RaidDevice State
this     0       8       19        0      active sync   /dev/sdb3
   0     0       8       19        0      active sync   /dev/sdb3
   1     1       8        3        1      active sync   /dev/sda3

Saya mencoba mdadm dan resize2fs:

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

# resize2fs /dev/md2 
resize2fs 1.41.14 (22-Dec-2010)
The filesystem is already 38061984 blocks long.  Nothing to do!

Ada ide?

Ditambahkan per permintaan

# cat /proc/mdstat 
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md2 : active raid1 sdb3[0] sda3[1]
      152247936 blocks [2/2] [UU]

md0 : active raid1 sdb1[0] sda1[1]
      96256 blocks [2/2] [UU]

md1 : active raid1 sdb2[0] sda2[1]
      3903680 blocks [2/2] [UU]

unused devices: <none>

partisi

# cat /proc/partitions 
major minor  #blocks  name

   8        0  488386584 sda
   8        1      96358 sda1
   8        2    3903795 sda2
   8        3  152248005 sda3
   8       16  488386584 sdb
   8       17      96358 sdb1
   8       18    3903795 sdb2
   8       19  152248005 sdb3
   9        1    3903680 md1
   9        0      96256 md0
   9        2  152247936 md2

berpisah:

# parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print all                                                        
Model: ATA WDC WD5000AAKX-0 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: ATA WDC WD5000AAKS-4 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      32.3kB  98.7MB  98.7MB  primary  ext3            boot, raid
 2      98.7MB  4096MB  3997MB  primary  linux-swap(v1)  raid
 3      4096MB  500GB   496GB   primary  ext3            raid


Model: Linux Software RAID Array (md)
Disk /dev/md1: 3997MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system     Flags
 1      0.00B  3997MB  3997MB  linux-swap(v1)


Model: Linux Software RAID Array (md)
Disk /dev/md0: 98.6MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  98.6MB  98.6MB  ext3


Model: Linux Software RAID Array (md)
Disk /dev/md2: 156GB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End    Size   File system  Flags
 1      0.00B  156GB  156GB  ext3

Komentar melalui email:

masalahnya ada di metadata, Anda hanya perlu merakit raid array dengan parameter --update devicesize

dan setelah itu -G / dev / md? -z max akan melakukan pekerjaan :)

Paul Schreiber
sumber
Apa output dari cat /proc/mdstat? Bagaimana dengan cat /proc/partitions?
Steven Monday
Output ditambahkan di atas.
Paul Schreiber
Anda belum menyebutkan bagaimana cara Anda menyalin data ke disk baru. Namun, itu bisa sangat mempengaruhi jawabannya.
poige
Saya mendapatkan data yang disalin pada disk baru dengan mempartisi mereka dengan sfdisk, menggunakan mdadm --add dan membiarkan sinkronisasi data selesai.
Paul Schreiber
@ Paul Schreiber, sfdiskAnda berkata (?) ... Apakah maksud Anda dengan mengatakan bahwa Anda juga menyalin skema partisi disk?
poige

Jawaban:

9

Gunakan saja

mdadm --grow --size max /dev/md2

Maka Anda akan dapat menggunakan

resize2fs /dev/md2

Untuk membiarkan sistem file cocok dengan ukuran serangan. Semua itu dilakukan secara online bahkan tanpa melepas md2.

Zaar Hai
sumber
1
Perintah lengkap:resize2fs -p /dev/md2
Milan Kerslager
@MilanKerslager, apa yang dilakukan di -psana?
Jaime Hablutzel
1
@JaimeHablutzel -p adalah persentase penyelesaian bar sehingga Anda tahu apa yang terjadi, karena mungkin butuh waktu (jawaban asli sudah diperbaiki).
Milan Kerslager
2

Saya secara teratur menggunakan mdadm dan menganggapnya sebagai salah satu utilitas Linux yang paling berbahaya. Namun, jika Anda menggunakan tindakan pencegahan keamanan yang benar, Anda dapat menghindari sebagian besar kasus kehilangan data potensial Cadangkan semua data Anda !!! saya telah digigit dua kali oleh mdadm di masa lalu, kehilangan lebih dari 700GB data dan sangat sedikit yang dapat dipulihkan, Anda telah diperingatkan.

Ada kemungkinan yang sangat baik Anda perlu membuat array RAID lagi karena mdadm tidak mengharapkan atau mengganti drive yang tiba-tiba bertambah besar ukurannya. Ini akan menggunakan ukuran yang dinyatakan dalam superblock raid dan bukan drive itu sendiri. Asalkan drive sudah disinkronkan, Anda seharusnya tidak memiliki banyak masalah.

Ingatlah jika Anda ingin mem-bootnya gunakan superblock versi 0.9.

Edit

Ini adalah bagaimana saya akan melakukannya, belum diuji !

Buat RAID1 dengan penyelaman yang hilang agar kami dapat dengan cepat menguji bahwa data tetap sementara masih memiliki drive lain dengan salinan data, metadata lama Anda adalah 0,90 sehingga kami akan menyimpan versi yang sama di sini.

mdadm --create /dev/md2 --level=mirror --metadata=0.90 --raid-devices=2 missing /dev/sdb3

Pasang untuk menguji apakah semuanya berfungsi

mkdir /mnt/test
mount /dev/md2 /mnt/test

periksa data Anda

   ls -l /mnt/test

Jika semuanya terlihat ok maka unmount drive dan ubah ukurannya.

unmount /mnt/md2
resize2fs /dev/md2

Setelah semua beres, Anda dapat menambahkan drive lain ke array.

mdadm --add /dev/md2 /dev/sdb3

dan tunggu hingga drive melakukan sinkronisasi ulang

cat / proc / mdstat

Silverfire
sumber
Apakah Anda punya saran khusus? yaitu langkah yang harus saya ambil?
Paul Schreiber
lihat edit saya di atas
Silverfire
/ dev / md2 sudah ada. Mengapa saya ingin membuatnya kembali? Dan: Saya harus mem-boot disk cadangan untuk mewujudkannya? Apakah ada cara saya dapat mengubah ukuran live ini?
Paul Schreiber
Langsung, mungkin tidak tetapi Anda mungkin dapat melakukannya dengan restart, jika Anda menghapus boot drive utama dari array Anda kemudian dapat membuat array baru di atasnya (beri nama / dev / md3 atau sesuatu) dengan drive yang hilang, sistem kemudian akan mem-boot array drive / raid yang baru dan kemudian Anda dapat menambahkan yang lama
Silverfire
Apa yang mungkin paling mudah adalah mengembalikan dari cadangan pada array baru.
Silverfire
2

Dari melihat / proc / partisi , jelas bahwa linux berpikir sda3 dan sdb3 lebih kecil dari mereka.

Jumlahkan ukuran partisi

8       17      96358 sdb1
8       18    3903795 sdb2
8       19  152248005 sdb3

dan Anda akan mendapatkan nomor yang jauh lebih rendah dari ukuran disk.

8       16  488386584 sdb

Blok 152248005 dari 1024 byte konsisten dengan ukuran mdadm --growdan resize2fsmelaporkan untuk md2 .

Apakah Anda awalnya membuat partisi ini dengan ukuran yang lebih kecil, kemudian menciptakannya kembali untuk memanfaatkan sisa disk? Jika demikian, reboot harus memungkinkan kernel untuk membaca kembali tabel partisi. Setelah itu, mengembangkan perangkat RAID dan mengubah ukuran sistem file akan berfungsi.

sciurus
sumber
Ya, itulah yang saya lakukan.
Paul Schreiber
Mesin digantung saat reboot. Berangkat untuk menyelidiki ...
Paul Schreiber