Enabling lockd
For image-based storage pools which are POSIX compliant, you can enable it easily by uncommenting lock_manager = "lockd"
in /etc/libvirt/qemu.conf
or on both hypervisors:
Now, enable and start the virtlockd
service on both the hypervisors. Also, restart libvirtd
on both the hypervisors.
# systemctl enable virtlockd; systemctl start virtlockd # systemctl restart libvirtd # systemctl status virtlockd
Starting vm1
on f22-02
:
[root@f22-02]# virsh start vm1 Domain vm1 started
Starting the same vm1
on f22-01
:
[root@f22-01]# virsh start vm1 error: Failed to start domain vm1 error: resource busy: Lockspace resource '/var/lib/libvirt/images/testvms/vm1.qcow2' is locked
Another method to enable lockd
is to use a hash of the disk's file path. Locks are saved in a shared directory that is exported through the NFS, or similar sharing, to the hypervisors. This is very useful when you have virtual disks, which are created and attached using multipath LUN. fcntl()
cannot be used in these cases...