DRBDSETUP(8) System Administration DRBDSETUP(8)

drbdsetup - DRBD を設定するツール

drbdsetup new-resource resource [--cpu-mask {val}] [--on-no-data-accessible {io-error | suspend-io}]

drbdsetup new-minor resource minor volume

drbdsetup del-resource resource

drbdsetup del-minor minor

drbdsetup attach minor lower_dev meta_data_dev meta_data_index [--size {val}] [--max-bio-bvecs {val}] [--on-io-error {pass_on | call-local-io-error | detach}] [--fencing {dont-care | resource-only | resource-and-stonith}] [--disk-barrier] [--disk-flushes] [--disk-drain] [--md-flushes] [--resync-rate {val}] [--resync-after {val}] [--al-extents {val}] [--al-updates] [--discard-zeroes-if-aligned] [--disable-write-same] [--c-plan-ahead {val}] [--c-delay-target {val}] [--c-fill-target {val}] [--c-max-rate {val}] [--c-min-rate {val}] [--disk-timeout {val}] [--read-balancing {prefer-local | prefer-remote | round-robin | least-pending | when-congested-remote | 32K-striping | 64K-striping | 128K-striping | 256K-striping | 512K-striping | 1M-striping}] [--rs-discard-granularity {val}]

drbdsetup connect resource local_addr remote_addr [--tentative] [--discard-my-data] [--protocol {A | B | C}] [--timeout {val}] [--max-epoch-size {val}] [--max-buffers {val}] [--unplug-watermark {val}] [--connect-int {val}] [--ping-int {val}] [--sndbuf-size {val}] [--rcvbuf-size {val}] [--ko-count {val}] [--allow-two-primaries] [--cram-hmac-alg {val}] [--shared-secret {val}] [--after-sb-0pri {disconnect | discard-younger-primary | discard-older-primary | discard-zero-changes | discard-least-changes | discard-local | discard-remote}] [--after-sb-1pri {disconnect | consensus | discard-secondary | call-pri-lost-after-sb | violently-as0p}] [--after-sb-2pri {disconnect | call-pri-lost-after-sb | violently-as0p}] [--always-asbp] [--rr-conflict {disconnect | call-pri-lost | violently}] [--ping-timeout {val}] [--data-integrity-alg {val}] [--tcp-cork] [--on-congestion {block | pull-ahead | disconnect}] [--congestion-fill {val}] [--congestion-extents {val}] [--csums-alg {val}] [--csums-after-crash-only] [--verify-alg {val}] [--use-rle] [--socket-check-timeout {val}]

drbdsetup disk-options minor [--on-io-error {pass_on | call-local-io-error | detach}] [--fencing {dont-care | resource-only | resource-and-stonith}] [--disk-barrier] [--disk-flushes] [--disk-drain] [--md-flushes] [--resync-rate {val}] [--resync-after {val}] [--al-extents {val}] [--al-updates] [--discard-zeroes-if-aligned] [--disable-write-same] [--c-plan-ahead {val}] [--c-delay-target {val}] [--c-fill-target {val}] [--c-max-rate {val}] [--c-min-rate {val}] [--disk-timeout {val}] [--read-balancing {prefer-local | prefer-remote | round-robin | least-pending | when-congested-remote | 32K-striping | 64K-striping | 128K-striping | 256K-striping | 512K-striping | 1M-striping}] [--rs-discard-granularity {val}]

drbdsetup net-options local_addr remote_addr [--protocol {A | B | C}] [--timeout {val}] [--max-epoch-size {val}] [--max-buffers {val}] [--unplug-watermark {val}] [--connect-int {val}] [--ping-int {val}] [--sndbuf-size {val}] [--rcvbuf-size {val}] [--ko-count {val}] [--allow-two-primaries] [--cram-hmac-alg {val}] [--shared-secret {val}] [--after-sb-0pri {disconnect | discard-younger-primary | discard-older-primary | discard-zero-changes | discard-least-changes | discard-local | discard-remote}] [--after-sb-1pri {disconnect | consensus | discard-secondary | call-pri-lost-after-sb | violently-as0p}] [--after-sb-2pri {disconnect | call-pri-lost-after-sb | violently-as0p}] [--always-asbp] [--rr-conflict {disconnect | call-pri-lost | violently}] [--ping-timeout {val}] [--data-integrity-alg {val}] [--tcp-cork] [--on-congestion {block | pull-ahead | disconnect}] [--congestion-fill {val}] [--congestion-extents {val}] [--csums-alg {val}] [--csums-after-crash-only] [--verify-alg {val}] [--use-rle] [--socket-check-timeout {val}]

drbdsetup resource-options resource [--cpu-mask {val}] [--on-no-data-accessible {io-error | suspend-io}]

drbdsetup disconnect local_addr remote_addr [--force]

drbdsetup detach minor [--force]

drbdsetup primary minor [--force]

drbdsetup secondary minor

drbdsetup down resource

drbdsetup verify minor [--start {val}] [--stop {val}]

drbdsetup invalidate minor

drbdsetup invalidate-remote minor

drbdsetup wait-connect minor [--wfc-timeout {val}] [--degr-wfc-timeout {val}] [--outdated-wfc-timeout {val}] [--wait-after-sb {val}]

drbdsetup wait-sync minor [--wfc-timeout {val}] [--degr-wfc-timeout {val}] [--outdated-wfc-timeout {val}] [--wait-after-sb {val}]

drbdsetup role minor

drbdsetup cstate minor

drbdsetup dstate minor

drbdsetup resize minor [--size {val}] [--assume-peer-has-space] [--assume-clean] [--al-stripes {val}] [--al-stripe-size-kB {val}]

drbdsetup check-resize minor

drbdsetup pause-sync minor

drbdsetup resume-sync minor

drbdsetup outdate minor

drbdsetup show-gi minor

drbdsetup get-gi minor

drbdsetup show {resource | minor | all}

drbdsetup suspend-io minor

drbdsetup resume-io minor

drbdsetup status {resource | all} [--color {val}]

drbdsetup events2 {resource | all}

drbdsetup events {resource | minor | all}

drbdsetup new-current-uuid minor [--clear-bitmap]

drbdsetup は、DRBD デバイスと下位レベルブロックデバイスを結びつける、DRBD デバイス間で下位レベルデバイス同士ミラーリングを設定する、現在実行中の DRBD デバイスの設定を検査する、などの目的で使用する。

