ディスクの表示サイズをアップグレードするときにRAIDを拡張/サイズ変更


10

最初は、ディスクあたり2TBしかアドレスできないコントローラーを使用してソフトウェアRAIDを作成しました。ディスクは3 TBのディスクです。正常に機能しましたが、各ディスクの最初の2TBのみを使用しました。

コントローラーを変更して、3TB全体を表示しました。したがって/dev/md0、最後の1 TBも使用したいと思います。

私が試してみました:

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

しかし、ご覧のとおり、2TBしか見えません。私がそれをより強く強制しようとすると:

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

したがって、システムはどういうわけかディスクが3TB(で/proc/partitions)であることを認識できますが、RAIDはそれらを3TBとして認識できません。

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

ディスクサイズ:

# 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

編集:

# 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はディスク全体を使用します(つまり、パーティションはありません)。

今朝、システムがクラッシュしました。再起動後、システムはRAIDを検出しませんでした(これはひどいものでした)。すべてのディスクがスペア(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

ここでもmdadm3 TBのサイズが見つからなかったことは明らかです。

走りましたmdadm --stop /dev/md0。/etc/mdadm/mdadm.confのエントリを削除しました。蘭 mdadm -A --scan --forceRAIDがオンライン来て、再構築させ、。


RAID6に20個のディスク全体を使用していますか?各ディスクにパーティションはありませんか?何がfdisk -l /dev/sdd表示されますか?使用しているOS、mdadm-versionは何ですか?
ニルス

回答:


5

私は/ sysをざっと見て、答えにかなり近づきました。

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

それは私たちが以前に見たものと一致します。しかしこれは:

# 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が誤ったサイズを表示する理由を説明しているようです。ほとんどのドライブは2TBと表示されますが、交換された2つは3TBと表示されます。すべてのドライブは同じモデルなので、認識されるサイズを変更できるかどうかを見てみましょう。

# 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

出来上がり。ただし、Component_sizeはまだ小さいです。

# cat component_size
2147479552

多分それはmdadmで変更できます:

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

残念ながらこれはロックされmdadm、その後の/ dev / md0へのアクセスはブロックされます。そして、component_sizeへのアクセスも同様です。

# cat component_size   # This blocks

吸います。しかし、良い点は、syslogでそれが言うことです:

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

/ dev / md0上のファイルシステムは引き続き実行されました。

再起動後、もう一度「mdadm --grow / dev / md0 --size = max」を実行する必要がありました。その後resync、完了するのを待ちます。再び/ dev / md0へのアクセスがブロックされました。したがって、さらに別の再起動が行われxfs_growfs /dev/md0、その後、サイズ変更が完了しました。


私はparallel(1)プラグ、Oleを非常に気に入っていました:)調査をありがとう、ちょうど同じようなケースをヒットしました。
マイケルShigorin 2013

1
「mdadm --update = devicesize」でもそれができると思います。manページを参照してください。
rudimeier 2014

3

作成中に、デバイスのサイズがメタデータのどこかに登録されたと思います。コントローラを変更してもメタデータは変更されません。

mdからスペアを削除し、新しいドライブとしてRAIDセットに再度追加します。おそらくメタデータを削除する必要があります(--zero-superblockのmanページを確認するか、ディスク全体を消去してください)。それが単一のディスクで機能する場合は、残りのすべてのドライブに対しても手順を繰り返します。次に、最後に--growを実行します。

同期が完了するまで追加のディスクを取り外さないでください!!


これが実際に機能するかどうかをテストしたかどうかは不明です。再構築には約1.5日かかります。20台すべてのドライブを交換すると、1か月間、パフォーマンスが低下します。「それが単一のディスクで機能する場合」と書くとき、それが単一のディスクで機能することをどのようにテストしますか?
Ole

いいえ、私はこれをテストしていませんが、以前にいくつかのmdの問題を見たことがありますが、それがどのように機能するかについて少し感じています...そして失敗します。私はそれをテストするために悪いメタデータを備えたドライブを持っていません。長い同期時間を知っているので、スペアを使用することをお勧めします。RAID6があります。つまり、2つのドライブに障害が発生し、スペアが1つあります。つまり、問題が発生する前に故障する可能性のあるドライブが合計3つあります。あなたは単一のドライブで確認することができます、少なくともあなたはこれがあなたの問題であるかどうか知っています。私はあなたのセットアップについて限られた情報しか持っていません。慣れていない場合は、RAIDセットからドライブを
引き出さ

ああ、あなたの質問を理解しました。mdadmは、他のデバイスよりもはるかに大きいデバイスを追加しようとしていることを警告します。数バイトについては問題ありませんが、差が比較的大きい場合は警告が表示されます。
ジッピー

1
あなたはすることができfail、ドライブ、そしてremoveそれは、その後、zero-superblockそれは、メタデータを削除します。RAIDセットが使用中の場合は、それをスペアとして追加することもできます。つまり、別のドライブが故障するまで(つまり、正常な動作です)、同期は行われませんが、単一のドライブでのみ機能するか、ユーザーがadd同期する必要があります。私はそれが永遠にかかることを知っています。または、利用可能なすべてのストレージを追加できないという事実を受け入れます。パーティションテーブルを使用しない利点の1つ。パーティションテーブルを使用しないことは悪くありませんが、この特定のケースでは役に立ちました。
ジッピー2012

1
上記の私のコメントを参照してください。「mdadmは、他のデバイスよりもはるかに大きいデバイスを追加しようとしていることを警告します。」
ジッピー2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.