.TH "LVMLOCKD" "8" "LVM TOOLS #VERSION#" "Red Hat, Inc" "\""

.SH NAME
lvmlockd \(em LVM locking daemon

.SH DESCRIPTION
LVM commands use lvmlockd to coordinate access to shared storage.
.br
When LVM is used on devices shared by multiple hosts, locks will:

\[bu]
coordinate reading and writing of LVM metadata
.br
\[bu]
validate caching of LVM metadata
.br
\[bu]
prevent concurrent activation of logical volumes
.br

lvmlockd uses an external lock manager to perform basic locking.
.br
Lock manager (lock type) options are:

\[bu]
sanlock: places locks on disk within LVM storage.
.br
\[bu]
dlm: uses network communication and a cluster manager.
.br

.SH OPTIONS

lvmlockd [options]

For default settings, see lvmlockd \-h.

.B  \-\-help | \-h
        Show this help information.

.B  \-\-version | \-V
        Show version of lvmlockd.

.B  \-\-test | \-T
        Test mode, do not call lock manager.

.B  \-\-foreground | \-f
        Don't fork.

.B  \-\-daemon\-debug | \-D
        Don't fork and print debugging to stdout.

.B  \-\-pid\-file | \-p
.I path
        Set path to the pid file.

.B  \-\-socket\-path | \-s
.I path
        Set path to the socket to listen on.

.B  \-\-syslog\-priority | \-S err|warning|debug
        Write log messages from this level up to syslog.

.B  \-\-gl\-type | \-g sanlock|dlm
        Set global lock type to be sanlock or dlm.

.B  \-\-host\-id | \-i
.I num
        Set the local sanlock host id.

.B  \-\-host\-id\-file | \-F
.I path
        A file containing the local sanlock host_id.

.B  \-\-sanlock\-timeout | \-o
.I seconds
        Override the default sanlock I/O timeout.

.B  \-\-adopt | \-A 0|1
        Adopt locks from a previous instance of lvmlockd.


.SH USAGE

.SS Initial set up

Using LVM with lvmlockd for the first time includes some one\-time set up
steps:

.SS 1. choose a lock manager

.I dlm
.br
If dlm (or corosync) are already being used by other cluster
software, then select dlm.  dlm uses corosync which requires additional
configuration beyond the scope of this document.  See corosync and dlm
documentation for instructions on configuration, setup and usage.

.I sanlock
.br
Choose sanlock if dlm/corosync are not otherwise required.
sanlock does not depend on any clustering software or configuration.

.SS 2. configure hosts to use lvmlockd

On all hosts running lvmlockd, configure lvm.conf:
.nf
locking_type = 1
use_lvmlockd = 1
.fi

.I sanlock
.br
Assign each host a unique host_id in the range 1\-2000 by setting
.br
/etc/lvm/lvmlocal.conf local/host_id

.SS 3. start lvmlockd

Use a service/init file if available, or just run "lvmlockd".

.SS 4. start lock manager

.I sanlock
.br
systemctl start wdmd sanlock

.I dlm
.br
Follow external clustering documentation when applicable, otherwise:
.br
systemctl start corosync dlm

.SS 5. create VG on shared devices

vgcreate \-\-shared <vgname> <devices>

The shared option sets the VG lock type to sanlock or dlm depending on
which lock manager is running.  LVM commands will perform locking for the
VG using lvmlockd.  lvmlockd will use the chosen lock manager.

.SS 6. start VG on all hosts

vgchange \-\-lock\-start

lvmlockd requires shared VGs to be started before they are used.  This is
a lock manager operation to start (join) the VG lockspace, and it may take
some time.  Until the start completes, locks for the VG are not available.
LVM commands are allowed to read the VG while start is in progress.  (An
init/unit file can also be used to start VGs.)

.SS 7. create and activate LVs

Standard lvcreate and lvchange commands are used to create and activate
LVs in a shared VG.

An LV activated exclusively on one host cannot be activated on another.
When multiple hosts need to use the same LV concurrently, the LV can be
activated with a shared lock (see lvchange options \-aey vs \-asy.)
(Shared locks are disallowed for certain LV types that cannot be used from
multiple hosts.)


.SS Normal start up and shut down

After initial set up, start up and shut down include the following general
steps.  They can be performed manually or using the system service
manager.

\[bu]
start lvmetad
.br
\[bu]
start lvmlockd
.br
\[bu]
start lock manager
.br
\[bu]
vgchange \-\-lock\-start
.br
\[bu]
activate LVs in shared VGs
.br

The shut down sequence is the reverse:

\[bu]
deactivate LVs in shared VGs
.br
\[bu]
vgchange \-\-lock\-stop
.br
\[bu]
stop lock manager
.br
\[bu]
stop lvmlockd
.br
\[bu]
stop lvmetad
.br

.P

.SH TOPICS

.SS VG access control

The following terms are used to describe different forms of VG access
control.

.I "lockd VG"

A "lockd VG" is a shared VG that has a "lock type" of dlm or sanlock.
Using it requires lvmlockd.  These VGs exist on shared storage that is
visible to multiple hosts.  LVM commands use lvmlockd to perform locking
for these VGs when they are used.

If the lock manager for the lock type is not available (e.g. not started
or failed), lvmlockd is unable to acquire locks for LVM commands.  LVM
commands that only read the VG will generally be allowed to continue
without locks in this case (with a warning).  Commands to modify or
activate the VG will fail without the necessary locks.

.I "local VG"

A "local VG" is meant to be used by a single host.  It has no lock type or
lock type "none".  LVM commands and lvmlockd do not perform locking for
these VGs.  A local VG typically exists on local (non\-shared) devices and
cannot be used concurrently from different hosts.

If a local VG does exist on shared devices, it should be owned by a single
host by having its system ID set, see
.BR lvmsystemid (7).
Only the host with a matching system ID can use the local VG.  A VG
with no lock type and no system ID should be excluded from all but one
host using lvm.conf filters.  Without any of these protections, a local VG
on shared devices can be easily damaged or destroyed.

.I "clvm VG"

A "clvm VG" is a VG on shared storage (like a lockd VG) that requires
clvmd for clustering.  See below for converting a clvm VG to a lockd VG.


.SS lockd VGs from hosts not using lvmlockd

Only hosts that use lockd VGs should be configured to run lvmlockd.
However, shared devices used by lockd VGs may be visible from hosts not
using lvmlockd.  From a host not using lvmlockd, visible lockd VGs are
ignored in the same way as foreign VGs (see
.BR lvmsystemid (7).)

The \-\-shared option for reporting and display commands causes lockd VGs
to be displayed on a host not using lvmlockd, like the \-\-foreign option
does for foreign VGs.


.SS vgcreate comparison

The type of VG access control is specified in the vgcreate command.
See
.BR vgcreate (8)
for all vgcreate options.

.B vgcreate <vgname> <devices>

.IP \[bu] 2
Creates a local VG with the local system ID when neither lvmlockd nor clvm are configured.
.IP \[bu] 2
Creates a local VG with the local system ID when lvmlockd is configured.
.IP \[bu] 2
Creates a clvm VG when clvm is configured.

.P

.B vgcreate \-\-shared <vgname> <devices>
.IP \[bu] 2
Requires lvmlockd to be configured and running.
.IP \[bu] 2
Creates a lockd VG with lock type sanlock|dlm depending on which lock
manager is running.
.IP \[bu] 2
LVM commands request locks from lvmlockd to use the VG.
.IP \[bu] 2
lvmlockd obtains locks from the selected lock manager.

.P

.B vgcreate \-c|\-\-clustered y <vgname> <devices>
.IP \[bu] 2
Requires clvm to be configured and running.
.IP \[bu] 2
Creates a clvm VG with the "clustered" flag.
.IP \[bu] 2
LVM commands request locks from clvmd to use the VG.

.P

.SS creating the first sanlock VG

Creating the first sanlock VG is not protected by locking and requires
special attention.  This is because sanlock locks exist within the VG, so
they are not available until the VG exists.  The first sanlock VG will
contain the "global lock".

.IP \[bu] 2
The first vgcreate command needs to be given the path to a device that has
not yet been initialized with pvcreate.  The pvcreate initialization will
be done by vgcreate.  This is because the pvcreate command requires the
global lock, which will not be available until after the first sanlock VG
is created.

.IP \[bu] 2
While running vgcreate for the first sanlock VG, ensure that the device
being used is not used by another LVM command.  Allocation of shared
devices is usually protected by the global lock, but this cannot be done
for the first sanlock VG which will hold the global lock.

.IP \[bu] 2
While running vgcreate for the first sanlock VG, ensure that the VG name
being used is not used by another LVM command.  Uniqueness of VG names is
usually ensured by the global lock.

.IP \[bu] 2
Because the first sanlock VG will contain the global lock, this VG needs
to be accessible to all hosts that will use sanlock shared VGs.  All hosts
will need to use the global lock from the first sanlock VG.

See below for more information about managing the sanlock global lock.


.SS using lockd VGs

There are some special considerations when using lockd VGs.

When use_lvmlockd is first enabled in lvm.conf, and before the first lockd
VG is created, no global lock will exist.  In this initial state, LVM
commands try and fail to acquire the global lock, producing a warning, and
some commands are disallowed.  Once the first lockd VG is created, the
global lock will be available, and LVM will be fully operational.

When a new lockd VG is created, its lockspace is automatically started on
the host that creates it.  Other hosts need to run 'vgchange
\-\-lock\-start' to start the new VG before they can use it.

From the 'vgs' command, lockd VGs are indicated by "s" (for shared) in the
sixth attr field.  The specific lock type and lock args for a lockd VG can
be displayed with 'vgs \-o+locktype,lockargs'.

lockd VGs need to be "started" and "stopped", unlike other types of VGs.
See the following section for a full description of starting and stopping.

vgremove of a lockd VG will fail if other hosts have the VG started.
Run vgchange \-\-lock-stop <vgname> on all other hosts before vgremove.
(It may take several seconds before vgremove recognizes that all hosts
have stopped a sanlock VG.)

.SS starting and stopping VGs

Starting a lockd VG (vgchange \-\-lock\-start) causes the lock manager to
start (join) the lockspace for the VG on the host where it is run.  This
makes locks for the VG available to LVM commands on the host.  Before a VG
is started, only LVM commands that read/display the VG are allowed to
continue without locks (and with a warning).

Stopping a lockd VG (vgchange \-\-lock\-stop) causes the lock manager to
stop (leave) the lockspace for the VG on the host where it is run.  This
makes locks for the VG inaccessible to the host.  A VG cannot be stopped
while it has active LVs.

When using the lock type sanlock, starting a VG can take a long time
(potentially minutes if the host was previously shut down without cleanly
stopping the VG.)

A lockd VG can be started after all the following are true:
.br
\[bu]
lvmlockd is running
.br
\[bu]
the lock manager is running
.br
\[bu]
the VG is visible to the system
.br

A lockd VG can be stopped if all LVs are deactivated.

All lockd VGs can be started/stopped using:
.br
vgchange \-\-lock-start
.br
vgchange \-\-lock-stop


Individual VGs can be started/stopped using:
.br
vgchange \-\-lock\-start <vgname> ...
.br
vgchange \-\-lock\-stop <vgname> ...

To make vgchange not wait for start to complete:
.br
vgchange \-\-lock\-start \-\-lock\-opt nowait ...

lvmlockd can be asked directly to stop all lockspaces:
.br
lvmlockctl \-\-stop\-lockspaces

To start only selected lockd VGs, use the lvm.conf
activation/lock_start_list.  When defined, only VG names in this list are
started by vgchange.  If the list is not defined (the default), all
visible lockd VGs are started.  To start only "vg1", use the following
lvm.conf configuration:

.nf
activation {
    lock_start_list = [ "vg1" ]
    ...
}
.fi


.SS automatic starting and automatic activation

Scripts or programs on a host that automatically start VGs will use the
"auto" option to indicate that the command is being run automatically by
the system:

vgchange \-\-lock\-start \-\-lock\-opt auto [<vgname> ...]

Without any additional configuration, including the "auto" option has no
effect; all VGs are started unless restricted by lock_start_list.

However, when the lvm.conf activation/auto_lock_start_list is defined, the
auto start command performs an additional filtering phase to all VGs being
started, testing each VG name against the auto_lock_start_list.  The
auto_lock_start_list defines lockd VGs that will be started by the auto
start command.  Visible lockd VGs not included in the list are ignored by
the auto start command.  If the list is undefined, all VG names pass this
filter.  (The lock_start_list is also still used to filter all VGs.)

The auto_lock_start_list allows a user to select certain lockd VGs that
should be automatically started by the system (or indirectly, those that
should not).

To use auto activation of lockd LVs (see auto_activation_volume_list),
auto starting of the corresponding lockd VGs is necessary.


.SS internal command locking

To optimize the use of LVM with lvmlockd, be aware of the three kinds of
locks and when they are used:

.I GL lock

The global lock (GL lock) is associated with global information, which is
information not isolated to a single VG.  This includes:

\[bu]
The global VG namespace.
.br
\[bu]
The set of orphan PVs and unused devices.
.br
\[bu]
The properties of orphan PVs, e.g. PV size.
.br

The global lock is used in shared mode by commands that read this
information, or in exclusive mode by commands that change it.

The command 'vgs' acquires the global lock in shared mode because it
reports the list of all VG names.

The vgcreate command acquires the global lock in exclusive mode because it
creates a new VG name, and it takes a PV from the list of unused PVs.

When an LVM command is given a tag argument, or uses select, it must read
all VGs to match the tag or selection, which causes the global lock to be
acquired.

.I VG lock

A VG lock is associated with each VG.  The VG lock is acquired in shared
mode to read the VG and in exclusive mode to change the VG (modify the VG
metadata or activate LVs).  This lock serializes access to a VG with all
other LVM commands accessing the VG from all hosts.

The command 'vgs' will not only acquire the GL lock to read the list of
all VG names, but will acquire the VG lock for each VG prior to reading
it.

The command 'vgs <vgname>' does not acquire the GL lock (it does not need
the list of all VG names), but will acquire the VG lock on each VG name
argument.

.I LV lock

An LV lock is acquired before the LV is activated, and is released after
the LV is deactivated.  If the LV lock cannot be acquired, the LV is not
activated.  LV locks are persistent and remain in place after the
activation command is done.  GL and VG locks are transient, and are held
only while an LVM command is running.

.I lock retries

If a request for a GL or VG lock fails due to a lock conflict with another
host, lvmlockd automatically retries for a short time before returning a
failure to the LVM command.  If those retries are insufficient, the LVM
command will retry the entire lock request a number of times specified by
global/lvmlockd_lock_retries before failing.  If a request for an LV lock
fails due to a lock conflict, the command fails immediately.


.SS managing the global lock in sanlock VGs

The global lock exists in one of the sanlock VGs.  The first sanlock VG
created will contain the global lock.  Subsequent sanlock VGs will each
contain disabled global locks that can be enabled later if necessary.

The VG containing the global lock must be visible to all hosts using
sanlock VGs.  This can be a reason to create a small sanlock VG, visible
to all hosts, and dedicated to just holding the global lock.  While not
required, this strategy can help to avoid difficulty in the future if VGs
are moved or removed.

The vgcreate command typically acquires the global lock, but in the case
of the first sanlock VG, there will be no global lock to acquire until the
first vgcreate is complete.  So, creating the first sanlock VG is a
special case that skips the global lock.

vgcreate for a sanlock VG determines it is the first one to exist if no
other sanlock VGs are visible.  It is possible that other sanlock VGs do
exist but are not visible on the host running vgcreate.  In this case,
vgcreate would create a new sanlock VG with the global lock enabled.  When
the other VG containing a global lock appears, lvmlockd will see more than
one VG with a global lock enabled, and LVM commands will report that there
are duplicate global locks.

If the situation arises where more than one sanlock VG contains a global
lock, the global lock should be manually disabled in all but one of them
with the command:

lvmlockctl \-\-gl\-disable <vgname>

(The one VG with the global lock enabled must be visible to all hosts.)

An opposite problem can occur if the VG holding the global lock is
removed.  In this case, no global lock will exist following the vgremove,
and subsequent LVM commands will fail to acquire it.  In this case, the
global lock needs to be manually enabled in one of the remaining sanlock
VGs with the command:

lvmlockctl \-\-gl\-enable <vgname>

A small sanlock VG dedicated to holding the global lock can avoid the case
where the GL lock must be manually enabled after a vgremove.


.SS internal lvmlock LV

A sanlock VG contains a hidden LV called "lvmlock" that holds the sanlock
locks.  vgreduce cannot yet remove the PV holding the lvmlock LV.  To
remove this PV, change the VG lock type to "none", run vgreduce, then
change the VG lock type back to "sanlock".  Similarly, pvmove cannot be
used on a PV used by the lvmlock LV.

To place the lvmlock LV on a specific device, create the VG with only that
device, then use vgextend to add other devices.


.SS shared LVs

When an LV is used concurrently from multiple hosts (e.g. by a
multi\-host/cluster application or file system), the LV can be activated
on multiple hosts concurrently using a shared lock.

To activate the LV with a shared lock:  lvchange \-asy vg/lv.

With lvmlockd, an unspecified activation mode is always exclusive, i.e.
\-ay defaults to \-aey.

If the LV type does not allow the LV to be used concurrently from multiple
hosts, then a shared activation lock is not allowed and the lvchange
command will report an error.  LV types that cannot be used concurrently
from multiple hosts include thin, cache, raid, mirror, and snapshot.

lvextend on LV with shared locks is not yet allowed.  The LV must be
deactivated, or activated exclusively to run lvextend.


.SS recover from lost PV holding sanlock locks

The general approach is to change the VG lock type to "none", and then
change the lock type back to "sanlock".  This recreates the internal
lvmlock LV and the necessary locks on it.  Additional steps may be
required to deal with the missing PV.


.SS locking system failures

.B lvmlockd failure

If lvmlockd fails or is killed while holding locks, the locks are orphaned
in the lock manager.  lvmlockd can be restarted with an option to adopt
locks in the lock manager that had been held by the previous instance.

.B dlm/corosync failure

If dlm or corosync fail, the clustering system will fence the host using a
method configured within the dlm/corosync clustering environment.

LVM commands on other hosts will be blocked from acquiring any locks until
the dlm/corosync recovery process is complete.

.B sanlock lease storage failure

If the PV under a sanlock VG's lvmlock LV is disconnected, unresponsive or
too slow, sanlock cannot renew the lease for the VG's locks.  After some
time, the lease will expire, and locks that the host owns in the VG can be
acquired by other hosts.  The VG must be forcibly deactivated on the host
with the expiring lease before other hosts can acquire its locks.

When the sanlock daemon detects that the lease storage is lost, it runs
the command lvmlockctl \-\-kill <vgname>.  This command emits a syslog
message stating that lease storage is lost for the VG and LVs must be
immediately deactivated.

If no LVs are active in the VG, then the lockspace with an expiring lease
will be removed, and errors will be reported when trying to use the VG.
Use the lvmlockctl \-\-drop command to clear the stale lockspace from
lvmlockd.

If the VG has active LVs when the lock storage is lost, the LVs must be
quickly deactivated before the lockspace lease expires.  After all LVs are
deactivated, run lvmlockctl \-\-drop <vgname> to clear the expiring
lockspace from lvmlockd.  If all LVs in the VG are not deactivated within
about 40 seconds, sanlock will reset the host using the local watchdog.
The machine reset is effectively a severe form of "deactivating" LVs
before they can be activated on other hosts.  The reset is considered a
better alternative than having LVs used by multiple hosts at once, which
could easily damage or destroy their content.

In the future, the lvmlockctl kill command may automatically attempt to
forcibly deactivate LVs before the sanlock lease expires.  Until then, the
user must notice the syslog message and manually deactivate the VG before
sanlock resets the machine.

.B sanlock daemon failure

If the sanlock daemon fails or exits while a lockspace is started, the
local watchdog will reset the host.  This is necessary to protect any
application resources that depend on sanlock leases which will be lost
without sanlock running.


.SS changing dlm cluster name

When a dlm VG is created, the cluster name is saved in the VG metadata.
To use the VG, a host must be in the named dlm cluster.  If the dlm
cluster name changes, or the VG is moved to a new cluster, the dlm cluster
name saved in the VG must also be changed.

To see the dlm cluster name saved in the VG, use the command:
.br
vgs -o+locktype,lockargs <vgname>

To change the dlm cluster name in the VG when the VG is still used by the
original cluster:

.IP \[bu] 2
Stop the VG on all hosts:
.br
vgchange --lock-stop <vgname>

.IP \[bu] 2
Change the VG lock type to none:
.br
vgchange \-\-lock\-type none <vgname>

.IP \[bu] 2
Change the dlm cluster name on the host or move the VG to the new cluster.
The new dlm cluster must now be active on the host.  Verify the new name
by:
.br
cat /sys/kernel/config/dlm/cluster/cluster_name

.IP \[bu] 2
Change the VG lock type back to dlm which sets the new cluster name:
.br
vgchange \-\-lock\-type dlm <vgname>

.IP \[bu] 2
Start the VG on hosts to use it:
.br
vgchange --lock-start <vgname>

.P

To change the dlm cluster name in the VG when the dlm cluster name has
already changed, or the VG has already moved to a different cluster:

.IP \[bu] 2
Ensure the VG is not being used by any hosts.

.IP \[bu] 2
The new dlm cluster must be active on the host making the change.
The current dlm cluster name can be seen by:
.br
cat /sys/kernel/config/dlm/cluster/cluster_name

.IP \[bu] 2
Change the VG lock type to none:
.br
vgchange \-\-lock\-type none \-\-force <vgname>

.IP \[bu] 2
Change the VG lock type back to dlm which sets the new cluster name:
.br
vgchange \-\-lock\-type dlm <vgname>

.IP \[bu] 2
Start the VG on hosts to use it:
.br
vgchange --lock-start <vgname>


.SS changing a local VG to a lockd VG

All LVs must be inactive to change the lock type.

lvmlockd must be configured and running as described in USAGE.

Change a local VG to a lockd VG with the command:
.br
vgchange \-\-lock\-type sanlock|dlm <vgname>

Start the VG on hosts to use it:
.br
vgchange \-\-lock\-start <vgname>


.SS changing a lockd VG to a local VG

Stop the lockd VG on all hosts, then run:
.br
vgchange \-\-lock\-type none <vgname>

To change a VG from one lockd type to another (i.e. between sanlock and
dlm), first change it to a local VG, then to the new type.


.SS changing a clvm VG to a lockd VG

All LVs must be inactive to change the lock type.

First change the clvm VG to a local VG.  Within a running clvm cluster,
change a clvm VG to a local VG with the command:

vgchange \-cn <vgname>

If the clvm cluster is no longer running on any nodes, then extra options
can be used to forcibly make the VG local.  Caution: this is only safe if
all nodes have stopped using the VG:

vgchange \-\-config 'global/locking_type=0 global/use_lvmlockd=0'
.RS
\-cn <vgname>
.RE

After the VG is local, follow the steps described in "changing a local VG
to a lockd VG".


.SS limitations of lockd VGs

Things that do not yet work in lockd VGs:
.br
\[bu]
creating a new thin pool and a new thin LV in a single command
.br
\[bu]
using lvcreate to create cache pools or cache LVs (use lvconvert)
.br
\[bu]
using external origins for thin LVs
.br
\[bu]
splitting mirrors and snapshots from LVs
.br
\[bu]
vgsplit
.br
\[bu]
vgmerge
.br
\[bu]
resizing an LV that is active in the shared mode on multiple hosts


.SS lvmlockd changes from clvmd

(See above for converting an existing clvm VG to a lockd VG.)

While lvmlockd and clvmd are entirely different systems, LVM command usage
remains similar.  Differences are more notable when using lvmlockd's
sanlock option.

Visible usage differences between lockd VGs with lvmlockd and clvm VGs
with clvmd:

.IP \[bu] 2
lvm.conf must be configured to use either lvmlockd (use_lvmlockd=1) or
clvmd (locking_type=3), but not both.

.IP \[bu] 2
vgcreate \-\-shared creates a lockd VG, and vgcreate \-\-clustered y
creates a clvm VG.

.IP \[bu] 2
lvmlockd adds the option of using sanlock for locking, avoiding the
need for network clustering.

.IP \[bu] 2
lvmlockd defaults to the exclusive activation mode whenever the activation
mode is unspecified, i.e. \-ay means \-aey, not \-asy.

.IP \[bu] 2
lvmlockd commands always apply to the local host, and never have an effect
on a remote host.  (The activation option 'l' is not used.)

.IP \[bu] 2
lvmlockd works with thin and cache pools and LVs.

.IP \[bu] 2
lvmlockd works with lvmetad.

.IP \[bu] 2
lvmlockd saves the cluster name for a lockd VG using dlm.  Only hosts in
the matching cluster can use the VG.

.IP \[bu] 2
lvmlockd requires starting/stopping lockd VGs with vgchange \-\-lock-start
and \-\-lock-stop.

.IP \[bu] 2
vgremove of a sanlock VG may fail indicating that all hosts have not
stopped the VG lockspace.  Stop the VG on all hosts using vgchange
\-\-lock-stop.

.IP \[bu] 2
vgreduce or pvmove of a PV in a sanlock VG will fail if it holds the
internal "lvmlock" LV that holds the sanlock locks.

.IP \[bu] 2
lvmlockd uses lock retries instead of lock queueing, so high lock
contention may require increasing global/lvmlockd_lock_retries to
avoid transient lock failures.

.IP \[bu] 2
lvmlockd includes VG reporting options lock_type and lock_args, and LV
reporting option lock_args to view the corresponding metadata fields.

.IP \[bu] 2
In the 'vgs' command's sixth VG attr field, "s" for "shared" is displayed
for lockd VGs.

.IP \[bu] 2
If lvmlockd fails or is killed while in use, locks it held remain but are
orphaned in the lock manager.  lvmlockd can be restarted with an option to
adopt the orphan locks from the previous instance of lvmlockd.

.P