drbdsetup は DRBD プログラム群の中で低レベルのツールである。デバイスドライバを操作するために、drbddisk や drbd ス クリプトなどの中で使用される。

サブコマンドの中には、独自の引数やオプションを持つものがある。すべての値はデフォルトの単位があるが、K、 M、 G といった通常の方法でも定義でき (K=2^10=1024、 M=1024K、 G=1024M)。

すべての drbdsetup サブコマンドに次のオプションを指定することができる。

--create-device

指定した DRBD デバイスに対応するデバイスファイルがない場合、自動的に作成するするよう指定する。

リソースは DRBD 構成の最初の対象である。リソースはいかなるボリュームやマイナーデバイスが作成されるより前に new-resource コマンドで作成されなければならない。コネクションは名前で参照される。

minor は複製されたブロックデバイスと同じ意味で使われ、ブロックデバイスとして /dev/ ディレクトリで表示されている。これは DRBD が複製するブロックデバイスへのアプリケーションのインターフェースである。drbdsetup のコマンドラインで、これらのブロックデバイスはマイナー番号によってアドレス指定される。

複製されたブロックデバイスの組は 2 マシン間で異なったマイナー番号を持つ場合もあるが、共通のボリューム番号で関連付けされている。ボリューム番号は各々の接続におけるローカルなものである。マイナー番号は一つのノードにおけるグローバルなものである。

リソースのオブジェクトを破棄する。リソースに値がない場合のみ可能。

マイナーはディスクが外されている場合のみ破棄できる。

Attach はデバイス下位ブロックデバイスを接続する。-d (または --disk-size) は下位ブロックデバイスをできるだけ使いたくない場合にのみ使用する。-d を使わない場合、デバイスは対向ノードに接続されるとすぐに使用できる状態になる。(net コマンドを参照)

disk-options コマンドを使うと、接続されている間、そのマイナーのオプション変更ができる。

--disk-size size

DRBD は利用できるデータ領域を自動的に決定する機能を持つ。これまで対向ノードに接続したことのないデバイスを使用する場合に、DRBD デバイスのサイズをドライバに渡すためにこのオプションを使用する。デフォルトの単位はセクタ (1s=512バイト) である。

size パラメータを drbd.conf で使用する場合には、明示的に単位を追加する事が推奨される。drbdadm と drbdsetup はデフォルトの単位で、しばしば食い違いになることがある。

--on-io-error err_handler

下位デバイスのドライバがエラーを伝えた場合に DRBD はディスクを不整合とマークする。そしてヘルパープログラムを呼び出すか、デバイスを下位ストレージから切り離して以後の I/O を対向ノードに委ねる。err_handlers に指定できる値は、 pass_on, call-local-io-error, detach である。

--fencing fencing_policy

fencing は、2つのノードがともにプライマリになること (スプリットブレイン) を防止し、どちらかを切り離す防御手段のことである。

次のフェンシングポリシーを指定できる:

dont-care

デフォルトの設定値で、フェンシングのためのアクションをなにも実行しない。

resource-only

ノードが切り離されたプライマリ状態になると、DRBD は他ノードを無効状態に変えようとして、fence-peer ハンドラを実行する。このハンドラには、レプリケーション用とは別のネットワーク経由で他ノードにアクセスし、 'drbdadm outdate res' を実行するという機能が期待される。

resource-and-stonith

ノードが切り離されたプライマリ状態になると、 DRBD はすべてのディスク I/O を停止して fence-peer ハンドラを呼び出す。このハンドラには、レプリケーション用とは別のネットワーク経由で他ノードにアクセスし、 'drbdadm outdate res' を実行するという機能を想定している。ハンドラが他ノードに到達できない場合、 DRBD は STONITH 機能を使って他ノードを強制排除する。これらが完了したら、ディスク I/O を再開する。ハンドラが失敗した場合には、 resume-io コマンドでディスク I/O を再開できる。

--disk-barrier,
--disk-flushes,
--disk-drain

DRBD は下位デバイスに対する複数のディスク書き込みの間の依存関係を指定するための 4 種類のオプションを用意している。そのうち、下位デバイスがサポートしていてユーザが無効に設定していない最初のオプションが使用される。デフォルトでは flush メソッドが使われる。

drbd-8.4.2 から disk-barrier は、linux-2.6.36 (及び RHEL6 の 2.6.32) 以降での正常動作が確認できないためデフォルトで無効になった。注意: 有識者による指示のもとでのみ使用すること。

手法を選択するにあたっては、測定可能なパフォーマンスデータのみに頼るべきではない。下位デバイスが揮発性の書き込みキャッシュしか持たない場合 (通常のハードディスクや通常のハードディスクだけで構成される RAID など)、最初の 2 つのオプションのどちらかを使うべきである。下位デバイスにバッテリバックアップ機能付きの書き込みキャッシュがある場合には、3 番目のオプションが利用できる。4番目のオプション (すべてを無効にする場合は "none") は、ほとんどの I/O スタックにおいて危険で、ディスクへの書き込み順序が入れ替わってしまう可能性がある。no-disk-drain を使っては ならない

残念なことに、デバイスマッパ(LVM) はバリアをサポートしていない。

/proc/drbd の "wo:" の文字の後ろに、下位デバイスに対する現在の設定が b, f, d, n の文字で表示される。オプションは次のとおり:

barrier

下位デバイスがバリア (SCSI では "tagged command queuing"、SATA では "native com-mand queuing" と呼ばれる) をサポートしている場合、このオプションを選択できる。このオプションを有効にするには disk-barrier オプションを yes にする。

flush

下位デバイスがディスクフラッシュ (ベンダーは "force unit access" と呼んでいる) をサポートしている場合、このオプションを選択できる。このオプションを無効にするには disk-flushesno に設定する。

drain

3番目の方法は、単純に、最初の書き込みは次の書き込みリクエストを処理する前に吐き出す、方法である。8.0.9 まではこれが唯一のオプションであった。

none

no-disk-drain を指定すると、下位デバイスへの書き込みの依存関係を一切指示しなくなる。これはほとんどの I/O スタックにおいて 危険 であり、ディスクへの書き込み順序が入れ替わってしまう可能性がある。そうなると、理論的にはデータ破損の原因、または DRBD プロトコルを乱し、再接続と切断を繰り返すような状態に陥る可能性がある。no-disk-drain使ってはならない

