| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" |
| "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> |
| <refentry id="re-drbdsetup"> |
| <refentryinfo> |
| <date>6 May 2011</date> |
| |
| <productname>DRBD</productname> |
| |
| <productnumber>8.4.0</productnumber> |
| </refentryinfo> |
| |
| <refmeta> |
| <refentrytitle>drbdsetup</refentrytitle> |
| |
| <manvolnum>8</manvolnum> |
| |
| <refmiscinfo class="manual">System Administration</refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>drbdsetup</refname> |
| |
| <refpurpose>Setup tool for DRBD <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| </indexterm></refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <xi:include href="drbdsetup_new-resource.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_new-minor.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_del-resource.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_del-minor.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_attach.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_connect.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_disk-options.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_net-options.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_resource-options.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_disconnect.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_detach.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_primary.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_secondary.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_down.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_verify.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_invalidate.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_invalidate-remote.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_wait-connect.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_wait-sync.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_role.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_cstate.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_dstate.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_resize.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_check-resize.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_pause-sync.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_resume-sync.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_outdate.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_show-gi.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_get-gi.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_show.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_suspend-io.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_resume-io.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_status.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_events2.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_events.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| <xi:include href="drbdsetup_new-current-uuid.xml" xmlns:xi="http://www.w3.org/2001/XInclude" /> |
| |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>drbdsetup is used to associate DRBD devices with their backing block devices, to set up |
| DRBD device pairs to mirror their backing block devices, and to inspect the configuration of |
| running DRBD devices.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Note</title> |
| |
| <para>drbdsetup is a low level tool of the DRBD program suite. It is used by the data disk and |
| drbd scripts to communicate with the device driver.</para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Commands</title> |
| |
| <para>Each drbdsetup sub-command might require arguments and bring its own set of options. All |
| values have default units which might be overruled by K, M or G. These units are defined in |
| the usual way (e.g. K = 2^10 = 1024).</para> |
| |
| <refsect2> |
| <title>Common options</title> |
| |
| <para>All drbdsetup sub-commands accept these two options <variablelist> |
| <varlistentry> |
| <term><option>--create-device</option></term> |
| |
| <listitem> |
| <para>In case the specified DRBD device (minor number) does not exist yet, create it |
| implicitly.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist></para> |
| </refsect2> |
| |
| <refsect2> |
| <title>new-resource</title> |
| |
| <para>Resources are the primary objects of any DRBD configuration. A resource must be created |
| with the <option>new-resource</option> command before any volumes or minor devices can be created. |
| Connections are referenced by name.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>new-minor</title> |
| |
| <para>A <emphasis>minor</emphasis> is used as a synonym for replicated block device. It is |
| represented in the /dev/ directory by a block device. It is the application's interface to |
| the DRBD-replicated block devices. These block devices get addressed by their minor numbers |
| on the drbdsetup commandline.</para> |
| |
| <para>A pair of replicated block devices may have different minor numbers on the two |
| machines. They are associated by a common <emphasis>volume-number</emphasis>. Volume numbers |
| are local to each connection. Minor numbers are global on one node.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>del-resource</title> |
| |
| <para>Destroys a resource object. This is only possible if the resource has no |
| volumes.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>del-minor</title> |
| |
| <para>Minors can only be destroyed if its disk is detached.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>attach, disk-options</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>disk</secondary> |
| </indexterm> |
| |
| <para>Attach associates <replaceable>device</replaceable> with |
| <replaceable>lower_device</replaceable> to store its data blocks on. The <option>-d</option> |
| (or <option>--disk-size</option>) should only be used if you wish not to use as much as |
| possible from the backing block devices. If you do not use <option>-d</option>, the |
| <replaceable>device</replaceable> is only ready for use as soon as it was connected to its |
| peer once. (See the <option>net</option> command.)</para> |
| |
| <para>With the disk-options command it is possible to change the options of a minor while it |
| is attached.</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--disk-size |
| <replaceable>size</replaceable></option></term> |
| |
| <listitem> |
| <para>You can override DRBD's size determination method with this option. If you need |
| to use the device before it was ever connected to its peer, use this option to pass |
| the <replaceable>size</replaceable> of the DRBD device to the driver. Default unit is |
| sectors (1s = 512 bytes).</para> |
| |
| <para>If you use the <replaceable>size</replaceable> parameter in drbd.conf, we |
| strongly recommend to add an explicit unit postfix. drbdadm and drbdsetup used to have |
| mismatching default units.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--on-io-error |
| <replaceable>err_handler</replaceable></option></term> |
| |
| <listitem> |
| <para>If the driver of the <replaceable>lower_device</replaceable> |
| reports an error to DRBD, DRBD will mark the disk as inconsistent, |
| call a helper program, or detach the device from its backing storage and perform all |
| further IO by requesting it from the peer. The valid |
| <replaceable>err_handlers</replaceable> are: <option>pass_on</option>, |
| <option>call-local-io-error</option> and <option>detach</option>.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--fencing |
| <replaceable>fencing_policy</replaceable></option></term> |
| |
| <listitem> |
| <para>Under <option>fencing</option> we understand preventive measures to avoid |
| situations where both nodes are primary and disconnected (AKA split brain).</para> |
| |
| <para>Valid fencing policies are:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>dont-care</option></term> |
| |
| <listitem> |
| <para>This is the default policy. No fencing actions are done.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>resource-only</option></term> |
| |
| <listitem> |
| <para>If a node becomes a disconnected primary, it tries to outdate the peer's |
| disk. This is done by calling the fence-peer handler. The handler is supposed to |
| reach the other node over alternative communication paths and call 'drbdadm |
| outdate res' there.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>resource-and-stonith</option></term> |
| |
| <listitem> |
| <para>If a node becomes a disconnected primary, it freezes all its IO operations |
| and calls its fence-peer handler. The fence-peer handler is supposed to reach |
| the peer over alternative communication paths and call 'drbdadm outdate res' |
| there. In case it cannot reach the peer, it should stonith the peer. IO is |
| resumed as soon as the situation is resolved. In case your handler fails, you |
| can resume IO with the <option>resume-io</option> command.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--disk-barrier</option></term> |
| |
| <term><option>--disk-flushes</option></term> |
| |
| <term><option>--disk-drain</option></term> |
| |
| <listitem> |
| <para>DRBD has four implementations to express write-after-write dependencies to its |
| backing storage device. DRBD will use the first method that is supported by the |
| backing storage device and that is not disabled. By default the <emphasis>flush</emphasis> |
| method is used.</para> |
| |
| <para>Since drbd-8.4.2 <option>disk-barrier</option> is disabled by default |
| because since linux-2.6.36 (or 2.6.32 RHEL6) there is no reliable way to determine if queuing |
| of IO-barriers works. <emphasis>Dangerous</emphasis> only enable if you are |
| told so by one that knows for sure.</para> |
| |
| <para>When selecting the method you should not only base your decision on the |
| measurable performance. In case your backing storage device has a volatile write cache |
| (plain disks, RAID of plain disks) you should use one of the first two. In case your |
| backing storage device has battery-backed write cache you may go with option 3. |
| Option 4 (disable everything, use "none") <emphasis>is dangerous</emphasis> |
| on most IO stacks, may result in write-reordering, and if so, |
| can theoretically be the reason for data corruption, or disturb |
| the DRBD protocol, causing spurious disconnect/reconnect cycles. |
| <emphasis>Do not use</emphasis> <option>no-disk-drain</option>.</para> |
| |
| <para>Unfortunately device mapper (LVM) might not support barriers.</para> |
| |
| <para>The letter after "wo:" in /proc/drbd indicates with method is currently in use |
| for a device: b, f, d, n. The implementations:</para> |
| <variablelist> |
| <varlistentry> |
| <term>barrier</term> |
| |
| <listitem> |
| <para>The first requires that the driver of the backing storage device support |
| barriers (called 'tagged command queuing' in SCSI and 'native command queuing' |
| in SATA speak). The use of this method can be enabled by setting the |
| <option>disk-barrier</option> options to <option>yes</option>.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>flush</term> |
| |
| <listitem> |
| <para>The second requires that the backing device support disk flushes (called |
| 'force unit access' in the drive vendors speak). The use of this method can be |
| disabled setting <option>disk-flushes</option> to <option>no</option>.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>drain</term> |
| |
| <listitem> |
| <para>The third method is simply to let write requests drain before write |
| requests of a new reordering domain are issued. That was the only implementation |
| before 8.0.9.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term>none</term> |
| |
| <listitem> |
| <para>The fourth method is to not express write-after-write dependencies to |
| the backing store at all, by also specifying <option>--no-disk-drain</option>. |
| This <emphasis>is dangerous</emphasis> |
| on most IO stacks, may result in write-reordering, and if so, |
| can theoretically be the reason for data corruption, or disturb |
| the DRBD protocol, causing spurious disconnect/reconnect cycles. |
| <emphasis>Do not use</emphasis> <option>--no-disk-drain</option>.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--md-flushes</option></term> |
| |
| <listitem> |
| <para>Disables the use of disk flushes and barrier BIOs when accessing the meta data |
| device. See the notes on <option>--disk-flushes</option>.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--max-bio-bvecs</option></term> |
| |
| <listitem> |
| <para>In some special circumstances the device mapper stack manages to pass BIOs to |
| DRBD that violate the constraints that are set forth by DRBD's merge_bvec() function |
| and which have more than one bvec. A known example is: phys-disk -> DRBD -> LVM |
| -> Xen -> missaligned partition (63) -> DomU FS. Then you might see "bio |
| would need to, but cannot, be split:" in the Dom0's kernel log.</para> |
| |
| <para>The best workaround is to proper align the partition within the VM (E.g. start |
| it at sector 1024). That costs 480 KiB of storage. Unfortunately the default of most |
| Linux partitioning tools is to start the first partition at an odd number (63). |
| Therefore most distributions install helpers for virtual linux machines will end up |
| with missaligned partitions. The second best workaround is to limit DRBD's max bvecs |
| per BIO (i.e., the <option>max-bio-bvecs</option> option) to 1, but that might cost |
| performance.</para> |
| |
| <para>The default value of <option>max-bio-bvecs</option> is 0, which means that there |
| is no user imposed limitation.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--resync-rate |
| <replaceable>rate</replaceable></option></term> |
| |
| <listitem> |
| <para>To ensure smooth operation of the application on top of DRBD, it is possible to |
| limit the bandwidth that may be used by background synchronization. The default is 250 |
| KiB/sec, the default unit is KiB/sec.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--resync-after |
| <replaceable>minor</replaceable></option></term> |
| |
| <listitem> |
| <para>Start resync on this device only if the device with |
| <replaceable>minor</replaceable> is already in connected state. Otherwise this device |
| waits in SyncPause state.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--al-extents |
| <replaceable>extents</replaceable></option></term> |
| |
| <listitem> |
| <para>DRBD automatically performs hot area detection. With this parameter you control |
| how big the hot area (=active set) can get. Each extent marks 4M of the backing |
| storage. In case a primary node leaves the cluster unexpectedly, the areas covered by |
| the active set must be resynced upon rejoining of the failed node. The data structure |
| is stored in the meta-data area, therefore each change of the active set is a write |
| operation to the meta-data device. A higher number of extents gives longer resync |
| times but less updates to the meta-data. The default number of |
| <replaceable>extents</replaceable> is 1237. (Minimum: 7, Maximum: 65534)</para> |
| <para>See also |
| <citerefentry><refentrytitle>drbd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> |
| and |
| <citerefentry><refentrytitle>drbdmeta</refentrytitle><manvolnum>8</manvolnum></citerefentry> |
| for additional limitations and necessary preparation. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--al-updates <group choice="req" rep="norepeat"> |
| <arg choice="plain" rep="norepeat">yes</arg> |
| <arg choice="plain" rep="norepeat">no</arg> |
| </group></option></term> |
| |
| <listitem> |
| <para>DRBD's activity log transaction writing makes it possible, that |
| after the crash of a primary node a partial (bit-map based) resync is |
| sufficient to bring the node back to up-to-date. |
| Setting <option>al-updates</option> to <option>no</option> might increase |
| normal operation performance but causes DRBD to do a full resync |
| when a crashed primary gets reconnected. The default value is <option>yes</option>. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--c-plan-ahead |
| <replaceable>plan_time</replaceable></option></term> |
| |
| <term><option>--c-fill-target |
| <replaceable>fill_target</replaceable></option></term> |
| |
| <term><option>--c-delay-target |
| <replaceable>delay_target</replaceable></option></term> |
| |
| <term><option>--c-max-rate |
| <replaceable>max_rate</replaceable></option></term> |
| |
| <listitem> |
| <para>The dynamic resync speed controller gets enabled with setting |
| <replaceable>plan_time</replaceable> to a positive value. It aims to fill the buffers |
| along the data path with either a constant amount of data |
| <replaceable>fill_target</replaceable>, or aims to have a constant delay time of |
| <replaceable>delay_target</replaceable> along the path. The controller has an upper |
| bound of <replaceable>max_rate</replaceable>.</para> |
| |
| <para>By <replaceable>plan_time</replaceable> the agility of the controller is |
| configured. Higher values yield for slower/lower responses of the controller to |
| deviation from the target value. It should be at least 5 times RTT. For regular data |
| paths a <replaceable>fill_target</replaceable> in the area of 4k to 100k is |
| appropriate. For a setup that contains drbd-proxy it is advisable to use |
| <replaceable>delay_target</replaceable> instead. Only when |
| <replaceable>fill_target</replaceable> is set to 0 the controller will use |
| <replaceable>delay_target</replaceable>. 5 times RTT is a reasonable starting value. |
| <replaceable>Max_rate</replaceable> should be set to the bandwidth available between |
| the DRBD-hosts and the machines hosting DRBD-proxy, or to the available |
| disk-bandwidth.</para> |
| |
| <para>The default value of <replaceable>plan_time</replaceable> is 0, the default unit |
| is 0.1 seconds. <replaceable>Fill_target</replaceable> has 0 and sectors as default |
| unit. <replaceable>Delay_target</replaceable> has 1 (100ms) and 0.1 as default unit. |
| <replaceable>Max_rate</replaceable> has 10240 (100MiB/s) and KiB/s as default |
| unit.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--c-min-rate |
| <replaceable>min_rate</replaceable></option></term> |
| |
| <listitem> |
| <para>We track the disk IO rate caused by the resync, so we can detect non-resync IO |
| on the lower level device. If the lower level device seems to be busy, and the current |
| resync rate is above <replaceable>min_rate</replaceable>, we throttle the |
| resync.</para> |
| |
| <para>The default value of <replaceable>min_rate</replaceable> is 4M, the default unit |
| is k. If you want to not throttle at all, set it to zero, if you want to throttle |
| always, set it to one.</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>-t</option>, |
| <option>--disk-timeout <replaceable>disk_timeout</replaceable></option></term> |
| <listitem> |
| <para>If the lower-level device on which a DRBD device stores its data does |
| not finish an I/O request within the defined |
| <option>disk-timeout</option>, DRBD treats this as a failure. The |
| lower-level device is detached, and the device's disk state advances to |
| Diskless. If DRBD is connected to one or more peers, the failed request |
| is passed on to one of them.</para> |
| |
| <para>This option is <emphasis>dangerous and may lead to kernel panic!</emphasis></para> |
| |
| <para>"Aborting" requests, or force-detaching the disk, is intended for |
| completely blocked/hung local backing devices which do no longer |
| complete requests at all, not even do error completions. In this |
| situation, usually a hard-reset and failover is the only way out.</para> |
| |
| <para>By "aborting", basically faking a local error-completion, |
| we allow for a more graceful swichover by cleanly migrating services. |
| Still the affected node has to be rebooted "soon".</para> |
| <para>By completing these requests, we allow the upper layers to re-use |
| the associated data pages.</para> |
| |
| <para>If later the local backing device "recovers", and now DMAs some data |
| from disk into the original request pages, in the best case it will |
| just put random data into unused pages; but typically it will corrupt |
| meanwhile completely unrelated data, causing all sorts of damage.</para> |
| |
| <para>Which means delayed successful completion, |
| especially for READ requests, is a reason to panic(). |
| We assume that a delayed *error* completion is OK, |
| though we still will complain noisily about it.</para> |
| <para>The default value of |
| <option>disk-timeout</option> is 0, which stands for an infinite timeout. |
| Timeouts are specified in units of 0.1 seconds. This option is available |
| since DRBD 8.3.12.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--discard-zeroes-if-aligned <group choice="req" rep="norepeat"> |
| <arg choice="plain" rep="norepeat">yes</arg> |
| <arg choice="plain" rep="norepeat">no</arg> |
| </group></option></term> |
| <listitem> |
| <para> |
| Setting <option>discard-zeroes-if-aligned</option> to <option>no</option> |
| will cause DRBD to always fall-back to zero-out on the receiving side, |
| and to not even announce discard capabilities on the Primary, |
| if the respective backend announces discard_zeroes_data=false. |
| </para><para> |
| Setting <option>discards-zeroes-if-aligned</option> to <option>yes</option> |
| will allow DRBD to use discards, and to announce discard_zeroes=true, |
| even on backends that announce discard_zeroes_data=false. |
| </para><para> |
| We used to ignore the discard_zeroes_data setting completely. |
| To not break established and expected behaviour, |
| the default value is <option>yes</option>. |
| </para><para> |
| This option is available since 8.4.7. |
| See also <citerefentry><refentrytitle>drbd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term> |
| <option>--read-balancing <replaceable>method</replaceable></option> |
| </term> |
| <listitem> |
| <para> |
| The supported <replaceable>methods</replaceable> for load balancing of |
| read requests are <option>prefer-local</option>, <option>prefer-remote</option>, |
| <option>round-robin</option>, <option>least-pending</option> and |
| <option>when-congested-remote</option>, <option>32K-striping</option>, |
| <option>64K-striping</option>, <option>128K-striping</option>, |
| <option>256K-striping</option>, <option>512K-striping</option> |
| and <option>1M-striping</option>.</para> |
| <para> The default value of is <option>prefer-local</option>. |
| This option is available since 8.4.1. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term> |
| <option>--rs-discard-granularity <replaceable>bytes</replaceable></option> |
| </term> |
| <listitem> |
| <para> |
| When <option>rs-discard-granularity</option> is set to a non zero, positive |
| value then DRBD tries to do a resync operation in requests of this size. |
| In case such a block contains only zero bytes on the sync source node, |
| the sync target node will issue a discard/trim/unmap command for |
| the area.</para> |
| <para>The value is constrained by the discard granularity of the backing |
| block device. In case <option>rs-discard-granularity</option> is not a |
| multiplier of the discard granularity of the backing block device DRBD |
| rounds it up. The feature only gets active if the backing block device |
| reads back zeroes after a discard command.</para> |
| <para> The default value of is 0. This option is available since 8.4.7. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| </variablelist> |
| </refsect2> |
| |
| <refsect2> |
| <title>connect, net-options</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>net</secondary> |
| </indexterm> |
| |
| <para>Connect sets up the <replaceable>device</replaceable> to listen on |
| <replaceable>af:local_addr:port</replaceable> for incoming connections and to try to connect |
| to <replaceable>af:remote_addr:port</replaceable>. If <replaceable>port</replaceable> is |
| omitted, 7788 is used as default. If <replaceable>af</replaceable> is omitted |
| <option>ipv4</option> gets used. Other supported address families are <option>ipv6</option>, |
| <option>ssocks</option> for Dolphin Interconnect Solutions' "super sockets" and |
| <option>sdp</option> for Sockets Direct Protocol (Infiniband).</para> |
| |
| <para>The net-options command allows you to change options while the connection is |
| established.</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--protocol |
| <replaceable>protocol</replaceable></option></term> |
| |
| <listitem> |
| <para>On the TCP/IP link the specified <replaceable>protocol</replaceable> is used. |
| Valid protocol specifiers are A, B, and C.</para> |
| |
| <para>Protocol A: write IO is reported as completed, if it has reached local disk and |
| local TCP send buffer.</para> |
| |
| <para>Protocol B: write IO is reported as completed, if it has reached local disk and |
| remote buffer cache.</para> |
| |
| <para>Protocol C: write IO is reported as completed, if it has reached both local and |
| remote disk.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--connect-int |
| <replaceable>time</replaceable></option></term> |
| |
| <listitem> |
| <para>In case it is not possible to connect to the remote DRBD device immediately, |
| DRBD keeps on trying to connect. With this option you can set the time between two |
| retries. The default value is 10. The unit is seconds.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--ping-int |
| <replaceable>time</replaceable></option></term> |
| |
| <listitem> |
| <para>If the TCP/IP connection linking a DRBD device pair is idle for more than |
| <replaceable>time</replaceable> seconds, DRBD will generate a keep-alive packet to |
| check if its partner is still alive. The default value is 10. The unit is |
| seconds.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--timeout |
| <replaceable>val</replaceable></option></term> |
| |
| <listitem> |
| <para>If the partner node fails to send an expected response packet within |
| <replaceable>val</replaceable> tenths of a second, the partner node is considered dead |
| and therefore the TCP/IP connection is abandoned. The default value is 60 (= 6 |
| seconds).</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--sndbuf-size |
| <replaceable>size</replaceable></option></term> |
| |
| <listitem> |
| <para>The socket send buffer is used to store packets sent to the secondary node, |
| which are not yet acknowledged (from a network point of view) by the secondary node. |
| When using protocol A, it might be necessary to increase the size of this data |
| structure in order to increase asynchronicity between primary and secondary nodes. But |
| keep in mind that more asynchronicity is synonymous with more data loss in the case of |
| a primary node failure. Since 8.0.13 resp. 8.2.7 setting the |
| <replaceable>size</replaceable> value to 0 means that the kernel should autotune this. |
| The default <replaceable>size</replaceable> is 0, i.e. autotune.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--rcvbuf-size |
| <replaceable>size</replaceable></option></term> |
| |
| <listitem> |
| <para>Packets received from the network are stored in the socket receive buffer first. |
| From there they are consumed by DRBD. Before 8.3.2 the receive buffer's size was |
| always set to the size of the socket send buffer. Since 8.3.2 they can be tuned |
| independently. A value of 0 means that the kernel should autotune this. The default |
| <replaceable>size</replaceable> is 0, i.e. autotune.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--ko-count |
| <replaceable>count</replaceable></option></term> |
| |
| <listitem> |
| <para>In case the secondary node fails to complete a single write request for |
| <replaceable>count</replaceable> times the <replaceable>timeout</replaceable>, it is |
| expelled from the cluster, i.e. the primary node goes into StandAlone mode. |
| To disable this feature, you should explicitly set it to 0; defaults may change between versions. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--max-epoch-size |
| <replaceable>val</replaceable></option></term> |
| |
| <listitem> |
| <para>With this option the maximal number of write requests between |
| two barriers is limited. Typically set to the same as |
| <option>--max-buffers</option>, or the allowed maximum. |
| Values smaller than 10 can lead to degraded performance. |
| The default value is 2048. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--max-buffers |
| <replaceable>val</replaceable></option></term> |
| |
| <listitem> |
| <para>With this option the maximal number of buffer pages allocated by DRBD's receiver |
| thread is limited. Typically set to the same as <option>--max-epoch-size</option>. |
| Small values could lead to degraded performance. The default value is 2048, the minimum 32. |
| Increase this if you cannot saturate the IO backend of the receiving side during linear write |
| or during resync while otherwise idle.</para> |
| <para>See also <citerefentry><refentrytitle>drbd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry></para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--unplug-watermark |
| <replaceable>val</replaceable></option></term> |
| |
| <listitem> |
| <para> |
| This setting has no effect with recent kernels that use explicit on-stack |
| plugging (upstream Linux kernel 2.6.39, distributions may have backported). |
| </para> |
| <para>When the number of pending write requests on the standby (secondary) node |
| exceeds the unplug-watermark, we trigger the request processing of our backing storage |
| device. Some storage controllers deliver better performance with small values, others |
| deliver best performance when the value is set to the same value as max-buffers, |
| yet others don't feel much effect at all. |
| Minimum 16, default 128, maximum 131072.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--allow-two-primaries </option></term> |
| |
| <listitem> |
| <para>With this option set you may assign primary role to both nodes. You only should |
| use this option if you use a shared storage file system on top of DRBD. At the time of |
| writing the only ones are: OCFS2 and GFS. If you use this option with any other file |
| system, you are going to crash your nodes and to corrupt your data!</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--cram-hmac-alg |
| <replaceable>alg</replaceable></option></term> |
| |
| <listitem> |
| <para>You need to specify the HMAC algorithm to enable peer authentication at all. You |
| are strongly encouraged to use peer authentication. The HMAC algorithm will be used |
| for the challenge response authentication of the peer. You may specify any digest |
| algorithm that is named in /proc/crypto.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--shared-secret |
| <replaceable>secret</replaceable></option></term> |
| |
| <listitem> |
| <para>The shared secret used in peer authentication. May be up to 64 |
| characters.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--after-sb-0pri |
| <replaceable>asb-0p-policy</replaceable></option></term> |
| |
| <listitem> |
| <para>possible policies are:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>disconnect</option></term> |
| |
| <listitem> |
| <para>No automatic resynchronization, simply disconnect.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>discard-younger-primary</option></term> |
| |
| <listitem> |
| <para>Auto sync from the node that was primary before the split-brain situation |
| occurred.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>discard-older-primary</option></term> |
| |
| <listitem> |
| <para>Auto sync from the node that became primary as second during the |
| split-brain situation.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>discard-zero-changes</option></term> |
| |
| <listitem> |
| <para>In case one node did not write anything since the split brain became |
| evident, sync from the node that wrote something to the node that did not write |
| anything. In case none wrote anything this policy uses a random decision to |
| perform a "resync" of 0 blocks. In case both have written something this policy |
| disconnects the nodes.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>discard-least-changes</option></term> |
| |
| <listitem> |
| <para>Auto sync from the node that touched more blocks during the split brain |
| situation.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>discard-node-NODENAME</option></term> |
| |
| <listitem> |
| <para>Auto sync to the named node.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--after-sb-1pri |
| <replaceable>asb-1p-policy</replaceable></option></term> |
| |
| <listitem> |
| <para>possible policies are:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>disconnect</option></term> |
| |
| <listitem> |
| <para>No automatic resynchronization, simply disconnect.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>consensus</option></term> |
| |
| <listitem> |
| <para>Discard the version of the secondary if the outcome of the |
| <option>after-sb-0pri</option> algorithm would also destroy the current |
| secondary's data. Otherwise disconnect.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>discard-secondary</option></term> |
| |
| <listitem> |
| <para>Discard the secondary's version.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>call-pri-lost-after-sb</option></term> |
| |
| <listitem> |
| <para>Always honor the outcome of the <option>after-sb-0pri </option> algorithm. |
| In case it decides the current secondary has the correct data, call the |
| <option>pri-lost-after-sb</option> on the current primary.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>violently-as0p</option></term> |
| |
| <listitem> |
| <para>Always honor the outcome of the <option>after-sb-0pri </option> algorithm. |
| In case it decides the current secondary has the correct data, accept a possible |
| instantaneous change of the primary's data.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--after-sb-2pri |
| <replaceable>asb-2p-policy</replaceable></option></term> |
| |
| <listitem> |
| <para>possible policies are:</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>disconnect</option></term> |
| |
| <listitem> |
| <para>No automatic resynchronization, simply disconnect.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>call-pri-lost-after-sb</option></term> |
| |
| <listitem> |
| <para>Always honor the outcome of the <option>after-sb-0pri </option> algorithm. |
| In case it decides the current secondary has the right data, call the |
| <option>pri-lost-after-sb</option> on the current primary.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>violently-as0p</option></term> |
| |
| <listitem> |
| <para>Always honor the outcome of the <option>after-sb-0pri </option> algorithm. |
| In case it decides the current secondary has the right data, accept a possible |
| instantaneous change of the primary's data.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--always-asbp</option></term> |
| |
| <listitem> |
| <para>Normally the automatic after-split-brain policies are only used if current |
| states of the UUIDs do not indicate the presence of a third node.</para> |
| |
| <para>With this option you request that the automatic after-split-brain policies are |
| used as long as the data sets of the nodes are somehow related. This might cause a |
| full sync, if the UUIDs indicate the presence of a third node. (Or double faults have |
| led to strange UUID sets.)</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--rr-conflict |
| <replaceable>role-resync-conflict-policy</replaceable></option></term> |
| |
| <listitem> |
| <para>This option sets DRBD's behavior when DRBD deduces from its meta data that a |
| resynchronization is needed, and the SyncTarget node is already primary. The possible |
| settings are: <option>disconnect</option>, <option>call-pri-lost</option> and |
| <option>violently</option>. While <option>disconnect</option> speaks for itself, with |
| the <option>call-pri-lost</option> setting the <option>pri-lost</option> handler is |
| called which is expected to either change the role of the node to secondary, or remove |
| the node from the cluster. The default is <option>disconnect</option>.</para> |
| |
| <para>With the <option>violently</option> setting you allow DRBD to force a primary |
| node into SyncTarget state. This means that the data exposed by DRBD changes to the |
| SyncSource's version of the data instantaneously. USE THIS OPTION ONLY IF YOU KNOW |
| WHAT YOU ARE DOING.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--data-integrity-alg |
| <replaceable>hash_alg</replaceable></option></term> |
| |
| <listitem> |
| <para>DRBD can ensure the data integrity of the user's data on the network by |
| comparing hash values. Normally this is ensured by the 16 bit checksums in the headers |
| of TCP/IP packets. This option can be set to any of the kernel's data digest |
| algorithms. In a typical kernel configuration you should have at least one of |
| <option>md5</option>, <option>sha1</option>, and <option>crc32c</option> available. By |
| default this is not enabled.</para> |
| |
| <para>See also the notes on data integrity on the drbd.conf manpage.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--no-tcp-cork</option></term> |
| |
| <listitem> |
| <para>DRBD usually uses the TCP socket option TCP_CORK to hint to the network stack |
| when it can expect more data, and when it should flush out what it has in its send |
| queue. There is at least one network stack that performs worse when one uses this |
| hinting method. Therefore we introduced this option, which disable the setting and |
| clearing of the TCP_CORK socket option by DRBD.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--ping-timeout |
| <replaceable>ping_timeout</replaceable></option></term> |
| |
| <listitem> |
| <para>The time the peer has to answer to a keep-alive packet. In case the peer's reply |
| is not received within this time period, it is considered dead. The default unit is |
| tenths of a second, the default value is 5 (for half a second).</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--discard-my-data</option></term> |
| |
| <listitem> |
| <para>Use this option to manually recover from a split-brain situation. In case you do |
| not have any automatic after-split-brain policies selected, the nodes refuse to |
| connect. By passing this option you make this node a sync target immediately after |
| successful connect.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--tentative</option></term> |
| |
| <listitem> |
| <para>Causes DRBD to abort the connection process after the resync handshake, i.e. no |
| resync gets performed. You can find out which resync DRBD would perform by looking at |
| the kernel's log file.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--on-congestion |
| <replaceable>congestion_policy</replaceable></option></term> |
| |
| <term><option>--congestion-fill |
| <replaceable>fill_threshold</replaceable></option></term> |
| |
| <term><option>--congestion-extents |
| <replaceable>active_extents_threshold</replaceable></option></term> |
| |
| <listitem> |
| <para>By default DRBD blocks when the available TCP send queue becomes full. That |
| means it will slow down the application that generates the write requests that cause |
| DRBD to send more data down that TCP connection.</para> |
| |
| <para>When DRBD is deployed with DRBD-proxy it might be more desirable that DRBD goes |
| into AHEAD/BEHIND mode shortly before the send queue becomes full. In AHEAD/BEHIND |
| mode DRBD does no longer replicate data, but still keeps the connection open.</para> |
| |
| <para>The advantage of the AHEAD/BEHIND mode is that the application is not slowed |
| down, even if DRBD-proxy's buffer is not sufficient to buffer all write requests. The |
| downside is that the peer node falls behind, and that a resync will be necessary to |
| bring it back into sync. During that resync the peer node will have an inconsistent |
| disk.</para> |
| |
| <para>Available <replaceable>congestion_policy</replaceable>s are |
| <option>block</option> and <option>pull-ahead</option>. The default is |
| <option>block</option>. <replaceable>Fill_threshold</replaceable> might be in the |
| range of 0 to 10GiBytes. The default is 0 which disables the check. |
| <replaceable>Active_extents_threshold</replaceable> has the same limits as |
| <option>al-extents</option>.</para> |
| |
| <para>The AHEAD/BEHIND mode and its settings are available since DRBD 8.3.10.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--verify-alg |
| <replaceable>hash-alg</replaceable></option></term> |
| |
| <listitem> |
| <para>During online verification (as initiated by the <command |
| moreinfo="none">verify</command> sub-command), rather than doing a bit-wise |
| comparison, DRBD applies a hash function to the contents of every block being |
| verified, and compares that hash with the peer. This option defines the hash algorithm |
| being used for that purpose. It can be set to any of the kernel's data digest |
| algorithms. In a typical kernel configuration you should have at least one of |
| <option>md5</option>, <option>sha1</option>, and <option>crc32c</option> available. By |
| default this is not enabled; you must set this option explicitly in order to be able |
| to use on-line device verification.</para> |
| |
| <para>See also the notes on data integrity on the drbd.conf manpage.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--csums-alg |
| <replaceable>hash-alg</replaceable></option></term> |
| |
| <listitem> |
| <para>A resync process sends all marked data blocks form the source to the destination |
| node, as long as no <option>csums-alg</option> is given. When one is specified the |
| resync process exchanges hash values of all marked blocks first, and sends only those |
| data blocks over, that have different hash values.</para> |
| |
| <para>This setting is useful for DRBD setups with low bandwidth links. During the |
| restart of a crashed primary node, all blocks covered by the activity log are marked |
| for resync. But a large part of those will actually be still in sync, therefore using |
| <option>csums-alg</option> will lower the required bandwidth in exchange for CPU |
| cycles.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--use-rle</option></term> |
| |
| <listitem> |
| <para>During resync-handshake, the dirty-bitmaps of the nodes are exchanged and merged |
| (using bit-or), so the nodes will have the same understanding of which blocks are |
| dirty. On large devices, the fine grained dirty-bitmap can become large as well, and |
| the bitmap exchange can take quite some time on low-bandwidth links.</para> |
| |
| <para>Because the bitmap typically contains compact areas where all bits are unset |
| (clean) or set (dirty), a simple run-length encoding scheme can considerably reduce |
| the network traffic necessary for the bitmap exchange.</para> |
| |
| <para>For backward compatibility reasons, and because on fast links this possibly does |
| not improve transfer time but consumes cpu cycles, this defaults to off.</para> |
| |
| <para>Introduced in 8.3.2.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--socket-check-timeout</option></term> |
| |
| <listitem> |
| <para>In setups involving a DRBD-proxy and connections that experience a lot of |
| buffer-bloat it might be necessary to set <option>ping-timeout</option> to an |
| unusual high value. By default DRBD uses the same value to wait if a newly |
| established TCP-connection is stable. Since the DRBD-proxy is usually located |
| in the same data center such a long wait time may hinder DRBD's connect process. |
| </para> |
| <para>In such setups <option>socket-check-timeout</option> should be set to |
| at least to the round trip time between DRBD and DRBD-proxy. I.e. in most |
| cases to 1.</para> |
| <para> |
| The default unit is tenths of a second, the default value is 0 (which causes |
| DRBD to use the value of <option>ping-timeout</option> instead). |
| Introduced in 8.4.5.</para> |
| </listitem> |
| |
| </varlistentry> |
| </variablelist> |
| </refsect2> |
| |
| <refsect2> |
| <title>resource-options</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>resource-options</secondary> |
| </indexterm> |
| |
| <para>Changes the options of the resource at runtime.</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--cpu-mask |
| <replaceable>cpu-mask</replaceable></option></term> |
| |
| <listitem> |
| <para>Sets the cpu-affinity-mask for DRBD's kernel threads of this device. The default |
| value of <replaceable>cpu-mask</replaceable> is 0, which means that DRBD's kernel |
| threads should be spread over all CPUs of the machine. This value must be given in |
| hexadecimal notation. If it is too big it will be truncated.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--on-no-data-accessible |
| <replaceable>ond-policy</replaceable></option></term> |
| |
| <listitem> |
| <para>This setting controls what happens to IO requests on a degraded, disk less node |
| (I.e. no data store is reachable). The available policies are |
| <option>io-error</option> and <option>suspend-io</option>.</para> |
| |
| <para>If <replaceable>ond-policy</replaceable> is set to <option>suspend-io</option> |
| you can either resume IO by attaching/connecting the last lost data storage, or by the |
| <command moreinfo="none">drbdadm resume-io <replaceable>res</replaceable></command> |
| command. The latter will result in IO errors of course.</para> |
| |
| <para>The default is <option>io-error</option>. This setting is available since DRBD |
| 8.3.9.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect2> |
| |
| <refsect2> |
| <title>primary</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>primary</secondary> |
| </indexterm> |
| |
| <para>Sets the <replaceable>device</replaceable> into primary role. This means that |
| applications (e.g. a file system) may open the <replaceable>device</replaceable> for read |
| and write access. Data written to the <replaceable>device</replaceable> in primary role are |
| mirrored to the device in secondary role.</para> |
| |
| <para>Normally it is not possible to set both devices of a connected DRBD device pair to |
| primary role. By using the <option>--allow-two-primaries</option> option, you override this |
| behavior and instruct DRBD to allow two primaries.</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--overwrite-data-of-peer</option></term> |
| |
| <listitem> |
| <para>Alias for --force.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--force</option></term> |
| |
| <listitem> |
| <para>Becoming primary fails if the local replica is not up-to-date. I.e. when it is |
| inconsistent, outdated of consistent. By using this option you can force it into |
| primary role anyway. USE THIS OPTION ONLY IF YOU KNOW WHAT YOU ARE DOING.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect2> |
| |
| <refsect2> |
| <title>secondary</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>secondary</secondary> |
| </indexterm> |
| |
| <para>Brings the <replaceable>device</replaceable> into secondary role. This operation fails |
| as long as at least one application (or file system) has opened the device.</para> |
| |
| <para>It is possible that both devices of a connected DRBD device pair are secondary.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>verify</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>verify</secondary> |
| </indexterm> |
| |
| <para>This initiates on-line device verification. During on-line verification, the contents |
| of every block on the local node are compared to those on the peer node. Device verification |
| progress can be monitored via <filename moreinfo="none">/proc/drbd</filename>. Any blocks |
| whose content differs from that of the corresponding block on the peer node will be marked |
| out-of-sync in DRBD's on-disk bitmap; they are <emphasis>not</emphasis> brought back in sync |
| automatically. To do that, simply disconnect and reconnect the resource.</para> |
| |
| <para>If on-line verification is already in progress (and this node is "VerifyS"), |
| this command silently "succeeds". In this case, any start-sector (see |
| below) will be ignored, and any stop-sector (see below) will be honored. |
| This can be used to stop a running verify, or to update/shorten/extend |
| the coverage of the currently running verify. |
| </para> |
| |
| <para>This command will fail if the <replaceable>device</replaceable> is not part of a |
| connected device pair.</para> |
| |
| <para>See also the notes on data integrity on the drbd.conf manpage.</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--start |
| <replaceable>start-sector</replaceable></option></term> |
| |
| <listitem> |
| <para>Since version 8.3.2, on-line verification should resume from the last position |
| after connection loss. It may also be started from an arbitrary position by setting |
| this option. If you had reached some stop-sector before, and you do |
| not specify an explicit start-sector, verify should resume from the |
| previous stop-sector.</para> |
| |
| <para>Default unit is sectors. You may also specify a unit explicitly. The |
| <option>start-sector</option> will be rounded down to a multiple of 8 sectors |
| (4kB).</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><option>-S</option>, |
| <option>--stop <replaceable>stop-sector</replaceable></option></term> |
| <listitem> |
| <para>Since version 8.3.14, on-line verification can be stopped |
| before it reaches end-of-device. |
| </para> |
| <para>Default unit is sectors. You may also specify a unit explicitly. |
| The <option>stop-sector</option> may be updated by issuing an additional |
| drbdsetup verify command on the same node while the verify is running. |
| This can be used to stop a running verify, or to update/shorten/extend |
| the coverage of the currently running verify. |
| </para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect2> |
| |
| <refsect2> |
| <title>invalidate</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>invalidate</secondary> |
| </indexterm> |
| <para> This forces the local device of a pair of connected DRBD devices |
| into SyncTarget state, which means that all data blocks of the |
| device are copied over from the peer. |
| </para> |
| <para> This command will fail if the <replaceable>device</replaceable> is |
| not either part of a connected device pair, or disconnected Secondary. |
| </para> |
| </refsect2> |
| |
| <refsect2> |
| <title>invalidate-remote</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>invalidate-remote</secondary> |
| </indexterm> |
| <para> This forces the local device of a pair of connected DRBD devices |
| into SyncSource state, which means that all data blocks of the |
| device are copied to the peer. |
| </para> |
| <para> |
| On a disconnected Primary device, this will set all bits in the out of sync bitmap. |
| As a side affect this suspends updates to the on disk activity log. Updates |
| to the on disk activity log resume automatically when necessary. |
| </para> |
| </refsect2> |
| |
| <refsect2> |
| <title>wait-connect</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>wait-connect</secondary> |
| </indexterm> |
| |
| <para>Returns as soon as the <replaceable>device</replaceable> can communicate with its |
| partner device.</para> |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--wfc-timeout |
| <replaceable>wfc_timeout</replaceable></option></term> |
| |
| <term><option>--degr-wfc-timeout |
| <replaceable>degr_wfc_timeout</replaceable></option></term> |
| |
| <term><option>--outdated-wfc-timeout |
| <replaceable>outdated_wfc_timeout</replaceable></option></term> |
| |
| <term><option>--wait-after-sb</option></term> |
| |
| <listitem> |
| <para>This command will fail if the <replaceable>device</replaceable> cannot |
| communicate with its partner for <replaceable>timeout</replaceable> seconds. If the |
| peer was working before this node was rebooted, the |
| <replaceable>wfc_timeout</replaceable> is used. If the peer was already down before |
| this node was rebooted, the <replaceable>degr_wfc_timeout</replaceable> is used. If |
| the peer was successfully outdated before this node was rebooted the |
| <replaceable>outdated_wfc_timeout</replaceable> is used. The default value for all |
| those timeout values is 0 which means to wait forever. The unit is seconds. In case |
| the connection status goes down to StandAlone because the peer appeared but the |
| devices had a split brain situation, the default for the command is to terminate. You |
| can change this behavior with the <option>--wait-after-sb</option> option.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect2> |
| |
| <refsect2> |
| <title>wait-sync</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>wait-sync</secondary> |
| </indexterm> |
| |
| <para>Returns as soon as the <replaceable>device</replaceable> leaves any synchronization |
| into connected state. The options are the same as with the |
| <replaceable>wait-connect</replaceable> command.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>disconnect</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>disconnect</secondary> |
| </indexterm> |
| |
| <para>Removes the information set by the <option>net</option> command from the |
| <replaceable>device</replaceable>. This means that the <replaceable>device</replaceable> |
| goes into unconnected state and will no longer listen for incoming connections.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>detach</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>detach</secondary> |
| </indexterm> |
| <para>Removes the information set by the <option>disk</option> command from the |
| <replaceable>device</replaceable>. This means that the <replaceable>device</replaceable> is |
| detached from its backing storage device. |
| <variablelist> |
| <varlistentry> |
| <term><option>-f</option>, |
| <option>--force</option></term> |
| <listitem> |
| <para>A regular detach returns after the disk state finally reached |
| diskless. As a consequence detaching from a frozen backing block device |
| never terminates.</para> |
| <para>On the other hand A forced detach returns immediately. It allows |
| you to detach DRBD from a frozen backing block device. Please note that |
| the disk will be marked as failed until all pending IO requests where |
| finished by the backing block device. |
| </para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| </refsect2> |
| |
| <refsect2> |
| <title>down</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>down</secondary> |
| </indexterm> |
| |
| <para>Removes all configuration information from the <replaceable>device</replaceable> and |
| forces it back to unconfigured state.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>role</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>role</secondary> |
| </indexterm> |
| |
| <para>Shows the current roles of the <replaceable>device</replaceable> and its peer, as |
| <replaceable>local</replaceable>/<replaceable>peer</replaceable>.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>state</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>state</secondary> |
| </indexterm> |
| |
| <para>Deprecated alias for "role"</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>cstate</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>cstate</secondary> |
| </indexterm> |
| |
| <para>Shows the current connection state of the <replaceable>device</replaceable>.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>dstate</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>dstate</secondary> |
| </indexterm> |
| |
| <para>Shows the current states of the backing storage devices, as |
| <replaceable>local</replaceable>/<replaceable>peer</replaceable>.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>resize</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>resize</secondary> |
| </indexterm> |
| |
| <para>This causes DRBD to reexamine the size of the <replaceable>device</replaceable>'s |
| backing storage device. To actually do online growing you need to extend the backing |
| storages on both devices and call the <option>resize</option> command on one of your |
| nodes.</para> |
| |
| <para>The <option>--size</option> option can be used to online shrink the usable |
| size of a drbd device. It's the users responsibility to make sure that a file system |
| on the device is not truncated by that operation.</para> |
| |
| <para>The <option>--assume-peer-has-space</option> allows you to resize a device which is |
| currently not connected to the peer. Use with care, since if you do not resize the peer's |
| disk as well, further connect attempts of the two will fail.</para> |
| |
| <para>When the <option>--assume-clean</option> option is given DRBD will skip the resync of |
| the new storage. Only do this if you know that the new storage was initialized to the same |
| content by other means.</para> |
| |
| <para>The options <option>--al-stripes</option> and <option>--al-stripe-size-kB</option> may |
| be used to change the layout of the activity log online. In case of internal meta data |
| this may invovle shrinking the user visible size at the same time (unsing the |
| <option>--size</option>) or increasing the avalable space on the backing devices.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>check-resize</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>check-resize</secondary> |
| </indexterm> |
| |
| <para>To enable DRBD to detect offline resizing of backing devices this command may be used |
| to record the current size of backing devices. The size is stored in files in /var/lib/drbd/ |
| named drbd-minor-??.lkbd</para> |
| |
| <para>This command is called by <command moreinfo="none">drbdadm resize |
| <replaceable>res</replaceable></command> after <command moreinfo="none">drbdsetup |
| <replaceable>device</replaceable> resize</command> returned.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>pause-sync</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>pause-sync</secondary> |
| </indexterm> |
| |
| <para>Temporarily suspend an ongoing resynchronization by setting the local pause flag. |
| Resync only progresses if neither the local nor the remote pause flag is set. It might be |
| desirable to postpone DRBD's resynchronization after eventual resynchronization of the |
| backing storage's RAID setup.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>resume-sync</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>resume-sync</secondary> |
| </indexterm> |
| |
| <para>Unset the local sync pause flag.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>outdate</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>outdate</secondary> |
| </indexterm> |
| |
| <para>Mark the data on the local backing storage as outdated. An outdated device refuses to |
| become primary. This is used in conjunction with <option>fencing</option> and by the peer's |
| <option>fence-peer</option> handler.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>show-gi</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>show-gi</secondary> |
| </indexterm> |
| |
| <para>Displays the device's data generation identifiers verbosely.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>get-gi</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>get-gi</secondary> |
| </indexterm> |
| |
| <para>Displays the device's data generation identifiers.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>show</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>show</secondary> |
| </indexterm> |
| |
| <para>Shows all available configuration information of a resource, or of all resources. Available options: |
| <variablelist> |
| <varlistentry> |
| <term><option>--show-defaults</option></term> |
| |
| <listitem> |
| <para>Show all configuration parameters, even the ones with |
| default values. Normally, parameters with default values are |
| not shown.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| </refsect2> |
| |
| <refsect2> |
| <title>suspend-io</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>suspend-io</secondary> |
| </indexterm> |
| |
| <para>This command is of no apparent use and just provided for the sake of |
| completeness.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>resume-io</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>resume-io</secondary> |
| </indexterm> |
| |
| <para>If the fence-peer handler fails to stonith the peer node, and your |
| <option>fencing</option> policy is set to resource-and-stonith, you can unfreeze IO |
| operations with this command.</para> |
| </refsect2> |
| |
| <refsect2> |
| <title>status</title> |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| <secondary>status</secondary> |
| </indexterm> |
| |
| <para>Show the status of a resource, or of all resources. The |
| output consists of one paragraph for each configured resource. Each |
| paragraph contains one line for each resource, followed by one line |
| for each device, and one line for each connection. The device and |
| connection lines are indented. The connection lines are followed by |
| one line for each peer device; these lines are indented against the |
| connection line.</para> |
| |
| <para>Long lines are wrapped around at terminal width, and indented |
| to indicate how the lines belongs together. Available options: |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--verbose</option></term> |
| |
| <listitem> |
| <para>Include more information in the output even when it is |
| likely redundant or irrelevant.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--statistics</option></term> |
| |
| <listitem> |
| <para>Include data transfer statistics in the output.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term> |
| <option>--color=<group choice="req" rep="norepeat"> |
| <arg choice="plain" rep="norepeat">always</arg> |
| <arg choice="plain" rep="norepeat">auto</arg> |
| <arg choice="plain" rep="norepeat">never</arg> |
| </group> |
| </option> |
| </term> |
| |
| <listitem> |
| <para>Colorize the output. With |
| <option>--color=auto</option>, <option>drbdsetup</option> |
| emits color codes only when standard output is connected to |
| a terminal. |
| </para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| |
| <para>For example, the non-verbose output for a resource with only |
| one connection and only one volume could look like this: |
| <programlisting format="linespecific"> |
| fs-backoffice role:Primary |
| disk:UpToDate |
| peer role:Secondary |
| replication:Established peer-disk:UpToDate |
| </programlisting> |
| </para> |
| |
| <para>With the <option>--verbose</option> <option>--statistics</option> options, the same resource |
| could be reported as: |
| <programlisting format="linespecific"> |
| 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 |
| </programlisting> |
| </para> |
| </refsect2> |
| |
| <refsect2> |
| <title>events2</title> |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| <secondary>events2</secondary> |
| </indexterm> |
| |
| <para>Show the current state of all configured DRBD objects, followed |
| by all changes to the state.</para> |
| |
| <para>The output format is meant to be human as well as machine |
| readable. Each line starts with the event number, which is |
| followed by an asterisk if the event continues in the next line. |
| The second word in each line indicates the kind of event: |
| <option>exists</option> for an existing object; |
| <option>create</option>, <option>destroy</option>, and |
| <option>change</option> if an object is created, destroyed, or |
| changed; or <option>call</option> or <option>response</option> if |
| an event handler is called or it returns. The third word indicates |
| the object the event applies to: <option>resource</option>, |
| <option>device</option>, <option>connection</option>, |
| <option>peer-device</option>, <option>helper</option>, or a dash |
| (<option>-</option>) to indicate that the current state has been |
| dumped completely.</para> |
| |
| <para>The remaining words identify the object and describe the state |
| that he object is in. Available options: |
| |
| <variablelist> |
| <varlistentry> |
| <term><option>--now</option></term> |
| |
| <listitem> |
| <para>Terminate after reporting the current state. The |
| default is to continuously listen and report state |
| changes.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--statistics</option></term> |
| |
| <listitem> |
| <para>Include statistics in the output.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </para> |
| </refsect2> |
| |
| <refsect2> |
| <title>events</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>events</secondary> |
| </indexterm> |
| |
| <para>Deprecated. If possible, change to the events2 subcommand instead.</para> |
| <para>Displays every state change of DRBD and all calls to helper programs. This might be |
| used to get notified of DRBD's state changes by piping the output to another program. |
| <variablelist> |
| <varlistentry> |
| <term><option>--all-devices</option></term> |
| |
| <listitem> |
| <para>Display the events of all DRBD minors.</para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><option>--unfiltered</option></term> |
| |
| <listitem> |
| <para>This is a debugging aid that displays the content of all received netlink |
| messages.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist></para> |
| </refsect2> |
| |
| <refsect2> |
| <title>new-current-uuid</title> |
| |
| <indexterm significance="normal"> |
| <primary>drbdsetup</primary> |
| |
| <secondary>new-current-uuid</secondary> |
| </indexterm> |
| |
| <para>Generates a new current UUID and rotates all other UUID values. This has at least two |
| use cases, namely to skip the initial sync, and to reduce network bandwidth when starting in |
| a single node configuration and then later (re-)integrating a remote site.</para> |
| |
| <para>Available option: <variablelist> |
| <varlistentry> |
| <term><option>--clear-bitmap</option></term> |
| |
| <listitem> |
| <para>Clears the sync bitmap in addition to generating a new current UUID.</para> |
| </listitem> |
| </varlistentry> |
| </variablelist></para> |
| |
| <para>This can be used to skip the initial sync, if you want to start from scratch. This |
| use-case does only work on "Just Created" meta data. Necessary steps: <orderedlist |
| continuation="restarts" inheritnum="ignore" numeration="arabic"> |
| <listitem> |
| <simpara>On <emphasis>both</emphasis> nodes, initialize meta data and configure the |
| device.</simpara> |
| |
| <simpara><command moreinfo="none">drbdadm -- --force create-md |
| <replaceable>res</replaceable></command></simpara> |
| </listitem> |
| |
| <listitem> |
| <simpara>They need to do the initial handshake, so they know their sizes.</simpara> |
| |
| <simpara><command moreinfo="none">drbdadm up |
| <replaceable>res</replaceable></command></simpara> |
| </listitem> |
| |
| <listitem> |
| <simpara>They are now Connected Secondary/Secondary Inconsistent/Inconsistent. |
| Generate a new current-uuid and clear the dirty bitmap.</simpara> |
| |
| <simpara><command moreinfo="none">drbdadm new-current-uuid --clear-bitmap |
| <replaceable>res</replaceable></command></simpara> |
| </listitem> |
| |
| <listitem> |
| <simpara>They are now Connected Secondary/Secondary UpToDate/UpToDate. Make one side |
| primary and create a file system.</simpara> |
| |
| <simpara><command moreinfo="none">drbdadm primary |
| <replaceable>res</replaceable></command></simpara> |
| |
| <simpara><command moreinfo="none">mkfs -t <replaceable>fs-type</replaceable> $(drbdadm |
| sh-dev <replaceable>res</replaceable>)</command></simpara> |
| </listitem> |
| </orderedlist></para> |
| |
| <para>One obvious side-effect is that the replica is full of old garbage (unless you made |
| them identical using other means), so any online-verify is expected to find any number of |
| out-of-sync blocks.</para> |
| |
| <para><emphasis>You must not use this on pre-existing data!</emphasis> Even though it may |
| appear to work at first glance, once you switch to the other node, your data is toast, as it |
| never got replicated. So <emphasis>do not leave out the mkfs</emphasis> (or |
| equivalent).</para> |
| |
| <para>This can also be used to shorten the initial resync of a cluster where the second node |
| is added after the first node is gone into production, by means of disk shipping. This |
| use-case works on disconnected devices only, the device may be in primary or secondary |
| role.</para> |
| |
| <para>The necessary steps on the current active server are: <orderedlist |
| continuation="restarts" inheritnum="ignore" numeration="arabic"> |
| <listitem> |
| <simpara><command moreinfo="none">drbdsetup new-current-uuid --clear-bitmap <replaceable>minor</replaceable> |
| </command></simpara> |
| </listitem> |
| |
| <listitem> |
| <simpara>Take the copy of the current active server. E.g. by pulling a disk out of the |
| RAID1 controller, or by copying with dd. You need to copy the actual data, and the |
| meta data.</simpara> |
| </listitem> |
| |
| <listitem> |
| <simpara><command moreinfo="none">drbdsetup new-current-uuid <replaceable>minor</replaceable> |
| </command></simpara> |
| </listitem> |
| </orderedlist> Now add the disk to the new secondary node, and join it to the cluster. You |
| will get a resync of that parts that were changed since the first call to <command |
| moreinfo="none">drbdsetup</command> in step 1.</para> |
| </refsect2> |
| </refsect1> |
| |
| <refsect1> |
| <title>Examples</title> |
| |
| <para>For examples, please have a look at the |
| <ulink url="http://www.drbd.org/users-guide/"><citetitle>DRBD User's Guide</citetitle></ulink>.</para> |
| |
| </refsect1> |
| |
| <refsect1> |
| <title>Version</title> |
| |
| <simpara>This document was revised for version 8.3.2 of the DRBD distribution.</simpara> |
| </refsect1> |
| |
| <refsect1> |
| <title>Author</title> |
| |
| <simpara>Written by Philipp Reisner <email>philipp.reisner@linbit.com</email> and Lars |
| Ellenberg <email>lars.ellenberg@linbit.com</email></simpara> |
| </refsect1> |
| |
| <refsect1> |
| <title>Reporting Bugs</title> |
| |
| <simpara>Report bugs to <email>drbd-user@lists.linbit.com</email>.</simpara> |
| </refsect1> |
| |
| <refsect1> |
| <title>Copyright</title> |
| |
| <simpara>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.</simpara> |
| </refsect1> |
| |
| <refsect1> |
| <title>See Also</title> |
| |
| <para><citerefentry> |
| <refentrytitle>drbd.conf</refentrytitle> |
| |
| <manvolnum>5</manvolnum> |
| </citerefentry>, <citerefentry> |
| <refentrytitle>drbd</refentrytitle> |
| |
| <manvolnum>8</manvolnum> |
| </citerefentry>, <citerefentry> |
| <refentrytitle>drbddisk</refentrytitle> |
| |
| <manvolnum>8</manvolnum> |
| </citerefentry>, <citerefentry> |
| <refentrytitle>drbdadm</refentrytitle> |
| |
| <manvolnum>8</manvolnum> |
| </citerefentry>, |
| <ulink url="http://www.drbd.org/users-guide/"><citetitle>DRBD User's Guide</citetitle></ulink>, |
| <ulink url="http://www.drbd.org/"><citetitle>DRBD web site</citetitle></ulink></para> |
| |
| </refsect1> |
| </refentry> |