mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 04:06:46 +00:00 
			
		
		
		
	 c6ff78563a
			
		
	
	
		c6ff78563a
		
	
	
	
	
		
			
			Fix a couple of nits in pr-manager.rst: * the title marker for the top level heading is overlength * stray capital 'R' in the middle of a sentence Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ===============================
 | |
| Persistent reservation managers
 | |
| ===============================
 | |
| 
 | |
| SCSI persistent reservations allow restricting access to block devices
 | |
| to specific initiators in a shared storage setup.  When implementing
 | |
| clustering of virtual machines, it is a common requirement for virtual
 | |
| machines to send persistent reservation SCSI commands.  However,
 | |
| the operating system restricts sending these commands to unprivileged
 | |
| programs because incorrect usage can disrupt regular operation of the
 | |
| storage fabric.
 | |
| 
 | |
| For this reason, QEMU's SCSI passthrough devices, ``scsi-block``
 | |
| and ``scsi-generic`` (both are only available on Linux) can delegate
 | |
| implementation of persistent reservations to a separate object,
 | |
| the "persistent reservation manager".  Only PERSISTENT RESERVE OUT and
 | |
| PERSISTENT RESERVE IN commands are passed to the persistent reservation
 | |
| manager object; other commands are processed by QEMU as usual.
 | |
| 
 | |
| -----------------------------------------
 | |
| Defining a persistent reservation manager
 | |
| -----------------------------------------
 | |
| 
 | |
| A persistent reservation manager is an instance of a subclass of the
 | |
| "pr-manager" QOM class.
 | |
| 
 | |
| Right now only one subclass is defined, ``pr-manager-helper``, which
 | |
| forwards the commands to an external privileged helper program
 | |
| over Unix sockets.  The helper program only allows sending persistent
 | |
| reservation commands to devices for which QEMU has a file descriptor,
 | |
| so that QEMU will not be able to effect persistent reservations
 | |
| unless it has access to both the socket and the device.
 | |
| 
 | |
| ``pr-manager-helper`` has a single string property, ``path``, which
 | |
| accepts the path to the helper program's Unix socket.  For example,
 | |
| the following command line defines a ``pr-manager-helper`` object and
 | |
| attaches it to a SCSI passthrough device::
 | |
| 
 | |
|       $ qemu-system-x86_64
 | |
|           -device virtio-scsi \
 | |
|           -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock
 | |
|           -drive if=none,id=hd,driver=raw,file.filename=/dev/sdb,file.pr-manager=helper0
 | |
|           -device scsi-block,drive=hd
 | |
| 
 | |
| Alternatively, using ``-blockdev``::
 | |
| 
 | |
|       $ qemu-system-x86_64
 | |
|           -device virtio-scsi \
 | |
|           -object pr-manager-helper,id=helper0,path=/var/run/qemu-pr-helper.sock
 | |
|           -blockdev node-name=hd,driver=raw,file.driver=host_device,file.filename=/dev/sdb,file.pr-manager=helper0
 | |
|           -device scsi-block,drive=hd
 | |
| 
 | |
| You will also need to ensure that the helper program
 | |
| :command:`qemu-pr-helper` is running, and that it has been
 | |
| set up to use the same socket filename as your QEMU commandline
 | |
| specifies. See the qemu-pr-helper documentation or manpage for
 | |
| further details.
 | |
| 
 | |
| ---------------------------------------------
 | |
| Multipath devices and persistent reservations
 | |
| ---------------------------------------------
 | |
| 
 | |
| Proper support of persistent reservation for multipath devices requires
 | |
| communication with the multipath daemon, so that the reservation is
 | |
| registered and applied when a path is newly discovered or becomes online
 | |
| again.  :command:`qemu-pr-helper` can do this if the ``libmpathpersist``
 | |
| library was available on the system at build time.
 | |
| 
 | |
| As of August 2017, a reservation key must be specified in ``multipath.conf``
 | |
| for ``multipathd`` to check for persistent reservation for newly
 | |
| discovered paths or reinstated paths.  The attribute can be added
 | |
| to the ``defaults`` section or the ``multipaths`` section; for example::
 | |
| 
 | |
|     multipaths {
 | |
|         multipath {
 | |
|             wwid   XXXXXXXXXXXXXXXX
 | |
|             alias      yellow
 | |
|             reservation_key  0x123abc
 | |
|         }
 | |
|     }
 | |
| 
 | |
| Linking :program:`qemu-pr-helper` to ``libmpathpersist`` does not impede
 | |
| its usage on regular SCSI devices.
 |