--md-flushes

メタデータデバイスへのアクセスにあたってバリアやフラッシュを使用しない。 See the notes on --disk-flushes.

--max-bio-bvecs

ある特別な環境において、デバイスマッパースタックは、複数の bvec を持つ制約に違反する BIO を merge_bvec() 関数の4番目の引数に設定し DRBD に渡す。 例えば、物理ディスク → DRBD → LVM → Xen → 誤ったパーティション(63) → DomU FS の場合である。Dom0 のカーネルログには、 "bio would need to, but cannot, be split:" と記録される。

最も良い回避方法は、VM の内部にパーティションを適切に配置する (例えば、セクタ 1024 から開始する) ことである。これは、ストレージ領域を 480 KiB を消費する。残念ながら、ほとんどの Linux パーティションツールは、奇数 (63) でパーティションを開始する。そのため、ほとんどのディストリビューションは、仮想 Linux マシンにインストールを行うと、誤ったパーティションで終了してしまう。第 2 の回避方法は、 BIO あたりの最大 DRBD bvecs (= max-bio-bvecs) を 1 にすることである。しかし、パフォーマンスは低下する。

max-bio-bvecs のデフォルト値は 0 で、これはユーザに制限が無いことを意味する。

--resync-rate rate

DRBD の上位で動作するアプリケーションの円滑な実行のために、バックグラウンドの同期作業が利用する帯域幅を制限できる。デフォルト値は 250KiB/秒、デフォルト単位は KiB/秒である。

--resync-after minor

minor に指定したマイナー番号を持つデバイスが接続されると、このデバイスの再同期を開始する。接続されるまでの間は SyncPause 状態になる。

--al-extents extents

DRBD はホットエリアを自動的に検出する。このパラメータを指定すると、ホットエリアの大きさを制御できる。各エクステントは、下位デバイスの 4MB の領域になる。予定外の事情によってプライマリノードがクラスタから切り離されると、そのときのホットエリアのデータは、次回接続したときの再同期の対象になる。このデータ構造は、メタデータ領域に書き込まれる。したがって、ホットエリアの状態更新は、メタデータデ バイスへの書き込みを引き起こす。エクステント値を大きくすると、再同期所要時間が長くなるが、メタデータの更新頻度を減らすことができる。 extents のデフォルト値は 1237 である。(最小値:7、最大値:65534)

追加の制限と必要な準備については、次のマニュアルを参照:drbd.conf(5) , drbdmeta(8)

--al-updates {yes | no}

DRBD のアクティビティログ処理の書き込みによって、プライマリノードのクラッシュ後の部分的な (ビットマップに基づく) 再同期でノードを up-to-date に復帰させる事ができるようになる。al-updatesno に設定すると通常の運用パフォーマンスが向上するかもしれないが、クラッシュ時にプライマリが再接続した際にはフル同期となる。デフォルト値は yes である。

--c-plan-ahead plan_time,
--c-fill-target fill_target,
--c-delay-target delay_target,
--c-max-rate max_rate

plan_time に正の値を指定すると、再同期速度を動的に調整できるようになる。これは、 fill_target に指定した一定速度で、あるいは delay_target に指定した一定の遅延でデータを送信バッファに送り込むことによって実現される。調整における最大値は max_rate で指定する。

plan_time パラメータで調節機能の機敏さを設定する。大きな値を設定すると、調節機能のレスポンスが低下する。この値は最低でもネットワークの RTT の 5 倍以上を指定する。通常のデータ経路では fill_target に 4k から 100k を指定するのが適切である。DRBD-Proxy を使用する場合には、代わりに delay_target を使用するのが望ましい。delay_targetfill_target が 0 の場合にのみ使用できる。初期値は RTT の 5 倍が適切である。Max_rate には DRBD 間または DRBD-Proxy 間の帯域幅あるいはディスク帯域幅を指定する。

plan_time のデフォルト値は 0 で、0.1 秒単位で指定する。Fill_target のデフォルト値は 0 でセクタ数を指定する。Delay_target のデフォルト値は 1 (100 ミリ秒) で 0.1 秒単位で指定する。Max_rate のデフォルト値は 10240 (100MiB/s) で、 KiB/s 単位で指定する。

--c-min-rate min_rate

再同期の際、ディスク I/O 速度を監視すると、下位レベルデバイスが再同期していないことがわかる。下位レベルデバイスがビジーで、再同期速度が min_rate を超えている場合、再同期の処理を調整する。

min_rate のデフォルト値は 4M で、k 単位で指定する。調整したくない場合は 0 を設定する。常に調整する場合は 1 を設定する。

-t, --disk-timeout disk_timeout

DRBD デバイスがデータを格納する下位レベルデバイスが、指定した disk-timeout 以内で I/O リクエストを完了しない場合、DRBD はこれを障害とみなす。下位デバイスは切り離され、デバイスのディスク状態はディスクレス状態になる。DRBD が 1 台以上の対向ノードに接続したとき、失敗したリクエストはそのうち 1 台に伝えられる。

このオプションは カーネルパニックを引き起こす可能性があり、注意が必要である

リクエストの「中断」あるいはディスクの強制切り離しは、完全に下位デバイスをブロックまたはハンギングして、リクエストをまったく処理せずエラーも処理しなくなる。この状況ではハードリセットとフェイルオーバ以外になす術がない。

「中断」すると、基本的にローカルエラーの完了を装い、すみやかにサービスの移行を行うことで安全な切り替えを行う。それでもなお、影響を受けるノードは "すぐ" に再起動される必要はある。

リクエストを完了することで、上位レイヤーに関連するデータページを再利用させることができる。

後にローカルの下位デバイスが「復帰」すると、ディスクから元のリクエストページへの DMA のデータは、うまくいくと未使用のページへランダムなデータを送るが、多くの場合その間に関係のないデータに変形してしまい、様々なダメージの原因になる。

つまり遅延した正常な完了は、特に読み込みリクエストの場合 panic() の原因になる。遅延した「エラー」完了は、その都度に通知は行うが、問題ないと考えてよい。

disk-timeout のデフォルト値は 0 であり、無限のタイムアウトを意味する。タイムアウトは 0.1 秒単位で指定する。このオプションは DRBD 8.3.12. から利用できる。

