1*c6ff7856SPeter Maydell=============================== 20daf34fdSPeter MaydellPersistent reservation managers 3*c6ff7856SPeter Maydell=============================== 40daf34fdSPeter Maydell 5*c6ff7856SPeter MaydellSCSI persistent reservations allow restricting access to block devices 60daf34fdSPeter Maydellto specific initiators in a shared storage setup. When implementing 70daf34fdSPeter Maydellclustering of virtual machines, it is a common requirement for virtual 80daf34fdSPeter Maydellmachines to send persistent reservation SCSI commands. However, 90daf34fdSPeter Maydellthe operating system restricts sending these commands to unprivileged 100daf34fdSPeter Maydellprograms because incorrect usage can disrupt regular operation of the 110daf34fdSPeter Maydellstorage fabric. 120daf34fdSPeter Maydell 130daf34fdSPeter MaydellFor this reason, QEMU's SCSI passthrough devices, ``scsi-block`` 140daf34fdSPeter Maydelland ``scsi-generic`` (both are only available on Linux) can delegate 150daf34fdSPeter Maydellimplementation of persistent reservations to a separate object, 160daf34fdSPeter Maydellthe "persistent reservation manager". Only PERSISTENT RESERVE OUT and 170daf34fdSPeter MaydellPERSISTENT RESERVE IN commands are passed to the persistent reservation 180daf34fdSPeter Maydellmanager object; other commands are processed by QEMU as usual. 190daf34fdSPeter Maydell 200daf34fdSPeter Maydell----------------------------------------- 210daf34fdSPeter MaydellDefining a persistent reservation manager 220daf34fdSPeter Maydell----------------------------------------- 230daf34fdSPeter Maydell 240daf34fdSPeter MaydellA persistent reservation manager is an instance of a subclass of the 250daf34fdSPeter Maydell"pr-manager" QOM class. 260daf34fdSPeter Maydell 270daf34fdSPeter MaydellRight now only one subclass is defined, ``pr-manager-helper``, which 280daf34fdSPeter Maydellforwards the commands to an external privileged helper program 290daf34fdSPeter Maydellover Unix sockets. The helper program only allows sending persistent 300daf34fdSPeter Maydellreservation commands to devices for which QEMU has a file descriptor, 310daf34fdSPeter Maydellso that QEMU will not be able to effect persistent reservations 320daf34fdSPeter Maydellunless it has access to both the socket and the device. 330daf34fdSPeter Maydell 340daf34fdSPeter Maydell``pr-manager-helper`` has a single string property, ``path``, which 350daf34fdSPeter Maydellaccepts the path to the helper program's Unix socket. For example, 360daf34fdSPeter Maydellthe following command line defines a ``pr-manager-helper`` object and 370daf34fdSPeter Maydellattaches it to a SCSI passthrough device:: 380daf34fdSPeter Maydell 390daf34fdSPeter Maydell $ qemu-system-x86_64 400daf34fdSPeter Maydell -device virtio-scsi \ 410daf34fdSPeter Maydell -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock 420daf34fdSPeter Maydell -drive if=none,id=hd,driver=raw,file.filename=/dev/sdb,file.pr-manager=helper0 430daf34fdSPeter Maydell -device scsi-block,drive=hd 440daf34fdSPeter Maydell 450daf34fdSPeter MaydellAlternatively, using ``-blockdev``:: 460daf34fdSPeter Maydell 470daf34fdSPeter Maydell $ qemu-system-x86_64 480daf34fdSPeter Maydell -device virtio-scsi \ 490daf34fdSPeter Maydell -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock 500daf34fdSPeter Maydell -blockdev node-name=hd,driver=raw,file.driver=host_device,file.filename=/dev/sdb,file.pr-manager=helper0 510daf34fdSPeter Maydell -device scsi-block,drive=hd 520daf34fdSPeter Maydell 53773ee3f1SPeter MaydellYou will also need to ensure that the helper program 54773ee3f1SPeter Maydell:command:`qemu-pr-helper` is running, and that it has been 55773ee3f1SPeter Maydellset up to use the same socket filename as your QEMU commandline 56773ee3f1SPeter Maydellspecifies. See the qemu-pr-helper documentation or manpage for 57773ee3f1SPeter Maydellfurther details. 580daf34fdSPeter Maydell 590daf34fdSPeter Maydell--------------------------------------------- 600daf34fdSPeter MaydellMultipath devices and persistent reservations 610daf34fdSPeter Maydell--------------------------------------------- 620daf34fdSPeter Maydell 630daf34fdSPeter MaydellProper support of persistent reservation for multipath devices requires 640daf34fdSPeter Maydellcommunication with the multipath daemon, so that the reservation is 650daf34fdSPeter Maydellregistered and applied when a path is newly discovered or becomes online 660daf34fdSPeter Maydellagain. :command:`qemu-pr-helper` can do this if the ``libmpathpersist`` 670daf34fdSPeter Maydelllibrary was available on the system at build time. 680daf34fdSPeter Maydell 690daf34fdSPeter MaydellAs of August 2017, a reservation key must be specified in ``multipath.conf`` 700daf34fdSPeter Maydellfor ``multipathd`` to check for persistent reservation for newly 710daf34fdSPeter Maydelldiscovered paths or reinstated paths. The attribute can be added 720daf34fdSPeter Maydellto the ``defaults`` section or the ``multipaths`` section; for example:: 730daf34fdSPeter Maydell 740daf34fdSPeter Maydell multipaths { 750daf34fdSPeter Maydell multipath { 760daf34fdSPeter Maydell wwid XXXXXXXXXXXXXXXX 770daf34fdSPeter Maydell alias yellow 780daf34fdSPeter Maydell reservation_key 0x123abc 790daf34fdSPeter Maydell } 800daf34fdSPeter Maydell } 810daf34fdSPeter Maydell 820daf34fdSPeter MaydellLinking :program:`qemu-pr-helper` to ``libmpathpersist`` does not impede 830daf34fdSPeter Maydellits usage on regular SCSI devices. 84