drbdsetup { device } disk { lower_dev } { meta_data_dev } { meta_data_index } [-d{size}] [-e{err_handler}] [-f{fencing_policy}] [-b]
drbdsetup { device } net [ af: ] { local_addr } [ :port ] [ af: ] { remote_addr } [ :port ] { protocol } [-c{time}] [-i{time}] [-t{val}] [-S{size}] [-r{size}] [-k{count}] [-e{max_epoch_size}] [-b{max_buffers}] [-m] [-a{hash_alg}] [-x{shared_secret}] [-A{asb-0p-policy}] [-B{asb-1p-policy}] [-C{asb-2p-policy}] [-D] [-R{role-resync-conflict-policy}] [-p{ping_timeout}] [-u{val}] [-d{hash_alg}] [-o] [-n]
drbdsetup { device } syncer [-a{dev_minor}] [-r{rate}] [-e{extents}] [-v{verify-hash-alg}] [-c{cpu-mask}] [-C{csums-hash-alg}] [-R] [-p{plan_time}] [-s{fill_target}] [-d{delay_target}] [-m{max_rate}] [-n{ond-policy}]
drbdsetup { device } disconnect
drbdsetup { device } detach
drbdsetup { device } down
drbdsetup { device } primary [-f] [-o]
drbdsetup { device } secondary
drbdsetup { device } verify [-s{start-position}]
drbdsetup { device } invalidate
drbdsetup { device } invalidate-remote
drbdsetup { device } wait-connect [-t{wfc_timeout}] [-d{degr_wfc_timeout}] [-o{outdated_wfc_timeout}] [-w]
drbdsetup { device } wait-sync [-t{wfc_timeout}] [-d{degr_wfc_timeout}] [-o{outdated_wfc_timeout}] [-w]
drbdsetup { device } role
drbdsetup { device } cstate
drbdsetup { device } dstate
drbdsetup { device } status
drbdsetup { device } resize [-d{size}] [-f{assume-peer-has-space}] [-c{assume-clean}]
drbdsetup { device } check-resize
drbdsetup { device } pause-sync
drbdsetup { device } resume-sync
drbdsetup { device } outdate
drbdsetup { device } show-gi
drbdsetup { device } get-gi
drbdsetup { device } show
drbdsetup { device } suspend-io
drbdsetup { device } resume-io
drbdsetup { device } events [-u] [-a]
drbdsetup { device } new-current-uuid [-c]
drbdsetupは、DRBDデバイスと下位レベルブロックデバイスを結びつける、DRBDデバイス間で下位レベルデバイス同士ミラーリングを設定する、現在実行中のDRBDデバイスの設定を検査する、などの目的で使用する。
サブコマンドの中には、独自の引数やオプションを持つものがある。すべての値にはデフォルトの単位があるが、K、M、またはGを明示的に指定することによって単位を変えられる。これらの単位はコンピュータでおなじみの方法で定義される(K = 2^10 = 1024、M = 1024 K、G = 1024 M)。
すべてのdrbdsetupサブコマンドに次のオプションを指定することができる。
--create-device指定したDRBDデバイスに対応するデバイスファイルがない場合、自動的に作成するするよう指定する。
--set-defaultsset-defaultsを指定すると、そのサブコマンドに関する全オプションのうち指定しなかったものを、デフォルト値に設定する。
下位デバイスの利用可能な全領域を使わなくてもいい場合に限り、-d (またはdisk-size)オプションを指定する。下位デバイスの利用可能な全領域を使わなくてもいい場合に限り、-d (またはdisk-size)オプションを指定する。このオプションを指定しなかった場合、対向ノードに接続できた後にデバイスが利用可能になる(netコマンドも参照)。
-d,
--disk-size sizeDRBDは利用できるデータ領域を自動的に決定する機能を持つ。対向ノードに接続することなくただちに下位デバイスを利用したい場合、このオプションを指定して、利用したいディスクサイズをsizeに指定する。デフォルトの単位はキロバイト((1 KB = 1024バイト)である。
drbd.conf に size パラメータを使用した場合、明確に単位を付与することを強く奨める。drbdadm と drbdsetup はデフォルトの単位で、しばしば不整合をおこす。
-e,
--on-io-error err_handler下位ドライバがエラーを報告したときにDRBDは次のいずれかの処理を行う。上位レイヤにそのエラーを伝える。ヘルパプログラムを実行する。デバイスから下位レベルデバイスを切り離して以後のI/Oを対向ペアに委ねる。err_handlers で設定できる値は、 pass_on、call-local-io-error または detachである。
-f,
--fencing fencing_policyフェンシングは、2つのノードがともにプライマリになること(スプリットブレイン)を防止し、どちらかを切り離す防御手段のことである。
次のフェンシングポリシーを指定できる。
dont-care
デフォルトの設定値で、フェンシングのためのアクションを実行しない。
resource-only
ノードが切り離されたプライマリ状態になると、DRBDは、DRBDは他ノードを無効状態に変えようとする。fence-peerハンドラを実行する。このハンドラには、レプリケーション用とは別のネットワーク経由で他ノードにアクセスし、'drbdadm outdate res'を実行するという機能が期待される。
resource-and-stonith
ノードが切り離されたプライマリ状態になると、DRBDはすべてのディスクI/Oを停止して fence-peerハンドラを呼び出す。このハンドラには、レプリケーション用とは別のネットワーク経由で他ノードにアクセスし、'drbdadm outdate res'を実行するという機能が期待される。ハンドラが他ノードにアクセスできない場合、DRBDはSTONITH機能を使って他ノードを強制排除する。これらが完了したら、ディスクI/Oを再開する。ハンドラの実行が失敗した場合、drbdsetupのresume-ioコマンドを使ってディスクI/Oを復旧させることができる。
-b,
--use-bmbv下位ストレージのドライバがmerge_bvec_fn()関数を備えている場合、DRBDは4キロバイトを越えない単位でのディスクI/Oリクエストだけを処理する。本マニュアル執筆時点では、この機能を備えているドライバは、md (ソフトウエアRAID)、dm (デバイスマッパ - LVM)、およびDRBD自身だけである。
ソフトウェアRAIDやその他のmerge_bvec_fn()関数を持つドライバの上位で DRBDを使う場合であって、全部のクラスタ構成ノードで同関数が同様に振る舞うことがわかっている場合 (すなわちソフトウェアRAIDなどを構成する物理的なディスクが同タイプである場合)、最高のパフォーマンスを得るにはこのパラメータを設定すべきである。 このオプションは、何をしているのかを理解した上でのみ使うように。
-a, --no-disk-barrier, -i, --no-disk-flushes, -D, --no-disk-drainDRBDは下位デバイスに対する複数のディスク書き込みの間の依存関係を指定するための 4種類のオプションを用意している。そのうちで、下位デバイスがサポートしていてユーザが無効に設定していない最初のオプションが使用される。
手法を選択するにあたっては、測定可能なパフォーマンスデータのみに頼るべきではない。下位デバイスが揮発性の書き込みキャッシュしか持たない場合 (通常のハードディスクや通常のハードディスクだけで構成されるRAIDなど)、以下の最初の2つのオプションを指定すべきである。下位デバイスにバッテリバックアップ機能付きの書き込みキャッシュがある場合には、3および4番目のオプションが利用できる。このような場合、4番目のオプションがもっとも高いパフォーマンスを発揮する。
残念なことに、デバイスマッパ(LVM)はバリアをサポートしていない。
/proc/drbd出力の"wo:"の後ろに下位デバイスに対する現在の設定がb、f、d、nという文字で表示される。オプションは次のとおり。
下位デバイスがバリア (SCSIでは"tagged command queuing"、SATAでは"native command queuing"と呼ばれる)をサポートしている場合、このオプションを選択できる。このオプションを無効にするにはno-disk-barrierを明示的に指定する。
下位デバイスがディスクフラッシュ (ベンダーは"force unit access"と呼んでいる)をサポートしている場合、このオプションを選択できる。このオプションを無効にするにはno-disk-flushesを明示的に指定する。
最初の書き込みは次の書き込みリクエストを処理する前に完了しなければならない。 このオプションは8.0.9までの唯一の処理方法であった。no-disk-drainを指定することによって、このオプションを無効にできる。
4番目のオプションは、下位デバイスへの書き込みと書き込みの間に明示的な依存関係を定義しない。
-m,
--no-md-flushesメタデータデバイスへのアクセスにあたってバリアやフラッシュを使用しない。no-disk-flushesについての説明を参照のこと。
-s,
--max-bio-bvecsある特別な環境において、デバイスマッパースタックは、DRBDにBIOsを渡す。例えば、物理ディスク → DRBD → LVM → Xen → 誤ったパーティション(63) → DomU FS の場合、カーネルログには、 "bio would need to, but cannot, be split:" と記録される。
最も良い回避方法は、VMの内部にパーティションを適切に配置する(例えば、セクタ1024から開始する)ことである。That costs 480 KiB of storage. 残念ながら、ほとんどのLinuxパーティションツールは、奇数 (63) でパーティションを開始する。そのため、ほとんどのディストリビューションは、仮想Linuxマシンにインストールを行うと、誤ったパーティションで終了してしまう。第2の解決方法は、BIOあたりの最大DRBD bvecs (=max-bio-bvecs)を1にすることである。しかし、パフォーマンスは低下する。
max-bio-bvecs のデフォルト値は 0 で、これはユーザに制限が無いことを意味する。
対向ノードからの接続をaf:local_addr:portで待ち受け、対向ノードのaf:remote_addr:portに接続するよう、DRBDデバイスをセットアップする。portを省略すると、デフォルトの7788が使われる。afを省略すると<o4>ipv4</o4>が使われる。サポートしている他のアドレスファミリにはipv6、ssocksおよびsdpがある。ssocks は Dolphin Interconnect Solutionの "Super sockets" を指す。sdp は Sockets Direct Protocol (Infiniband) を指す。
TCP/IPの通信の際に使われるDRBDのプロトコルを指定する。prot-idにはA、BまたはCを指定する。
プロトコルA: ローカルディスクとローカルTCP送信バッファにデータを書き込んだらディスクへの書き込みが完了したと判断する。
プロトコルB: ローカルディスクとリモートバッファキャッシュにデータを書き込んだらディスクへの書き込みが完了したと判断する。
プロトコルC: ローカルディスクとリモートディスクの両方にデータを書き込んだらディスクへの書き込みが完了したと判断する。
-c,
--connect-int time対向ノードにただちに接続できない場合、DRBDは接続を繰り返し試行する。このパラメータは試行間隔を指定する。デフォルト値は10で、このパラメータの単位は秒である。
-i,
--ping-int time2つのDRBDドライバ間の接続が確立していて、time秒の間に何も通信が行われなかった場合、DRBDは対向ノードが生きているか確認するためのパケットを送出する。デフォルト値は10で、このパラメータの単位は秒である。
-t,
--timeout val対向ノードからの応答パケットが 1/10秒のval倍の時間以内に返ってこない場合、対向ノードが死んだと判断して、TCP/IPコネクションを切断する。デフォルト値は60で、これは6秒に相当する。すなわちこのパラメータの単位は0.1秒である。
-S,
--sndbuf-size sizeソケット送信バッファは、セカンダリノードに送信するパケットを格納するために使われる。この中のパケットは、(ネットワーク的には)セカンダリ側から受信確認を受け取っていない。プロトコルAを使う場合は、両ノード間の同期を高めるために、このバッファサイズを増やす必要が生じる可能性がある。しかし、プライマリノードがフェイルしたときに失うデータが増えることも考慮しておく必要がある。8.0.13から8.2.7では、sizeに0を指定すると、カーネルの自動調整に任せることになる。デフォルトsizeは0である。
-r,
--rcvbuf-size sizeネットワークから受信したパケットは、最初にソケットの受信バッファに保存される。DRBDはこれを利用する。8.3.1以前は、ソケット受信バッファのサイズはソケット送信バッファと同じサイズに固定されていた。8.3.2からこれらを別々に設定できるようになっている。sizeに0を指定するとカーネルが自動的に設定する。デフォルトsizeは0である。
-k,
--ko-count countセカンダリノードが書き込みリクエストをcount回以上失敗した場合、そのセカンダリノードはクラスタから排除され、プライマリノードはStandAloneモードに遷移する。デフォルト値は0で、これは本機能が無効になることを意味する。
-e, --max-epoch-size
valこのオプションを指定すると、バリアとバリアの間の書き込みリクエスト数の最大値を制限できる。--max-buffers と同じ値を指定するのが望ましい。10より小さい値は、パフォーマンス低下をもたらす。デフォルト値は2048である。
-b,
--max-buffers valDRBD受信スレッドに割り当てるバッファページの最大値を指定する。--max-epoch-sizeと同じ値を指定するのが望ましい。小さい値はパフォーマンス低下をもたらすデフォルト値は2048で、最小は32である。
-u,
--unplug-watermark valセカンダリノード上に書き込まれていない書き込みリクエスト数がこの値を上回ると、下位デバイスに対して書き込みリクエストを送る。ストレージによっては小さい値でも良好な結果が得られるが、多くのデバイスではmax-buffersと同じ値を指定するときに最良の結果が得られる。デフォルト値は128で、指定できる最小値は16、最大値は131072である。
-m,
--allow-two-primaries このオプションを指定すると、両ノードにプライマリを割り当てられる。このオプションは分散共有ファイルシステムを使うときのみ指定する。現在DRBDがサポートするファイルシステムはOCFS2とGFSである。これら以外のファイルシステムを使うときにこのオプションを指定すると、データの破損とノードのダウンを引き起こす。
-a,
--cram-hmac-alg alg対向ノードの認証を行いたい場合、HMACアルゴリズムを指定する。対向ノードの認証は行うべきである。チャレンジ-レスポンス方式で対向ノードを認証するのに、HMACアルゴリズムが使われる。/proc/cryptoに記録されている任意のダイジェストアルゴリズムを指定できる。
-x,
--shared-secret secret対向ノードの認証に使う64文字までの共有秘密鍵を指定する。
-A,
--after-sb-0pri asb-0p-policyスプリットブレイン発生後に両ノードがプライマリになってしまった場合の処理を指定する。次のポリシーを指定できる。
disconnect
自動再同期を行わず接続を切断する。
discard-younger-primary
スプリットブレイン発生前にプライマリであったノードからの再同期を自動的に実行する。
discard-older-primary
スプリットブレイン発生時にプライマリになったノードからの再同期を自動的に実行する。
discard-zero-changes
スプリットブレイン発生後どちらか一方のノードに書き込みがまったく行われなかったことが明白な場合、書き込みが行われたノードから行われなかったノードに対する再同期が実行される。どちらも書き込まれなかった場合は、DRBDはランダムな判断によって0ブロックの再同期を実行する。両ノードに書き込みが行われた場合、このポリシーはノードの接続を切断する。
discard-least-changes
スプリットブレイン発生後、より多くのブロックを書き込んだノードから他方に対する再同期を実行する。
discard-node-NODENAME
指定した名前のノードに対する再同期を実行する。
-B,
--after-sb-1pri asb-1p-policyスプリットブレイン発生後に両ノードがプライマリになってしまった場合の処理を指定する。次のポリシーを指定できる。
disconnect
自動再同期を行わず接続を切断する。
consensus
after-sb-0priアルゴリズムの結果が現在のセカンダリノードのデータを壊すことになる場合、セカンダリノードのデータを捨てる。そうではない場合は接続を切断する。
discard-secondary
セカンダリ側のデータを捨てる。
call-pri-lost-after-sb
after-sb-0priアルゴリズムの判断をつねに採用する。セカンダリ側のデータが正しいと判断された場合には、現在のプライマリ側でpri-lost-after-sbハンドラが呼び出される。
violently-as0p
after-sb-0priアルゴリズムの判断をつねに採用する。現在のセカンダリ側が正しいデータを保持しているという結論になった場合でも、プライマリ側のデータの変更箇所を受け入れる。
-C,
--after-sb-2pri asb-2p-policyスプリットブレイン発生後に両ノードがプライマリになってしまった場合の処理を指定する。次のポリシーを指定できる。
disconnect
自動再同期を行わず接続を切断する。
call-pri-lost-after-sb
after-sb-0priアルゴリズムの判断をつねに採用する。セカンダリ側のデータが正しいと判断された場合には、現在のプライマリ側でpri-lost-after-sbハンドラが呼び出される。
violently-as0p
after-sb-0priアルゴリズムの判断をつねに採用する。現在のセカンダリ側が正しいデータを保持しているという結論になった場合でも、プライマリ側のデータの変更箇所を受け入れる。
-P,
--always-asbp3番目のノードが存在しないことが現在のUUID値から明らかな場合、通常のスプリットブレイン発生後の修復ポリシーたけが適用される。
このオプションを指定すると、両ノードのデータに関連性があると認められる場合のみ通常のスプリットブレイン発生後のポリシーが適用される。UUIDの分析により3番目のノードの存在が疑われる場合や、なんらかの別の原因によって間違ったUUIDセットで判断してしまった場合には、フル同期が行われるかもしれない。
-R,
--rr-conflict role-resync-conflict-policy同期先ノードがプライマリ状態のときに、いつ再同期を実行すべきかの判断方法を制御する。設定できる値は、disconnect、call-pri-lostまたはviolentlyである。disconnectは接続を切断する。call-pri-lostはpri-lostハンドラを呼び出す。このハンドラは、ノードの状態をセカンダリに切り替えるか、あるいはノードをクラスタから切り離す処理を実行するべきである。デフォルト値はdisconnectである。
violentlyを指定すると、プライマリノードを強制的に同期先(SyncTarget)にできる。このオプションを指定すると、即座に同期元(SyncSource)のデータに書き換えられる。このオプションは、何をしているのかを理解した上でのみ使うように。
-d,
--data-integrity-alg hash_algネットワーク経由で受け渡されるデータの整合性を担保するために、DRBDはハッシュ値を比較する機能を備えている。通常は、TCP/IPパケット自体のヘッダに含まれる16ビットチェックサムで保証される。オプション値には、カーネルがサポートする任意のダイジェストアルゴリズムを指定できる。一般的なカーネルの場合、少なくとも md5、sha1またはcrc32cのどれかが利用できる。デフォルトでは、この機能は無効である。
drbd.conf(5)のデータ整合性に関する説明も参照のこと。
-o,
--no-tcp-cork DRBDは、TCPソケットのTCP_CORKオプションを使って、いつ追加データを受け取るか、あるいは送信キューのデータをいつフラッシュするかのヒントを得ている。この方法が悪影響を及ぼすネットワークスタックが少なくとも存在する。このオプションを指定すると、TCP_CORKソケットオプションのセットやリセットが無効になる。
-p,
--ping-timeout ping_timeout生存監視パケットに対して対向ノードが応答しなければならない猶予時間を設定する。応答パケットが返ってこない場合、その対向ノードは死んだと判断される。デフォルト値は 5 (500ms) で、100ms単位で指定する。
-D,
--discard-my-data スプリットブレイン状態から復旧するときに、このオプションを手作業で指定する。自動的な復旧ポリシーを設定していない場合には、DRBDは接続を拒否する。このオプションを実行すると、そのノードは接続後ただちに同期先になる。
-n,
--dry-run 再同期を実行させない場合などにおいて、再同期ハンドシェーク後、DRBD接続プロセスを終了させる。DRBDがどの再同期を実行しているかについては、カーネルログで確認することができる。
DRBDデバイスの同期デーモンに対する設定パラメータを実行中に変更する。
-r,
--rate rateDRBDの上位レイヤの円滑な実行のために、バックグラウンドの同期作業が利用するバンド幅を制限できる。デフォルト値は250KiB/秒。
-a,
--after minorminorに指定したマイナー番号を持つデバイスが接続された後、このデバイスの再同期を開始する。接続されるまでの間はSyncPause状態になる。
-e,
--al-extents extentsDRBDはホットエリア(アクティブセット)を自動的に検出できる。このパラメータを指定すると、ホットエリアの大きさを制御できる。各エクステントは、下位デバイスの4メガバイトの領域になる。予定外の事情によってプライマリノードがクラスタから切り離されると、そのときのホットエリアのデータは、次回接続したときの再同期の対象になる。このデータ構造は、メタデータ領域に書き込まれる。したがって、アクティブセットの状態更新は、メタデータデバイスへの書き込みを引き起こす。エクステント値を大きくすると、再同期所要時間が長くなるが、メタデータの更新頻度を減らすことができる。extentsのデフォルト値は127で、指定できる最小値は7、最大値は3843である。
-v,
--verify-alg hash-algverifyサブコマンドでディスク内容をオンライン照合する際、DRBDはビット単位の比較ではなく、ブロックごとのハッシュ値を計算し、対向ノードのハッシュ値と比較する。照合に利用するハッシュアルゴリズムは、このパラメータで指定する。オプション値には、カーネルがサポートする任意のダイジェストアルゴリズムを指定できる。一般的なカーネルの場合、少なくとも md5、sha1またはcrc32cのどれかが利用できる。デフォルトでは、この機能は無効である。オンライン照合を有効にするには、このパラメータを明示的に設定する必要がある。
drbd.conf(5)のデータ整合性に関する説明も参照のこと。
-c,
--cpu-mask cpu-maskDRBDカーネルスレッドに対するCPUアフィニティマスクを指定する。 cpu-maskのデフォルト値は0で、DRBDカーネルスレッドは利用可能なすべてのCPUにまたがって動作することを表す。16進表現で指定する必要がある。この値が大きすぎると切り捨てられる。
-C,
--csums-alg hash-algcsums-algが指定されていない場合、再同期プロセスはすべてのマークされたデータブロックをコピー元からコピー先に転送する。このオプションを指定すると、マークされたデータブロックのハッシュ値を最初に送り、ハッシュ値が一致しないブロックについてのみデータを転送する。
バンド幅が小さい回線を使うとき、このオプションは有用である。クラッシュしたプライマリノードが復帰したとき、アクティビティログに記録されたすべてのブロックが再同期の対象となる。しかし大部分のブロックは同期が取れている。このため、csums-algを指定することによって、CPUの使用量と引き換えに必要な転送量を減らせる。
-R,
--use-rle再同期開始時のハンドシェークの過程で各ノードのビットマップが交換され、ビット単位のOR計算が行われる。これによって、どのブロックがダーティ(不一致)であるかについて、それぞれのノードは共通の認識を持つ。大容量デバイスではビットマップも大きくなり、バンド幅が小さいネットワークではその交換に時間を要する。典型的なビットマップは、すべてがセットされていない(クリーン)あるいはセットされている(ダーティ) いくつかのエリアに分かれている。
このため、単純ではあるがランレングスエンコーディングを採用することにより、ビットマップ交換のためのネットワークトラフィックを顕著に減らすことができる。
過去のバージョンとの互換性のため、また高速ネットワークでは転送時間改善効果が少なくCPU使用量が増えるため、デフォルトではこの機能は無効である。
8.3.2以降で指定できる。
-p,
--c-plan-ahead plan_time, -s,
--c-fill-target fill_target, -d,
--c-delay-target delay_target, -M,
--c-max-rate max_rate動的な再同期速度コントローラは plan_time に0より大きな値を設定することにより有効になる。それは、データパスを通してfill_targetデータ定数または delay_target で示す遅延時間に従ってバッファを同期しようとする。コントローラは、 max_rate を上限とします。
plan_time によりコントラーの機敏性が設定される。大きな値を設定すると、同期先ボリュームから逸脱するため、コントローラのレスポンスが遅くなる。それは少なくとも5回のRTTである。通常のデータパスは、4k から 100k の領域につき、1つのfill_targetが適切である。DRBD Proxy を使用する設定では、これの代わりにdelay_targetを使用することを推奨する。fill_target が 0 に設定されたときのみ、コントローラは delay_target を利用する。5 回の RTT は適切な開始値である。Max_rate は、DRBDホストと DRBD Proxy をホスティングしているマシンとの間で有効なバンド幅、もしくは、ディスクバンド幅に設定する必要がある。
plan_timeのデフォルト値は 0 で、100ms単位で指定する。Fill_target のデフォルト値は 0 で、セクタ単位で指定する。Delay_target のデフォルト値は 1 (100ms) で、100ms単位で指定する。Max_rate のデフォルト値は 10240 (100MiB/s) で、KiB/s 単位で指定する。
-m,
--c-min-rate min_rate再同期の際、ディスクIO速度を監視すると、下位レベルデバイスが再同期していないことがわかる。下位レベルデバイスがビジーで、再同期速度が min_rate を超えている場合、非同期の処理を調整する。
min_rate のデフォルト値は 4Mで、k単位で指定する。調整されたくない場合は 0を設定する。常に調整する場合は 1 を設定する。
-n,
--on-no-data-accessible ond-policyこの設定は、ディスクレスモードが発生した際の操作を指定する。設定できるポリシーは、 io-error と suspend-ioである。
ond-policy に suspend-io を設定すると、最後に接続していたデータストレージから、もしくは、 drbdadm resume-io res コマンドにより、IO を再開することができる。後者はもちろん IO エラーを発生させる。
デフォルトは、 io-error である。この設定は、DRBD 8.3.9 から有効である。
デバイス(device)のロール(役割)をプライマリに切り替える。アプリケーション(この場合はファイルシステムなど)はデバイスを読み書きモードでオープンできるようになる。プライマリロールのデバイスに書き込んだデータは、セカンダリ状態のディスクにミラーされる。
通常の実行状態では、DRBDデバイスペアの両方を同時にプライマリに切り替えることはできない。--allow-two-primariesを指定すると、デフォルトの実行方法を変更して両ノードをともにプライマリにできる。
-o,
--overwrite-data-of-peer--force のエイリアスです。
-f,
--forceローカルディスクの複製物が最新(UpToDate)でない場合は、プライマリになれない。 このオプションを指定すると、状況に関係なくプライマリに切り替えられる。このオプションは、何をしているのかを理解した上でのみ使うように。
デバイス(device)のロールをセカンダリに切り替える。何らかのアプリケーションが書き込みモードでデバイスをオープンしている間は、この操作は失敗する。
DRBDデバイスペアの両方がともにセカンダリ状態になることは問題なく可能である。
オンライン状態でデバイスを照合する。オンライン照合は、ローカルノードの全ブロックを対向ノードの対応するブロックと比較することである。照合の進行状況は、/proc/drbdを通じてモニタできる。ローカルディスクと対向ホストで内容が異なるブロックは、DRBDのディスク上ビットマップに不整合としてマークされる。照合で見つかった不整合の自動的な再同期は行われない。再同期を行うには、いったんリソースの接続を切って再接続すればよい。
すでにオンライン照合が進行中の場合、このコマンドはエラーにならず何も起こらない。
deviceが接続ずみのデバイスペアと一致しない場合、このコマンドの実行は失敗する。
drbd.conf(5)のデータ整合性に関する説明も参照のこと。
-s,
--start start-sectorバージョン8.3.2以降でこのオプションが利用できる。接続が切れて復旧したとき、オンライン照合は直前の最後の位置から再開する。このオプションを指定すると、任意の位置から照合を開始できる。
デフォルトの単位はセクタである。単位を明示的に指定することもできる。開始セクタは8セクタ(4KB)の倍数に丸めて切り捨てられる。
接続されたDRBDデバイスペアのローカル側をSyncTarget状態に切り替える。これにより、対向ホスト側のすべてのデータブロックがローカルディスクにコピーされる。
deviceが接続ずみのデバイスペアと一致しない場合、このコマンドの実行は失敗する。
接続されたDRBDデバイスペアのローカルデバイス側をSyncSource状態に切り替える。これにより、ローカルディスクのすべてのデータブロックが対向ペアにコピーされる。
切断されたデバイスでは、すべてのビットが同期していないビットマップに設定される。これにより、ディスクのアクティビティログの更新が一時停止する。ディスクのアクティビティログが更新されると、必要に応じて自動的に再開される。
デバイスが対向ペアと通信可能になるまで待機する。
-t,
--wfc-timeout wfc_timeout, -d,
--degr-wfc-timeout degr_wfc_timeout, -o,
--outdated-wfc-timeout outdated_wfc_timeout, -w, --wait-after-sbtimeout秒以内に対向ペアと通信できなければ、このコマンドは失敗する。リブート以前にペアがともに動作していた場合には、wfc_timeoutパラメータの値が、リブート以前にペアの接続が切れていた場合には、degr_wfc_timeoutパラメータの値が使われる。このノードが再起動される前に対向ノードを無効にする場合は outdated_wfc_timeout を使う。wfc_timeoutのデフォルト値は0で、接続されるまで永久に待機することを表す。degr_wfc_timeoutのデフォルト値は120秒である。スプリットブレイン状態が起きたためにデバイスが接続された後StandaAlone状態になってしまった場合、このコマンドは失敗する。--wait-after-sbを指定すると、デフォルトの動作を変更できる。
現在のデバイスの状態をXMLに似た形式で表示する。次のように出力される。
<resource minor="0" name="s0" cs="SyncTarget" st1="Secondary" st2="Secondary"
ds1="Inconsistent" ds2="UpToDate" resynced_precent="5.9" />
下位レベルデバイスのサイズを再評価する。実際には、両方の下位レベルデバイスのサイズを大きく変更した後に、各ノードでそれぞれresizeコマンドを実行する。
--assume-peer-has-space により、現在対向ノードに接続されていないデバイスのサイズを変することができる。対向ノードのディスクサイズを同様に変更しないと、以降接続が失敗するので注意すること。
--assume-clean オプションを設定すると、DRBDは新しいストレージに対して再同期をスキップする。新しいストレージが、別の方法で初期化されていることが確認できている場合のみ、これを設定すること。
DRBDが下位デバイスのオフラインリサイズを検知できるようにするため、このコマンドは下位デバイスの現在のサイズを記録するために使用される。サイズは、 /var/lib/drbd/drbd-minor-??.lkbd に記録される。
このコマンドは、drbdsetup device resize がリターンした後に、 drbdadm resize resからコールされる。
ローカルメタデータの一時停止フラグをセットして、進行中の再同期を一時停止する。再開させるには、ローカルと他ノードの両方の一時停止フラグをクリアする必要がある。下位レベルデバイスのRAIDを再構成しているときなど、DRBDの再同期を一時停止するのが望ましい場合がある。
自ノードの下位レベルデバイスの内容が「無効」であるとマークする。無効ノードはプライマリになれない。このコマンドは通常、fencingや対向ペアのfence-peerハンドラと組み合わせて利用する。
fencingポリシーがresource-and-stonithで、かつoutdate-peerハンドラの実行が失敗した場合、このコマンドを実行することによって凍結されていたディスクI/Oを再開できる。
DRBDのすべての状態変化とヘルパープログラムの呼び出し経緯を表示する。このコマンドは、DRBDの状態変化を他のプログラムにパイプで渡したいときに利用できる。
-a, --all-devicesすべてのDRBDデバイスの状態を表示する。
-u,
--unfilteredこのオプションはデバッグ用である。すべてのネットリンクレイやの受信メッセージの内容を表示する。
現在のUUIDを生成して、他のすべてのUUIDをローテートする。このコマンドには2とおりの利用シーンが考えられる。まず、初期同期を省略できる。また、1台で設定を行った後遠隔サイトに運搬することによりネットワーク帯域を節約するためにも利用できる。
次のオプションを指定できる。
-c、--clear-bitmap現在UUID値を生成すると同時に同期ビットマップをクリアする。
このオプションは、ゼロから新規に構築する場合に初期同期を省略するために利用できる。この方法は、たった今作ったばかりのメタデータに対してのみ意味を持つ。必要なステップは以下のとおりである。
両方のノードでメタデータを初期化してデバイスを設定する。
drbdadm -- --force create-md res
それぞれのディスクサイズを知るために初期ハンドシェークが必要になる。
drbdadm up res
Secondary/Secondary Inconsistent/Inconsistentの状態で接続し、新しい現在UUIDを作りダーティなビットマップをクリアする。
drbdadm -- --clear-bitmap new-current-uuid res
Secondary/Secondary UpToDate/UpToDateの状態で接続される。片方をプライマリに切り替えてファイルシステムを作成する。
drbdadm primary res
mkfs -t fs-type $(drbdadm sh-dev res)
この方法の明らかな欠点は、別の方法でディスク内容を同一にしない限り、複製物全体に古いゴミのデータが残ることである。このため、オンライン照合は多数の非同期ブロックを見出してしまう。
この方法は、すでにデータが入っているディスクに対して適用してはならない。最初のうちは働いているように見える。実際のレプリケーションが行われていないために、いったん他ノードに切り替えてしまうと、データは壊れた状態になってしまう。このため、mkfs (またはその他の同等な機能を持つ領域の初期化)を省略してはならない。
このコマンドは、最初のノードを本稼働させた後でディスク自体を2番目のノードに移すという手法により、クラスタの初期化時間を短縮する目的にも適用できる。この方法は、切断されたデバイスに対してのみ有効である。デバイスのロールはプライマリでもセカンダリでもよい。
必要なステップは以下のとおりである。
device new-current-uuid --clear-bitmapdevice new-current-uuidこのディスクを2番目のノードに挿入してクラスタに参加させる。ステップ1でdrbdsetupを実行した後の変更箇所に対する再同期が実行される。