--discard-zeroes-if-aligned {yes | no}

discard-zeroes-if-aligned no に設定すると、それぞれのバックエンドが discard_zeroes_data = false をアナウンスする場合、DRBD は常に受信側でゼロアウトにフォールバックし、プライマリ側では discard に関して通知しない。

discard-zeroes-if-aligned yes に設定すると、 discard_zeroes_data = false を通知するバックエンドであっても DRBD は discard を使用し、 discard_zeroes_data = true を通知する。

私たちは、 discard_zeroes_data 設定を完全に無視していました。確立し、期待された動作を壊さないためのデフォルト値は yes である。

このオプションは 8.4.7 から有効である。追加の制限と必要な準備については、次のマニュアルを参照:drbd.conf(5).

--disable-write-same {yes | no}

一部のディスクは、WRITE_SAME サポートをカーネルに通知するが、実際にそのようなリクエストを受信すると、I/O エラーで失敗する。これは主に、仮想化されたディスクを使用しているときに発生する。特に、この動作は VMware の仮想ディスクで観察されている。

disable-write-sameyes に設定すると、WRITE_SAME サポートが手動で無効にできる。

disable-write-same のデフォルト値は no である。このオプションは 8.4.7 から有効である。

--read-balancing method

読み込みリクエストの負荷分散で使用できる methodsprefer-local, prefer-remote, round-robin, least-pending, when-congested-remote, 32K-striping, 64K-striping, 128K-striping, 256K-striping, 512K-striping, 1M-striping である。

read-balancing のデフォルト値は prefer-local である。このオプションは 8.4.1 から有効である。

--rs-discard-granularity bytes

rs-discard-granularity がゼロ以外の正の値に設定されている場合、DRBD はこのサイズで再同期操作を要求する。そのようなブロックが同期ソースノード上にゼロバイトしか含まない場合、同期ターゲットノードは、その領域に対して discard/trim/unmap コマンドを発行する。

この値は、下位ブロックデバイスの discard 粒度によって制約される。 rs-discard-granularity が下位ブロックデバイスの discard 粒度の乗数でない場合、DRBD はそれを切り上げる。この機能は、下位ブロックデバイスが discard コマンドの後に、ゼロを読み戻す場合にのみアクティブになる。

rs-discard-granularity のデフォルト値は 0 である。このオプションは 8.4.7 から有効である。

Connect は deviceaf:local_addr:port の内向きのコネクションを Listen させ、また af:remote_addr:port へ接続させる。port が省略されると、デフォルトで 7788 が使用される。af が省略されると ipv4 が使用される。他の対応するアドレスファミリは ipv6, ssocks, sdp がある。 ssocks は Dolphin Interconnect Solutions の 「super sockets」、sdp は Sockets Direct Protocol(Infiniband) を指す。

net-options コマンドはコネクションの確立中にオプションの変更が行える。

--protocol protocol

DRBD の TCP/IP の通信の際に使われる プロトコル を指定する。指定できるプロトコルは A, B, C である。

プロトコル A: ローカルディスクとローカル TCP 送信バッファにデータを書き込んだらディスクへの書き込みが完了したと判断する。

プロトコル B: ローカルディスクとリモートバッファキャッシュにデータを書き込んだらディスクへの書き込みが完了したと判断する。

プロトコル C: ローカルディスクとリモートディスクの両方にデータを書き込んだらディスクへの書き込みが完了したと判断する。

--connect-int time

対向ノードにただちに接続できない場合、DRBD は接続を繰り返し試行する。このパラメータは試行間隔を指定する。デフォルト値は 10 である。単位は秒である。

--ping-int time

DRBD デバイス間の TCP/IP 接続があり、対向ノードから time 秒の間に何も通信が行われなかった場合、 DRBD は死活確認のためキープアライブパケットを生成する。デフォルト値は 10 である。単位は秒である。

--timeout val

対向ノードからの応答パケットが 1/10 の val 倍の時間以内に返ってこない場合、対向ノードが死んだと判断して TCP/IP コネクションを切断する。デフォルト値は 60 で、これは 6 秒に相当する。

--sndbuf-size size

ソケット送信バッファは、セカンダリノードに送信するパケットを格納するために使われる。この中のパケットは、ネットワーク的にはセカンダリ側から受信確認を受け取っていない。プロトコル A を使う場合は、両ノード間の同期を高めるために、このバッファサイズを増やす必要が生じる可能性がある。しかし、プライマリノードがフェイルしたときに失うデータが増えることも考慮しておく必要がある。8.0.13 から 8.2.7 までは、手動で 0 を設定しないと自動調整にならない。デフォルト値は 0 で自動調整される。

--rcvbuf-size size

ネットワークから受信したパケットは、最初にソケットの受信バッファに保存される。そこから DRBD に使われる。8.3.1 以前は、ソケット受信バッファのサイズはソケット送信バッファと同じサイズに固定されていた。8.3.2 からこれらを別々に設定できるようになっている。0 を指定するとカーネルが自動的に設定する。デフォルト値は 0 で自動調整される。

--ko-count count

セカンダリノードが書き込みリクエストを timeout 内で count 回以上失敗した場合、そのセカンダリノードはクラスタから排除され、プライマリノードは StandAlone モードに遷移する。この機能を無効にするには、明示的に 0 に設定する必要がある。デフォルトはバージョン間で変更されている。8.4 は 7 がデフォルト値である。

--max-epoch-size val

このオプションを指定すると、バリアとバリアの間の書き込みリクエスト数の最大値を制限できる。|--max-buffers と同じ値か、取りうる最大値を指定するのが望ましい。10 より小さい値は、パフォーマンス低下をもたらす。デフォルト値は 2048 である。

--max-buffers val

DRBD 受信スレッドに割り当てるバッファページの最大値を指定する。--max-epoch-size と同じ値を指定するのが望ましい。小さい値はパフォーマンス低下をもたらす。デフォルト値は 2048 で、最小は 32 である。リニア書き込みや一方がアイドル状態での再同期の際、受け取り側の I/O バックエンドに余裕がある場合にはこの値を増やすのがよい。

追加の制限と必要な準備については、次のマニュアルを参照:drbd.conf(5)

--unplug-watermark val

