mdadmでRAID1アレイのサイズを変更する方法は?


12

Ubuntu 11.04(カーネル2.6.38-11)を実行しています。2x160GBを2x500GBドライブに交換しました。それらはRAID1として構成されます。

パーティションテーブルは適切なサイズを示しています。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

そして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

しかし、私は新しいスペースを見ていません:

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

私はmdadmと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!

何か案は?

リクエストごとに追加

# 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>

パーティション

# 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

別れた:

# 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

メールでコメント:

問題はメタデータにあり、パラメータ--update devicesizeでraid配列を組み立てるだけです

そしてその後-G / dev / md?-z maxはジョブを完了します:)


の出力はcat /proc/mdstat何ですか?どうcat /proc/partitions
スティーブン

上記の出力を追加しました。
ポールシュライバー

データを新しいディスクにコピーする方法については言及していません。ただし、回答に大きく影響する可能性があります。
poige

mdadm --addを使用してデータをsfdiskでパーティション化し、データを同期させることで、新しいディスクにデータをコピーしました。
ポールシュライバー

@Paul Schreiber、sfdiskあなたは(?)と言います…ディスクパーティションスキーマもコピーしたということですか?
poige

回答:


9

使うだけ

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

その後、使用できるようになります

resize2fs /dev/md2

ファイルシステムがRAIDサイズに一致するようにします。これらはすべて、md2をアンマウントすることなくオンラインで行われます。


1
完全なコマンド:resize2fs -p /dev/md2
ミラノカースラーガー

@MilanKerslager、-pそこで何をしているの?
ハイメハブルツェル

1
@JaimeHablutzel -pはパーセンテージ補完バーであるため、時間がかかる場合があるため、何が起こっているかがわかります(元の回答は既に修正されています)。
ミラノカースラーガー

2

私は定期的にmdadmを使用しており、最も危険なLinuxユーティリティの1つだと考えています。ただし、正しい安全対策を講じれば、ほとんどのデータ損失の可能性を回避できます。すべてのデータをバックアップしてください !!! 私は過去にmdadmに2回噛まれましたが、700GBを超えるデータを失いましたが、ほとんど回復できませんでした、と警告されました。

mdadmは、突然サイズが大きくなるドライブを予期または補正しないため、RAIDアレイを再度作成する必要がある可能性が非常に高くなります。ドライブ自体ではなく、RAIDスーパーブロックに記載されているサイズを使用します。ドライブが既に同期されていれば、多くの問題は発生しないはずです。

起動する場合は、スーパーブロックバージョン0.9を使用してください。

編集

これは、テストされていない方法です!

失われたダイブでRAID1を作成し、データのコピーがある別のドライブを使用しながらデータが残っていることをすばやくテストできるようにします。古いメタデータは0.90であったため、ここで同じバージョンを保持します。

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

マウントして、すべてが機能することをテストします

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

データを確認してください

   ls -l /mnt/test

すべて問題ない場合は、ドライブをアンマウントしてサイズを変更します。

unmount /mnt/md2
resize2fs /dev/md2

それでよければ、もう一方のドライブをアレイに追加できます。

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

ドライブが再同期するのを待ちます

猫/ proc / mdstat


具体的な提案はありますか?すなわち、私がとるべき手順は?
ポールシュライバー

上記の私の編集を見てください
Silverfire

/ dev / md2はすでに存在します。なぜ再作成したいのですか?そして:これを実現するには、レスキューディスクから起動する必要がありますか?このライブのサイズを変更する方法はありますか?
ポールシュライバー

ライブではないかもしれませんが、再起動でそれを行うことができる場合があります。アレイからプライマリブートドライブを削除した場合、その上に新しいドライブを作成できます(/ dev / md3または何かと名前を付けます)。その後、システムは、新しいドライブ/ RAIDアレイのブートし、その後、あなたは古いものを追加することができます
Silverfire

ただし、おそらく最も簡単なのは、新しいアレイのバックアップから復元することです。
シルバーファイア

2

/ proc / partitionsを見ると、Linuxはsda3sdb3がそれらよりも小さいと考えていることが明らかです。

パーティションのサイズを合計する

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

また、ディスクのサイズよりもはるかに小さい数値が得られます。

8       16  488386584 sdb

1024バイトの152248005ブロックはサイズmdadm --growと一致しており、md2resize2fsについて報告しています

最初にこれらのパーティションを小さいサイズで作成してから、後で再作成して残りのディスクを利用しましたか?その場合、リブートすると、カーネルがパーティションテーブルを再読み取りできるようになります。その後、RAIDデバイスの成長とファイルシステムのサイズ変更が機能するはずです。


はい、それはまさに私がやったことです。
ポールシュライバー

再起動時にマシンがハングしました。調査のためにオフ
ポールシュライバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.