リソースのサイズ変更

オンラインで拡張する

動作中(オンライン)に下位ブロックデバイスを拡張できる場合は、これらのデバイスをベースとするDRBDデバイスについても動作中にサイズを拡張することができます。その際に、次の2つの条件を満たす必要があります。

  1. 影響を受けるリソースの下位デバイスが、 LVMやEVMSなどの論理ボリューム管理サブシステムによって管理されている。

  2. 現在、リソースの接続状態がConnectedになっている。

両方のノードの下位ブロックデバイスを拡張したら、一方のノードだけがプライマリ状態であることを確認してください。プライマリノードで次のように入力します。

drbdadm resize resource

新しいセクションの同期がトリガーされます。同期はプライマリノードからセカンダリノードへ実行されます。

オフラインで拡張する

外部メタデータを使っている場合、DRBD停止中に両ノードの下位ブロックデバイスを拡張すると、新しいサイズが自動的に認識されます。管理者による作業は必要ありません。両方のノードで次にDRBDを起動した際に、 DRBDデバイスのサイズが新しいサイズになり、ネットワーク接続が正常に確立します。

DRBDリソースで内部メタデータを使用している場合は、リソースのサイズを変更する前に、メタデータを拡張されるデバイス領域の後ろの方に移動させる必要があります。これを行うには次の手順を実行します:

[警告]警告

これは高度な手順です。慎重に検討した上で実行してください。

  1. DRBDリソースを停止します。

    drbdadm down resource
  2. 拡張する前に、メタデータをテキストファイルに保存します。

    drbdadm dump-md resource > /tmp/metadata

    各ノードごとにそれぞれのダンプファイルを作成する必要があります。この手順は、両方のノードでそれぞれ実行します。一方のノードのメタデータのダンプを対向ノードにコピーすることは避けてください。これはうまくいきません。

  3. 両方のノードの下位ブロックデバイスを拡大します。

  4. これに合わせて、両方のノードについて、 /tmp/metadataファイルのサイズ情報(la-size-sect)を書き換えます。la-size-sectは、必ずセクタ単位で指定する必要があります。

  5. メタデータ領域の再初期化:

    drbdadm create-md resource
  6. 両方のノード上で修正のメタデータをインポートします:

    drbdmeta_cmd=$(drbdadm -d	dump-md test-disk)
    ${drbdmeta_cmd/dump-md/restore-md} /tmp/metadata
     Valid meta-data in place, overwrite?[need to type 'yes' to confirm] yes
     Successfully restored meta data

    [注記]注記

    この例ではbashパラメータ置換を使用しています。他のシェルの場合、機能する場合もしない場合もあります。現在使用しているシェルがわからない場合は、 SHELL 環境変数を確認してください。

  7. DRBD リソースを再度有効にします。

    drbdadm up resource
  8. 片側のノードでDRBDリソースをプライマリにします

    drbdadm primary resource
  9. 最後に、拡張したDRBDデバイスを活用するために、ファイルシステムを拡張します。

オンラインで縮小する

DRBDデバイスを縮小する前に、 DRBDの上位層(通常はファイルシステム)を縮小する必要があります。ファイルシステムが実際に使用している容量を、 DRBDが知ることはできないため、データが失われないように注意する必要があります。

[注記]注記

ファイルシステムをオンラインで縮小できるかどうかは、使用しているファイルシステムによって異なります。ほとんどのファイルシステムはオンラインでの縮小をサポートしません。XFSは縮小そのものをサポートしません。

内部メタデータを使用している場合は、メタデータに必要な領域を考慮してください。drbdadm resize に送られるサイズはファイルシステムの正味サイズです。内部メタデータの場合、DRBDが必要とする総サイズはこれより大きくなります(「メタデータサイズの見積り」も参照)。

オンラインでDRBDを縮小するには、その上位に常駐するファイルシステムを縮小した後に、次のコマンドを実行します。

drbdadm -- --size=new-size resize resource

new-sizeには通常の乗数サフィックス(K、M、G など)を使用できます。DRBDを縮小したら、DRBDに含まれるブロックデバイスも縮小できます(デバイスが縮小をサポートする場合)。

オフラインで縮小する

DRBDが停止しているときに下位ブロックデバイスを縮小すると、次にそのブロックデバイスを接続しようとしてもDRBDが拒否します。これは、ブロックデバイスが小さすぎる(外部メタデータを使用する場合)、またはメタデータを見つけられない(内部メタデータを使用する場合)ことが原因です。この問題を回避するには、次の手順を行います (オンライン縮小を使用できない場合)。

[警告]警告

これは高度な手順です慎重に検討した上で実行してください。

  1. DRBDがまだ動作している状態で、一方のノードのファイルシステムを縮小します。

  2. DRBDリソースを停止します。

    drbdadm down resource
  3. 縮小する前に、メタデータをテキストファイルに保存します。

    drbdadm dump-md resource > /tmp/metadata

    各ノードごとにそれぞれのダンプファイルを作成する必要があります。この手順は、両方のノードでそれぞれ実行します。一方のノードのメタデータのダンプを対向ノードにコピーすることは避けてください。これはうまくいきません。

  4. 両方のノードの下位ブロックデバイスを縮小します。

  5. これに合わせて、両方のノードについて、 /tmp/metadataファイルのサイズ情報(la-size-sect)を書き換えます。la-size-sectは、必ずセクタ単位で指定する必要があります。

  6. 内部メタデータを使用している場合は、メタデータ領域を再初期化します。この時点では、縮小によりおそらく内部メタデータが失われています。

    drbdadm create-md resource
  7. 両方のノード上で修正のメタデータをインポートします:

    drbdmeta_cmd=$(drbdadm -d	dump-md test-disk)
    ${drbdmeta_cmd/dump-md/restore-md} /tmp/metadata
       Valid meta-data in place, overwrite?[need to type 'yes' to confirm] yes
       Successfully restored meta data

    [注記]注記

    この例ではbashパラメータ置換を使用しています。他のシェルの場合、機能する場合もしない場合もあります。現在使用しているシェルがわからない場合は、 SHELL 環境変数を確認してください。

  8. DRBD リソースを再度有効にします。

    drbdadm up resource