この設定は、最近の明示的にスタックプラギングを使用するカーネルには効果がない (Linux kernel 2.6.39 には移植されている)。

スタンバイ(セカンダリ) ノードで書き込まれていない書き込みリクエスト数が unplug-watermark を上回ると、下位デバイスに対して書き込みリクエストを送る。ストレージによっては小さい値でも良好な結果が得られるが、多くのデバイスでは max-buffers と同じ値を指定するときに最良の結果が得られる。デフォルト値は 128 で、指定できる最小値は 16、最大値は 131072 である。

--allow-two-primaries

このオプションを指定すると、両ノードにプライマリを割り当てられる。このオプションは分散共有ファイルシステムを使うときのみ指定する。現在 DRBD がサポートするファイルシステムは OCFS2 と GFS である。これら以外のファイルシステムを使うときにこのオプションを指定すると、データの破損とノードのダウンを引き起こす。

--cram-hmac-alg alg

対向ノードの認証を行いたい場合、 +HMAC アルゴリズムを指定する。対向ノードの認証は行うべきである。チャレンジ-レスポンス方式で対向ノードを認証するのに、 HMA CFC アルゴリズムが使われる。/proc/crypto に記録されている任意のダイジェストアルゴリズムを指定できる。

--shared-secret secret

対向ノードの認証には共有秘密鍵が使用され、64文字までで指定する。

--after-sb-0pri asb-0p-policy

指定できるポリシーは以下の通り:

disconnect

自動再同期を行わず接続を切断する。

discard-younger-primary

スプリットブレイン発生前にプライマリであったノードからの再同期を自動的に実行する。

discard-older-primary

スプリットブレイン発生時にプライマリになったノードからの再同期を自動的に実行する。

discard-zero-changes

プリットブレイン発生後どちらか一方のノードに書き込みがまったく行われなかったことが明白な場合、書き込みが行われたノードから行われなかったノードに対する再同期が実行される。どちらも書き込まれなかった場合は、 DRBD はランダムな判断によって 0 ブロックの再同期を実行する。両ノードに書き込みが行われた場合、このポリシーはノードの接続を切断する。

discard-least-changes

スプリットブレイン発生後、より多くのブロックを書き込んだノードから他方に対する再同期を実行する。

discard-node-NODENAME

指定した名前のノードに対する再同期を実行する。

--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 アルゴリズムの判断を常に採用する。セカンダリ側のデータが正しいと判断された場合でも、プライマリ側のデータの変更箇所を受け入れる。

--after-sb-2pri asb-2p-policy

指定できるポリシーは以下の通り:

disconnect

自動再同期を行わず接続を切断する。

call-pri-lost-after-sb

after-sb-0pri アルゴリズムの判断を常に採用する。セカンダリ側のデータが正しいと判断された場合には、現在のプライマリ側で pri-lost-after-sb ハンドラが呼び出される。

violently-as0p

after-sb-0pri アルゴリズムの判断を常に採用する。セカンダリ側のデータが正しいと判断された場合でも、プライマリ側のデータの変更箇所を受け入れる。

--always-asbp

通常、3 番目のノードが存在しないことが現在の UUID 値から明らかな場合のみ、スプリットブレイン発生後の修復ポリシーだけが適用される。

このオプションを指定すると、両ノードのデータに関連性があるとして、スプリットブレイン発生後のポリシーが適用される。UUID の分析により 3 番目のノードの存在が疑われる場合には、フル同期が行われることがある。(または、なんらかの別の原因によって間違った UUID セットで判断してしまった場合)

--rr-conflict role-resync-conflict-policy

このオプションは、SyncTarget ノードがすでにプライマリであり、再同期が必要であることを DRBD がメタデータから推測するときの DRBD の動作を設定する。設定できる値は: disconnect, call-pri-lost, violently である。disconnect は接続を切断する。call-pri-lostpri-lost ハンドラを呼び出す。このハンドラは、ノードの状態をセカンダリに切り替えるか、あるいはノードをクラスタから切り離すときに呼ばれる。デフォルトは disconnect である。

violently を指定すると、プリマリノードを強制的に同期先 (SyncTarget) にできる。このオプションを指定すると、即座に同期元 (SyncSource) のデータに書き換えられる。このオプションは、何をしているのかを理解した上で使用するように。

--data-integrity-alg hash_alg

ネットワーク経由で受け渡されるデータの整合性を担保するために、DRBD はハッシュ値を比較する機能を備えている。通常は、TCP/IP パケット自体のヘッダに含まれる 16 ビットチェックサムで保証される。このオプション値には、カーネルがサポートする任意のダイジェストアルゴリズムを指定できる。一般的なカーネルの場合、少なくとも md5, sha1, crc32c のどれかが利用できる。デフォルトでは、この機能は無効である。

drbd.conf マニュアルページのデータ整合性に関する説明も参照のこと。

--no-tcp-cork

DRBD は、 TCP ソケットの TCP_CORK オプションを使って、いつ追加データを受け取るか、あるいは送信キューのデータをいつフラッシュするかのヒントを得ている。この方法が悪影響を及ぼすネットワークスタックが少なくとも存在する。このオプションを指定すると、TCP_CORK ソケットオプションの設定が無効になる。

--ping-timeout ping_timeout

このパラメータで指定した時間内にキープアライブパケットに応答しなければならない。応答パケットが返ってこない場合、その対向ノードは死んだと判断される。デフォルト値は 5(500ms) で、100ms 単位で指定する。

--discard-my-data

スプリットブレイン状態から復旧するときに、このオプションを手作業で指定する。自動的な復旧ポリシーを設定していない場合には、DRBD は接続を拒否する。このオプションを実行すると、そのノードは接続後ただちに同期先になる。

--tentative

再同期を実行させない場合などにおいて、再同期ハンドシェーク後に DRBD 接続プロセスを終了させる。DRBD がどの再同期を実行しているかについては、カーネルログで確認することができる。

--on-congestion congestion_policy,
--congestion-fill fill_threshold,
--congestion-extents active_extents_threshold

デフォルトでは、 TCP 送信キューが一杯になると、 DRBD は書き込みをブロックする。このことは DRBD が TCP で送信できるデータ量を越えてディスクに書きこもうとするアプリケーションの処理速度が低下することを意味する。

