<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <body>
    <h1>Virtual machine lock manager</h1>

    <ul id="toc"></ul>

    <p>
      Libvirt includes a framework for ensuring mutual exclusion
      between virtual machines using host resources. Typically
      this is used to prevent two VM processes from having concurrent
      write access to the same disk image, as this would result in
      data corruption if the guest was not using a cluster
      aware filesystem.
    </p>

    <h2><a name="plugins">Lock manager plugins</a></h2>

    <p>
      The lock manager framework has a pluggable architecture,
      to allow different locking technologies to be used.
    </p>

    <dl>
      <dt>nop</dt>
      <dd>This is a "no op" implementation which does absolutely
        nothing. This can be used if mutual exclusion between
        virtual machines is not required, or if it is being
        solved at another level in the management stack.</dd>
      <dt><a href="locking-lockd.html">lockd</a></dt>
      <dd>This is the current preferred implementation shipped
        with libvirt. It uses the <code>virtlockd</code> daemon
        to manage locks using the POSIX fcntl() advisory locking
        capability. As such it requires a shared filesystem of
        some kind be accessible to all hosts which share the
        same image storage.</dd>
      <dt><a href="locking-sanlock.html">sanlock</a></dt>
      <dd>This is an alternative implementation preferred by
        the oVirt project. It uses a disk paxos algorithm for
        maintaining continuously renewed leases. In the default
        setup it requires some shared filesystem, but it is
        possible to use it in a manual mode where the management
        application creates leases in SAN storage volumes.
      </dd>
    </dl>
  </body>
</html>