DRBD-Proxy を使っている場合、送信キューが満杯になる直前に AHEAD/BEAIND モードに移行するのが望ましい。AHEAD/BEHIND モードでは、DRBD 間の通信は切断しないが、データレプリケーションは行われなくなる。

AHEAD/BEHIND モードの利点は、たとえ DRBD-Proxy のバッファがすべての書き込み要求を受け入れるのに十分でなくても、アプリケーションが遅くならないことである。欠点は、対向ノードが後れをとっているため、同期状態に戻すために再同期が必要になることである。再同期中対向ノードのデータは不整合状態のままとなる。

congestion_policy では blockpull-ahead が使用できる。デフォルトは block である。Fill_threshold は 0 から 10GiB までの値を指定できる。デフォルト値は 0 で、これはチェックが無効になることを意味する。Active_extents_threshold は、 al-extents と同じ制限がある。

AHEAD/BEHIND は DRBD8.3.10 以降で利用できる。

--verify-alg hash-alg

verify サブコマンドでディスク内容をオンライン照合する際、 DRBD はビット単位の比較ではなく、ブロックごとのハッシュ値を計算し、対向ノードのハッシュ値と比較する。照合に利用するハッシュアルゴリズムは、このパラメータで指定する。オプション値には、カーネルがサポートする任意のダイジェストアルゴリズムを指定できる。一般的なカーネルの場合、少なくとも md5, sha1, crc32c のどれかが利用できる。デフォルトでは、この機能は無効である。オンライン照合を有効にするには、このパラメータを明示的に設定する必要がある。

drbd.conf マニュアルページのデータ整合性に関する説明も参照のこと。

--csums-alg hash-alg

csums-alg が指定されていない場合、再同期プロセスはすべてのマークされたデータブロックをコピー元からコピー先に転送するこのオプションを指定すると、マークされたデータブロックのハッシュ値を最初に送り、ハッシュ値が一致しないブロックについてのみデータを転送する。

帯域幅が小さい回線を使うとき、このオプションは有用である。クラッシュしたプライマリノードが復帰したとき、アクティビティログに記録されたすべてのブロックが再同期の対象となる。しかし大部分のブロックは同期が取れている。このため、 csums-alg を指定することによって、 CPU の使用量と引き換えに必要な転送量を減らせる。

--use-rle

再同期開始時のハンドシェークの過程で各ノードのビットマップが交換され、ビット単位の OR 計算が行われる。これによって、どのブロックがダーティ (不一致) であるかについて、それぞれのノードは共通の認識を持つ。大容量デバイスではビットマップも大きくなり、帯域幅が小さいネットワークではその交換に時間を要する。

典型的なビットマップは、すべてがセットされていない (クリーン) あるいはセットされている (ダーティ) いくつかのエリアに分かれている。このため、単純ではあるがランレングス符号化を採用することにより、ビットマップ交換のためのネットワークトラフィックを顕著に減らすことができる。

過去のバージョンとの互換性のため、また高速ネットワークでは転送時間改善効果が少なく CPU 使用量が増えるため、デフォルトではこの機能は無効である。

Introduced in 8.3.2.

--socket-check-timeout

DRBD-Proxy を使っていて大量のバッファを確保する必要がある環境では ping-timeout に非現実的な大きな値を指定しなければならないことがある。TCP コネクションが開始したときの安定するのを待つ局面でも、 DRBD はデフォルトで ping-timeout を使ってしまう。DRBD-Proxy は通常、同じデータセンターに配置されているため、長い待機時間は DRBD の接続プロセスを妨げる可能性がある。

このような場合、socket-check-timeout に DRBD と DRBD-Proxy 間の round trip time(RTT) を設定するとよい。たいていの場合 1 である。

デフォルトの単位は 10 分の 1 秒である。デフォルト値は 0 で socket-check-timeout 値の代わりに ping-timeout 値を使用する。8.4.5 から導入された。

Changes the options of the resource at runtime.

--cpu-mask cpu-mask

DRBD のカーネルスレッドに CPU アフィニティマスクを設定する。cpu-mask のデフォルト値は 0 で、 DRBD のカーネルスレッドがマシン全体の CPU にまたがって動作することを意味している。この値は 16 進表現で指定する必要がある。値が大きすぎると切り捨てられる。

--on-no-data-accessible ond-policy

この設定は、ディスクレスモードが発生した際の操作を指定する。設定できるポリシーは io-errorsuspend-io である。

ond-policysuspend-io を設定すると、最後に接続していたデータストレージから、もしくは、 drbdadm resume-io res コマンドにより、 I/O を再開することができる。後者はもちろん I/O エラーを発生させる。

デフォルトは io-error である。この設定は、 DRBD 8.3.9 から有効である。

デバイスをプライマリロールに切り替える。するとアプリケーション (この場合はファイルシステムなど) はデバイスを読み書きモードでオープンできるようになる。プライマリロールのデバイスに書き込まれたデータはセカンダリロールのデバイスにミラーされる。

通常の実行状態では、 DRBD デバイスペアの両方を同時にプライマリに切り替えることはできない。--allow-two-primaries オプションを使用すると、DRBD の既定の仕様を変更して両ノードをプライマリにできる。

--overwrite-data-of-peer

--force のエイリアス。

--force

ローカルディスクの複製物が最新 (UpToDate) でない場合は、プライマリになれない。つまり、データが一致しなかったり、古かったりする場合である。このオプションを指定すると、状況に関係なくプライマリに切り替えられる。このオプションは、何をしているのかを理解した上で使用するように。

デバイスをセカンダリロールに切り替える。何らかのアプリケーション (またはファイルシステム) が書き込みモードでデバイスをオープンしている間は、この操作は失敗する。

DRBD デバイスペアの両方がともにセカンダリ状態になることは問題なく可能である。

オンライン状態でデバイスを照合する。オンライン照合は、ローカルノードの全ブロックを対向ノードの対応するブロックと比較することである。照合の進行状況は、 /proc/drbd を通じて確認できる。ローカルディスクと対向ホストで内容が異なるブロックは、 DRBD のディスク上ビットマップに不整合としてマークされる。これらは自動的な再同期が行われない。再同期を行うには、いったんリソースの接続を切って再接続すればよい。

すでにオンライン照合が進行中の場合、 (当該ノードが照合を行い) このコマンドは成功する。この場合、 start-sector (以下参照) は無視され、 stop-sector (以下参照) が採用される。これは照合を終了するため、あるいは現在進行中の照合の範囲を 更新/ 短縮/ 拡張 するために使用される。

このコマンドはデバイスが接続されているデバイスペアのうちの一つでない場合は失敗する。

drbd.conf マニュアルページのデータ整合性に関する説明も参照のこと。

--start start-sector

バージョン 8.3.2 以降でこのオプションが利用できる。接続が切れて復旧したとき、オンライン照合は直前の最後の位置から再開する。このオプションを指定すると、任意の位置から照合を開始できる。以前に stop-sector に達した事があり、明示的に start-sector を指定しない場合には、照合は以前の停止セクタから再開される。

デフォルトの単位はセクタである。単位を明示的に指定することもできる。開始セクタは 8 セクタの倍数 (4kB) に切り捨てられる。

-S, --stop stop-sector

バージョン 8.3.14 以降では、オンライン照合はデバイスの最後に達する前に終了することができる。

デフォルトの単位はセクタである。単位を明示的に指定することもできる。照合が進行中に追加の drbdsetup verify コマンドを同じノードで実行することで、 stop-sector を更新する事ができる。これは照合を終了するため、あるいは現在進行中の照合の範囲を 更新/ 短縮/ 拡張 するために使用される。

接続された DRBD デバイスペアのローカル側を SyncTarget 状態に切り替える。これにより、対向ホスト側のすべてのデータブロックがローカルディスクにコピーされる。

デバイスが対向ホスト側のデバイスと接続していなかったり、切断されたセカンダリの場合、コマンドは失敗する。

接続された DRBD デバイスペアのローカルデバイス側を SyncSource 状態に切り替える。これにより、ローカルディスクのすべてのデータブロックが対向ペアにコピーされる。

切断されたプライマリデバイス側では、すべてのビットが非同期のビットマップに設定される。これによってオンディスクのアクティビティログの更新が一時停止する。アクティビティログの更新が再開すると、必要に応じて自動的再開される。

デバイスが対向デバイスと通信可能になるまで待機する。

--wfc-timeout wfc_timeout,
--degr-wfc-timeout degr_wfc_timeout,
--outdated-wfc-timeout outdated_wfc_timeout,
--wait-after-sb

デバイスtimeout 秒以内に対向ペアと通信できないと、このコマンドは失敗する。ノードが再起動する前に対向ノードが動作していた場合、 wfc_timeout パラメータの値が使われる。ノードが再起動する前に対向ノードがダウンしていた場合には、 degr_wfc_timeout パラメータの値が使われる。ノードが再起動する前に対向ノードが無効にされていた場合には outdated_wfc_timeout パラメータが使われる。これらすべてのタイムアウト値のデフォルトは 0 で、接続されるまで永久に待機することを表す。単位は秒である。スプリットブレイン状態が起きたためにデバイスが接続された後 StandaAlone 状態になってしまった場合、このコマンドは失敗する。--wait-after-sb を指定すると、デフォルトの動作を変更できる。

デバイスの同期が終わるまで待機する。このオプションは wait-connect コマンドと同じである。

net コマンドで設定したデバイスの情報を削除する。その結果、デバイスは切断状態になり、その後はネットワーク経由の情報を受け取らない。

disk コマンドで設定したデバイスの情報を消去する。その結果、デバイスは下位ストレージデバイスから切り離される。

-f, --force

通常、detach は、ディスク状態がディスクレスになってから戻ってくる。そのため、フリーズしている下位ブロックデバイスの切り離しは終了しない。

一方で、強制切り離しは即座に返答がくる。これでフリーズした下位ブロックデバイスを切り離すことができる。ディスクは全 I/O リクエストが下位ブロックデバイスで完了するまで failed としてマークされることに注意。

デバイスの全ての設定情報を消去する。また、未設定の状態に戻す。

デバイスとその対向デバイスの現在のロール (役割) を表示する。表示形式は ローカ ル/他ノードである。

"role" の別名である。

現在のデバイスの接続状態を表示する。

現在の下位デバイスの状態を表示する。表示形式はローカル/他ノードである。

下位デバイスのサイズを再検査する。実際にオンライン拡張するには、両デバイスで下位デバイスを拡張してから、そのうちの1 台で resize コマンドを実行する。

--size オプションは DRBD デバイスで使用できるサイズのオンライン縮小に使用される。ファイルシステムがこの操作によって破損しないことはユーザ責任において確認する。

--assume-peer-has-space オプションは、現在対向ノードに接続されていないデバイスのサイズ変更ができる。対向ノードのディスクサイズを同様に変更しないと、以降接続が失敗するので注意すること。

--assume-clean オプションを使用すると DRBD は新しいストレージの再同期をスキップする。新しいストレージが、別の方法で初期化されていることが確認できている場合のみ、これを設定する。

--al-stripes--al-stripe-size-kB オプションはオンラインでアクティビティログのレイアウトを変更する。内部メタデータの場合には、同時に、下位デバイスのユーザーに見えるサイズ(--size を使用して)の縮小、または拡大が必要である。

DRBD が下位デバイスのオフラインリサイズを検知できるようにするため、このコマンドは下位デバイスの現在のサイズを記録するために使用される。サイズは、/var/lib/drbd/ 下に drbd-minor-??.lkbd という名前で記録される。

このコマンドは drbdsetup device resize が実行された後で drbdadm resize res からコールされる。

ローカルメタデータの一時停止フラグをセットして、進行中の再同期を一時停止する。再開させるには、ローカルと他ノードの両方の一時停止フラグをクリアする必要がある。下位レベルデバイスの RAID を再構成しているときなど、 DRBD の再同期を一時停止するのが望ましい場合がある。

自機の一時停止フラグをクリアする。

自ノードの下位レベルデバイスの内容が「無効」であるとマークする。無効ノードはプライマリになれない。このコマンドは通常 fencing や対向ノードの fence-peer ハンドラと組み合わせて使用される。

デバイスのデータ世代識別子 (data generation identifiers) の内容を説明テキストとともに表示する。

デバイスのデータ世代識別子 (data generation identifiers) の内容を表示する。

リソースの全ての有効な設定情報を表示する。利用可能なオプション:

--show-defaults

すべての設定パラメータを表示する。設定ファイルに未設定のパラメータも初期値の設定で表示する。このオプションをつけないと、初期値のパラメータは確認できない。

このコマンドの明確な使用法はないが、コマンドセットの完全性のために用意されている。

fencing ポリシーが resource-and-stonith に設定されており、fence-peer ハンドラの実行に失敗した場合、このコマンドによってフリーズされた I/O 操作を再開できる。

リソースの全ての有効な設定情報を表示する。出力は、構成されたリソースごとに 1 つの段落で構成される。各段落は、リソースごとに 1 行、各デバイスに 1 行、接続ごとに 1 行が続くデバイスと接続行はインテンドされる。各接続行は、対向ノードのデバイスごとに 1 行、これらは接続行に対してインテンドされる。

長い行は端末の幅で折り返され、どの行に属しているかを示すためにインデントされる。利用可能なオプション:

--verbose

冗長か無関係であっても、より多くの情報を出力に含める。

--statistics

出力にデータ転送の統計情報を含める。

--color={always | auto | never}

出力をカラー化する。 --color=auto, drbdsetup は標準出力が端末に接続されている場合にのみカラーコードを出力する。

たとえば、1 つの接続と1 つのボリュームのみを持つリソースの出力は、次のようになる。

fs-backoffice role:Primary
  disk:UpToDate
  peer role:Secondary
    replication:Established peer-disk:UpToDate
	      

--verbose--statistics を使用すると, 同じリソースは次のように出力される:

fs-data role:Primary suspended:no
    write-ordering:drain
  volume:0 minor:1 disk:UpToDate
      size:10616472 read:134465 written:144800 al-writes:18 bm-writes:0
      upper-pending:0 lower-pending:0 al-suspended:no blocked:no
  peer connection:Connected role:Secondary congested:no
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:122596 sent:22204 out-of-sync:0 pending:0 unacked:0
	      

設定されたすべての DRBD オブジェクトの現在の状態、状態へのすべての変更を表示する。

出力形式は、機械だけでなく人も読める形式である。各行はイベント番号で始まり、イベントが次の行に続く場合はアスタリスクが続く。各行の 2 番目の単語は、イベントの種類を示す: 既存オブジェクトの exists; オブジェクトが作成、破棄、変更された場合 create, destroy, change; イベントハンドラが呼び出された、戻った場合 call, response である。第 3 の単語は、イベントが適用されるオブジェクトを示す: resource, device, connection, peer-device, helper, 現在の状態が完全にダンプされたことを示すための dash (-)

残りの単語はオブジェクトを識別し、オブジェクトが入っている状態を記述する。利用可能なオプション:

--now

現在の状態を報告した後に終了する。デフォルトでは、継続的に監視し、状態の変化を報告する。

--statistics

統計情報を出力に含める。

推奨しない。可能であれば、events2 サブコマンドに変更する。

DRBD のすべての状態変化とヘルパープログラムの呼び出し経緯を表示する。このコマンドは、DRBD の状態変化を他のプログラムにパイプで渡したいときに利用できる。

--all-devices

すべての DRBD デバイスの状態を表示する。

--unfiltered

このオプションはデバッグ用である。すべてのネットリンクレイやの受信メッセージの内容を表示する。

現在 UUID を生成して、他のすべての UUID をローテートする。このコマンドには 2 通りの利用シーンが考えられる。まず、初期同期を省略する際に利用する。また、 1 台で設定を行った後遠隔サイトに運搬することにより帯域幅を節約するためにも利用できる。

利用可能なオプション:

--clear-bitmap

現在 UUID を生成すると同時に同期ビットマップをクリアする。

このオプションは、ゼロから新規に構築する際に初期同期を省略するために使用する。この方法は、作ったばかりのメタデータに対して効果がある。必要なステップは以下のとおり:

1.両ノードでメタデータを初期化してデバイスを設定する。

drbdadm -- --force create-md res

2.それぞれのサイズを知るために初期ハンドシェークが必要となる。

drbdadm up res

3.Secondary/Secondary Inconsistent/Inconsistent の状態で接続される。新しい現在 UUID を作りダーティなビットマップをクリアする。

drbdadm new-current-uuid --clear-bitmap res

4.Secondary/Secondary UpToDate/UpToDate の状態で接続される。片方をプライマリに切り替えてファイルシステムを作成する。

drbdadm primary res

mkfs -t fs-type $(drbdadm sh-dev res)

この方法の明らかな欠点は、別の方法でディスク内容を同一にしない限り、複製物全体に古いゴミのデータが残ることである。このため、オンライン照合は多数の非同期ブロックを見出してしまう。

この方法は、すでにデータのあるディスクに適用してはならない! 最初は動作しているように見えても、ノードの切り替えを行うとデータが壊れてしまい二度と使えなくなる。そのため、mkfs を省略してはならない (またはそれに相当する操作)。

このコマンドは、最初のノードを本稼働させた後でディスク自体を 2 番目のノードに移すという手法により、クラスタの初期化時間を短縮する目的にも適用できる。この方法は、切断されたデバイスに対してのみ有効である。デバイスのロールはプライマリでもセカンダリでもよい。

必要なステップは以下のとおり:

1.drbdsetup new-current-uuid --clear-bitmap minor

2.現在のアクティブなサーバのディスクをコピーする。たとえば RAID1 コントローラ配下のディスクを 1 本抜く、 dd でコピーするなど。実際のデータ領域とメタデータの両方をコピーする必要がある。

3.drbdsetup new-current-uuid minor

このディスクをセカンダリのノードに挿入してクラスタに参加させる。ステップ 1 での drbdsetup の実行以降に変更した箇所の再同期が行われる。

詳しくは DRBD ユーザーズガイド DRBD User's Guide[1] を参照。

このドキュメントは DRBD バージョン 8.3.2 向けに改訂されている。

Written by Philipp Reisner <philipp.reisner@linbit.com> and Lars Ellenberg <lars.ellenberg@linbit.com>

Report bugs to <drbd-user@lists.linbit.com>.

Copyright 2001-2008 LINBIT Information Technologies, Philipp Reisner, Lars Ellenberg. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

drbd.conf(5), drbd(8), drbddisk(8), drbdadm(8), DRBD User's Guide[1], DRBD web site[2]

1.
DRBD User's Guide
http://www.drbd.org/users-guide/
2.
DRBD web site
http://www.drbd.org/
6 May 2011 DRBD 8.4.0