Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
QEMU-BLOCK-DRIVERS(7)		      QEMU		   QEMU-BLOCK-DRIVERS(7)

NAME
     qemu-block-drivers - QEMU block drivers reference

SYNOPSIS
     QEMU block driver reference manual

DESCRIPTION
   Disk image file formats
     QEMU  supports many image file formats that can be used with VMs as well as
     with any of the tools (like qemu-img). This includes the preferred  formats
     raw  and qcow2 as well as formats that are supported for compatibility with
     older QEMU versions or other hypervisors.

     Depending on the image format, different options can be passed to	qemu-img
     create  and  qemu-img  convert using the -o option.  This section describes
     each format and the options that are supported for it.

     raw    Raw disk image format. This format has the advantage of being simple
	    and easily exportable to all other emulators. If  your  file  system
	    supports holes (for example in ext2 or ext3 on Linux or NTFS on Win-
	    dows),  then  only	the  written  sectors  will  reserve  space. Use
	    qemu-img info to know the real size used by the image or ls  -ls  on
	    Unix/Linux.

	    Supported options:

	    preallocation
		   Preallocation  mode (allowed values: off, falloc, full). fal-
		   loc mode preallocates space for image by calling posix_fallo-
		   cate(). full mode preallocates space  for  image  by  writing
		   data to underlying storage. This data may or may not be zero,
		   depending on the storage location.

     qcow2  QEMU image format, the most versatile format. Use it to have smaller
	    images (useful if your filesystem does not supports holes, for exam-
	    ple  on  Windows), zlib based compression and support of multiple VM
	    snapshots.

	    Supported options:

	    compat
		   Determines the qcow2 version to  use.  compat=0.10  uses  the
		   traditional	image  format that can be read by any QEMU since
		   0.10.  compat=1.1 enables image format extensions  that  only
		   QEMU  1.1 and newer understand (this is the default). Amongst
		   others, this includes zero clusters,  which	allow  efficient
		   copy-on-read for sparse images.

	    backing_file
		   File name of a base image (see create subcommand)

	    backing_fmt
		   Image format of the base image

	    encryption
		   This  option  is  deprecated  and  equivalent to encrypt.for-
		   mat=aes

	    encrypt.format
		   If this is set to luks, it requests that  the  qcow2  payload
		   (not  qcow2	header)  be encrypted using the LUKS format. The
		   passphrase to use to unlock the LUKS key slot is given by the
		   encrypt.key-secret parameter. LUKS encryption parameters  can
		   be tuned with the other encrypt.* parameters.

		   If  this  is  set to aes, the image is encrypted with 128-bit
		   AES-CBC.  The encryption key is given by the  encrypt.key-se-
		   cret  parameter.   This encryption format is considered to be
		   flawed by modern cryptography  standards,  suffering  from  a
		   number of design problems:

		   * The  AES-CBC cipher is used with predictable initialization
		     vectors based on the sector number. This makes it	vulnera-
		     ble  to chosen plaintext attacks which can reveal the exis-
		     tence of encrypted data.

		   * The user passphrase is directly used as the encryption key.
		     A poorly chosen or short passphrase will compromise the se-
		     curity of the encryption.

		   * In the event of the passphrase being compromised  there  is
		     no way to change the passphrase to protect data in any qcow
		     images. The files must be cloned, using a different encryp-
		     tion  passphrase  in  the	new file. The original file must
		     then be securely erased using a program like shred,  though
		     even this is ineffective with many modern storage technolo-
		     gies.

		   The	use  of this is no longer supported in system emulators.
		   Support only remains in the command line utilities,	for  the
		   purposes  of  data  liberation  and interoperability with old
		   versions of QEMU. The luks format should be used instead.

	    encrypt.key-secret
		   Provides  the  ID  of  a  secret  object  that  contains  the
		   passphrase	(encrypt.format=luks)  or  encryption  key  (en-
		   crypt.format=aes).

	    encrypt.cipher-alg
		   Name of the cipher algorithm and key  length.  Currently  de-
		   faults to aes-256. Only used when encrypt.format=luks.

	    encrypt.cipher-mode
		   Name  of  the  encryption  mode to use. Currently defaults to
		   xts.  Only used when encrypt.format=luks.

	    encrypt.ivgen-alg
		   Name of the initialization vector generator	algorithm.  Cur-
		   rently  defaults  to  plain64.  Only  used  when encrypt.for-
		   mat=luks.

	    encrypt.ivgen-hash-alg
		   Name of the hash algorithm to  use  with  the  initialization
		   vector generator (if required). Defaults to sha256. Only used
		   when encrypt.format=luks.

	    encrypt.hash-alg
		   Name  of  the  hash	algorithm to use for PBKDF algorithm De-
		   faults to sha256. Only used when encrypt.format=luks.

	    encrypt.iter-time
		   Amount of time, in milliseconds, to use for	PBKDF  algorithm
		   per	key slot.  Defaults to 2000. Only used when encrypt.for-
		   mat=luks.

	    cluster_size
		   Changes the qcow2 cluster size (must be between 512 and  2M).
		   Smaller cluster sizes can improve the image file size whereas
		   larger cluster sizes generally provide better performance.

	    preallocation
		   Preallocation  mode	(allowed  values: off, metadata, falloc,
		   full). An  image  with  preallocated  metadata  is  initially
		   larger  but	can  improve performance when the image needs to
		   grow. falloc and full preallocations are like  the  same  op-
		   tions of raw format, but sets up metadata also.

	    lazy_refcounts
		   If  this  option  is  set  to on, reference count updates are
		   postponed with the goal of avoiding metadata I/O and  improv-
		   ing	 performance.  This  is  particularly  interesting  with
		   cache=writethrough which doesn't batch metadata updates.  The
		   tradeoff  is that after a host crash, the reference count ta-
		   bles must be rebuilt, i.e. on the next  open  an  (automatic)
		   qemu-img check -r all is required, which may take some time.

		   This option can only be enabled if compat=1.1 is specified.

	    nocow  If  this  option  is  set  to on, it will turn off COW of the
		   file. It's only valid on btrfs, no effect on other file  sys-
		   tems.

		   Btrfs  has low performance when hosting a VM image file, even
		   more when the guest on the VM also using btrfs as  file  sys-
		   tem.  Turning  off  COW is a way to mitigate this bad perfor-
		   mance. Generally there are two ways to turn off COW on btrfs:

		   * Disable it by mounting with nodatacow, then all newly  cre-
		     ated files will be NOCOW.

		   * For  an  empty  file,  add the NOCOW file attribute. That's
		     what this option does.

		   Note: this option is only valid to new  or  empty  files.  If
		   there  is  an  existing file which is COW and has data blocks
		   already, it couldn't be changed to NOCOW by setting nocow=on.
		   One can issue lsattr filename to check if the NOCOW	flag  is
		   set or not (Capital 'C' is NOCOW flag).

     qed    Old QEMU image format with support for backing files and compact im-
	    age files (when your filesystem or transport medium does not support
	    holes).

	    When  converting QED images to qcow2, you might want to consider us-
	    ing the lazy_refcounts=on option to get a more QED-like behaviour.

	    Supported options:

	    backing_file
		   File name of a base image (see create subcommand).

	    backing_fmt
		   Image file format of backing file (optional).  Useful if  the
		   format  cannot be autodetected because it has no header, like
		   some vhd/vpc files.

	    cluster_size
		   Changes the cluster size (must be power-of-2 between  4K  and
		   64K).  Smaller  cluster sizes can improve the image file size
		   whereas larger cluster sizes generally provide better perfor-
		   mance.

	    table_size
		   Changes the number of  clusters  per  L1/L2	table  (must  be
		   power-of-2  between	1 and 16).  There is normally no need to
		   change this value but this option can between used  for  per-
		   formance benchmarking.

     qcow   Old  QEMU image format with support for backing files, compact image
	    files, encryption and compression.

	    Supported options:

	       backing_file
		      File name of a base image (see create subcommand)

	       encryption
		      This option is deprecated and equivalent	to  encrypt.for-
		      mat=aes

	       encrypt.format
		      If this is set to aes, the image is encrypted with 128-bit
		      AES-CBC.	  The	encryption  key  is  given  by	the  en-
		      crypt.key-secret parameter.   This  encryption  format  is
		      considered  to be flawed by modern cryptography standards,
		      suffering from a number of design problems enumerated pre-
		      viously against the qcow2 image format.

		      The use of this is no longer supported  in  system  emula-
		      tors.  Support only remains in the command line utilities,
		      for the purposes of data liberation  and	interoperability
		      with old versions of QEMU.

		      Users  requiring	native	encryption  should use the qcow2
		      format instead with encrypt.format=luks.

	       encrypt.key-secret
		      Provides the ID of a secret object that contains	the  en-
		      cryption key (encrypt.format=aes).

     luks   LUKS v1 encryption format, compatible with Linux dm-crypt/cryptsetup

	    Supported options:

	    key-secret
		   Provides  the  ID  of  a  secret  object  that  contains  the
		   passphrase.

	    cipher-alg
		   Name of the cipher algorithm and key  length.  Currently  de-
		   faults to aes-256.

	    cipher-mode
		   Name  of  the  encryption  mode to use. Currently defaults to
		   xts.

	    ivgen-alg
		   Name of the initialization vector generator	algorithm.  Cur-
		   rently defaults to plain64.

	    ivgen-hash-alg
		   Name  of  the  hash	algorithm to use with the initialization
		   vector generator (if required). Defaults to sha256.

	    hash-alg
		   Name of the hash algorithm to use  for  PBKDF  algorithm  De-
		   faults to sha256.

	    iter-time
		   Amount  of  time, in milliseconds, to use for PBKDF algorithm
		   per key slot.  Defaults to 2000.

     vdi    VirtualBox 1.1 compatible image format.

	    Supported options:

	    static
		   If this option is set to on, the image is created with  meta-
		   data preallocation.

     vmdk   VMware 3 and 4 compatible image format.

	    Supported options:

	    backing_file
		   File name of a base image (see create subcommand).

	    compat6
		   Create a VMDK version 6 image (instead of version 4)

	    hwversion
		   Specify vmdk virtual hardware version. Compat6 flag cannot be
		   enabled if hwversion is specified.

	    subformat
		   Specifies  which  VMDK  subformat  to  use. Valid options are
		   monolithicSparse   (default),   monolithicFlat,   twoGbMaxEx-
		   tentSparse, twoGbMaxExtentFlat and streamOptimized.

     vpc    VirtualPC compatible image format (VHD).

	    Supported options:

	    subformat
		   Specifies  which  VHD subformat to use. Valid options are dy-
		   namic (default) and fixed.

     VHDX   Hyper-V compatible image format (VHDX).

	    Supported options:

	    subformat
		   Specifies which VHDX subformat to use. Valid options are  dy-
		   namic (default) and fixed.

		   block_state_zero
			  Force  use  of  payload blocks of type 'ZERO'.  Can be
			  set to on (default) or off.	When  set  to  off,  new
			  blocks  will	be created as PAYLOAD_BLOCK_NOT_PRESENT,
			  which means parsers are free to return arbitrary  data
			  for  those  blocks.	Do  not  set  to  off when using
			  qemu-img convert with subformat=dynamic.

		   block_size
			  Block size; min 1 MB, max 256 MB.  0 means auto-calcu-
			  late based on image size.

		   log_size
			  Log size; min 1 MB.

   Read-only formats
     More disk image file formats are supported in a read-only mode.

     bochs  Bochs images of growing type.

     cloop  Linux Compressed Loop image, useful  only  to  reuse  directly  com-
	    pressed CD-ROM images present for example in the Knoppix CD-ROMs.

     dmg    Apple disk image.

     parallels
	    Parallels disk image format.

   Using host drives
     In  addition to disk image files, QEMU can directly access host devices. We
     describe here the usage for QEMU version >= 0.8.3.

   Linux
     On Linux, you can directly use the host device filename instead of  a  disk
     image  filename provided you have enough privileges to access it. For exam-
     ple, use /dev/cdrom to access to the CDROM.

     CD     You can specify a CDROM device even if no CDROM is loaded. QEMU  has
	    specific  code  to detect CDROM insertion or removal. CDROM ejection
	    by the guest OS is supported. Currently only data CDs are supported.

     Floppy
	    You can specify a floppy device even if no floppy is loaded.  Floppy
	    removal  is  currently not detected accurately (if you change floppy
	    without doing floppy access while the  floppy  is  not  loaded,  the
	    guest  OS  will  think  that the same floppy is loaded).  Use of the
	    host's floppy device is deprecated, and support for it will  be  re-
	    moved in a future release.

     Hard disks
	    Hard  disks  can  be  used. Normally you must specify the whole disk
	    (/dev/hdb instead of /dev/hdb1) so that the guest OS can see it as a
	    partitioned disk. WARNING: unless you know what you do, it is better
	    to only make READ-ONLY accesses to the hard disk otherwise	you  may
	    corrupt  your  host  data  (use the -snapshot command line option or
	    modify the device permissions accordingly).

     Zoned block devices
	    Zoned block devices can be passed through to the guest if  the  emu-
	    lated  storage  controller	supports  zoned  storage. Use --blockdev
	    host_device,   node-name=drive0,filename=/dev/nullb0,cache.direct=on
	    to pass through /dev/nullb0 as drive0.

   Windows
     CD     The  preferred  syntax  is the drive letter (e.g. d:). The alternate
	    syntax \\.\d: is supported. /dev/cdrom is supported as an  alias  to
	    the first CDROM drive.

	    Currently there is no specific code to handle removable media, so it
	    is	better	to use the change or eject monitor commands to change or
	    eject media.

     Hard disks
	    Hard disks can be used with the syntax: \\.\PhysicalDriveN	where  N
	    is the drive number (0 is the first hard disk).

	    WARNING:  unless  you  know  what  you do, it is better to only make
	    READ-ONLY accesses to the hard disk otherwise you may  corrupt  your
	    host  data (use the -snapshot command line so that the modifications
	    are written in a temporary file).

   Mac OS X
     /dev/cdrom is an alias to the first CDROM.

     Currently there is no specific code to handle removable  media,  so  it  is
     better  to  use the change or eject monitor commands to change or eject me-
     dia.

   Virtual FAT disk images
     QEMU can automatically create a virtual FAT disk  image  from  a  directory
     tree. In order to use it, just type:

	qemu-system-x86_64 linux.img -hdb fat:/my_directory

     Then  you	access	access	to  all the files in the /my_directory directory
     without having to copy them in a disk image or to export them via SAMBA  or
     NFS. The default access is read-only.

     Floppies can be emulated with the :floppy: option:

	qemu-system-x86_64 linux.img -fda fat:floppy:/my_directory

     A	read/write  support  is available for testing (beta stage) with the :rw:
     option:

	qemu-system-x86_64 linux.img -fda fat:floppy:rw:/my_directory

     What you should never do:

     * use non-ASCII filenames

     * use "-snapshot" together with ":rw:"

     * expect it to work when loadvm'ing

     * write to the FAT directory on the host system while accessing it with the
       guest system

   NBD access
     QEMU can access directly to block device exported using the  Network  Block
     Device protocol.

	qemu-system-x86_64 linux.img -hdb nbd://my_nbd_server.mydomain.org:1024/

     If  the  NBD server is located on the same host, you can use an unix socket
     instead of an inet socket:

	qemu-system-x86_64 linux.img -hdb nbd+unix://?socket=/tmp/my_socket

     In this case, the block device must be exported using qemu-nbd:

	qemu-nbd --socket=/tmp/my_socket my_disk.qcow2

     The use of qemu-nbd allows sharing of a disk between several guests:

	qemu-nbd --socket=/tmp/my_socket --share=2 my_disk.qcow2

     and then you can use it with two guests:

	qemu-system-x86_64 linux1.img -hdb nbd+unix://?socket=/tmp/my_socket
	qemu-system-x86_64 linux2.img -hdb nbd+unix://?socket=/tmp/my_socket

     If the nbd-server uses named exports (supported since NBD 2.9.18,	or  with
     QEMU's  own  embedded  NBD  server), you must specify an export name in the
     URI:

	qemu-system-x86_64 -cdrom nbd://localhost/debian-500-ppc-netinst
	qemu-system-x86_64 -cdrom nbd://localhost/openSUSE-11.1-ppc-netinst

     The URI syntax for NBD is supported since QEMU 1.3.  An alternative  syntax
     is also available.  Here are some example of the older syntax:

	qemu-system-x86_64 linux.img -hdb nbd:my_nbd_server.mydomain.org:1024
	qemu-system-x86_64 linux2.img -hdb nbd:unix:/tmp/my_socket
	qemu-system-x86_64 -cdrom nbd:localhost:10809:exportname=debian-500-ppc-netinst

   iSCSI LUNs
     iSCSI  is	a popular protocol used to access SCSI devices across a computer
     network.

     There are two different ways iSCSI devices can be used by QEMU.

     The first method is to mount the iSCSI LUN on the host, and make it  appear
     as  any  other ordinary SCSI device on the host and then to access this de-
     vice as a /dev/sd device from QEMU. How to do  this  differs  between  host
     OSes.

     The  second  method  involves  using the iSCSI initiator that is built into
     QEMU. This provides a mechanism that works the same way regardless of which
     host OS you are running QEMU on. This section  will  describe  this  second
     method of using iSCSI together with QEMU.

     In QEMU, iSCSI devices are described using special iSCSI URLs. URL syntax:

	iscsi://[<username>[%<password>]@]<host>[:<port>]/<target-iqn-name>/<lun>

     Username  and  password are optional and only used if your target is set up
     using CHAP authentication for access control.  Alternatively  the	username
     and  password  can  also be set via environment variables to have these not
     show up in the process list:

	export LIBISCSI_CHAP_USERNAME=<username>
	export LIBISCSI_CHAP_PASSWORD=<password>
	iscsi://<host>/<target-iqn-name>/<lun>

     Various session related parameters can be set via special	options,  either
     in  a configuration file provided via '-readconfig' or directly on the com-
     mand line.

     If the initiator-name is not specified qemu will  use  a  default	name  of
     'iqn.2008-11.org.linux-kvm[:<uuid>']  where  <uuid> is the UUID of the vir-
     tual  machine.   If   the	 UUID	is   not   specified   qemu   will   use
     'iqn.2008-11.org.linux-kvm[:<name>']  where  <name> is the name of the vir-
     tual machine.

     Setting a specific initiator name to use when logging in to the target:

	-iscsi initiator-name=iqn.qemu.test:my-initiator

     Controlling which type of header digest to negotiate with the target:

	-iscsi header-digest=CRC32C|CRC32C-NONE|NONE-CRC32C|NONE

     These can also be set via a configuration file:

	[iscsi]
	  user = "CHAP username"
	  password = "CHAP password"
	  initiator-name = "iqn.qemu.test:my-initiator"
	  # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
	  header-digest = "CRC32C"

     Setting the target name allows different options for different targets:

	[iscsi "iqn.target.name"]
	  user = "CHAP username"
	  password = "CHAP password"
	  initiator-name = "iqn.qemu.test:my-initiator"
	  # header digest is one of CRC32C|CRC32C-NONE|NONE-CRC32C|NONE
	  header-digest = "CRC32C"

     How to use a configuration file to set iSCSI configuration options:

	cat >iscsi.conf <<EOF
	[iscsi]
	  user = "me"
	  password = "my password"
	  initiator-name = "iqn.qemu.test:my-initiator"
	  header-digest = "CRC32C"
	EOF

	qemu-system-x86_64 -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \
	  -readconfig iscsi.conf

     How to set up a simple iSCSI target on loopback and  access  it  via  QEMU:
     this  example  shows  how	to set up an iSCSI target with one CDROM and one
     DISK using the Linux STGT software target. This target is available on  Red
     Hat based systems as the package 'scsi-target-utils'.

	tgtd --iscsi portal=127.0.0.1:3260
	tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.qemu.test
	tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 \
	    -b /IMAGES/disk.img --device-type=disk
	tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 2 \
	    -b /IMAGES/cd.iso --device-type=cd
	tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL

	qemu-system-x86_64 -iscsi initiator-name=iqn.qemu.test:my-initiator \
	  -boot d -drive file=iscsi://127.0.0.1/iqn.qemu.test/1 \
	  -cdrom iscsi://127.0.0.1/iqn.qemu.test/2

   GlusterFS disk images
     GlusterFS is a user space distributed file system.

     You can boot from the GlusterFS disk image with the command:

     URI:

	qemu-system-x86_64 -drive file=gluster[+TYPE]://[HOST}[:PORT]]/VOLUME/PATH
				     [?socket=...][,file.debug=9][,file.logfile=...]

     JSON:

	qemu-system-x86_64 'json:{"driver":"qcow2",
				 "file":{"driver":"gluster",
					  "volume":"testvol","path":"a.img","debug":9,"logfile":"...",
					  "server":[{"type":"tcp","host":"...","port":"..."},
						    {"type":"unix","socket":"..."}]}}'

     gluster is the protocol.

     TYPE  specifies  the  transport  type used to connect to gluster management
     daemon (glusterd). Valid transport types are tcp and unix. In the URI form,
     if a transport type isn't specified, then tcp type is assumed.

     HOST specifies the server where the volume file specification for the given
     volume resides. This can be either a  hostname  or  an  ipv4  address.   If
     transport	type  is unix, then HOST field should not be specified.  Instead
     socket field needs to be populated with the path to unix domain socket.

     PORT is the port number on which glusterd is listening.  This  is	optional
     and  if  not specified, it defaults to port 24007. If the transport type is
     unix, then PORT should not be specified.

     VOLUME is the name of the gluster volume which contains the disk image.

     PATH is the path to the actual disk image that resides on gluster volume.

     debug is the logging level of the gluster protocol driver. Debug levels are
     0-9, with 9 being the most verbose, and 0 representing no debugging output.
     The default level is 4. The current logging levels defined in  the  gluster
     source are 0 - None, 1 - Emergency, 2 - Alert, 3 - Critical, 4 - Error, 5 -
     Warning, 6 - Notice, 7 - Info, 8 - Debug, 9 - Trace

     logfile  is  a  commandline  option to mention log file path which helps in
     logging to the specified file and also help in persisting the  gfapi  logs.
     The default is stderr.

     You can create a GlusterFS disk image with the command:

	qemu-img create gluster://HOST/VOLUME/PATH SIZE

     Examples

	qemu-system-x86_64 -drive file=gluster://1.2.3.4/testvol/a.img
	qemu-system-x86_64 -drive file=gluster+tcp://1.2.3.4/testvol/a.img
	qemu-system-x86_64 -drive file=gluster+tcp://1.2.3.4:24007/testvol/dir/a.img
	qemu-system-x86_64 -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]/testvol/dir/a.img
	qemu-system-x86_64 -drive file=gluster+tcp://[1:2:3:4:5:6:7:8]:24007/testvol/dir/a.img
	qemu-system-x86_64 -drive file=gluster+tcp://server.domain.com:24007/testvol/dir/a.img
	qemu-system-x86_64 -drive file=gluster+unix:///testvol/dir/a.img?socket=/tmp/glusterd.socket
	qemu-system-x86_64 -drive file=gluster://1.2.3.4/testvol/a.img,file.debug=9,file.logfile=/var/log/qemu-gluster.log
	qemu-system-x86_64 'json:{"driver":"qcow2",
				 "file":{"driver":"gluster",
					  "volume":"testvol","path":"a.img",
					  "debug":9,"logfile":"/var/log/qemu-gluster.log",
					  "server":[{"type":"tcp","host":"1.2.3.4","port":24007},
						    {"type":"unix","socket":"/var/run/glusterd.socket"}]}}'
	qemu-system-x86_64 -drive driver=qcow2,file.driver=gluster,file.volume=testvol,file.path=/path/a.img,
					     file.debug=9,file.logfile=/var/log/qemu-gluster.log,
					     file.server.0.type=tcp,file.server.0.host=1.2.3.4,file.server.0.port=24007,
					     file.server.1.type=unix,file.server.1.socket=/var/run/glusterd.socket

   Secure Shell (ssh) disk images
     You  can access disk images located on a remote ssh server by using the ssh
     protocol:

	qemu-system-x86_64 -drive file=ssh://[USER@]SERVER[:PORT]/PATH[?host_key_check=HOST_KEY_CHECK]

     Alternative syntax using properties:

	qemu-system-x86_64 -drive file.driver=ssh[,file.user=USER],file.host=SERVER[,file.port=PORT],file.path=PATH[,file.host_key_check=HOST_KEY_CHECK]

     ssh is the protocol.

     USER is the remote user.  If not specified,  then	the  local  username  is
     tried.

     SERVER specifies the remote ssh server.  Any ssh server can be used, but it
     must  implement  the  sftp-server protocol.  Most Unix/Linux systems should
     work without requiring any extra configuration.

     PORT is the port number on which sshd is listening.  By default  the  stan-
     dard ssh port (22) is used.

     PATH is the path to the disk image.

     The optional HOST_KEY_CHECK parameter controls how the remote host's key is
     checked.	The default is yes which means to use the local .ssh/known_hosts
     file.  Setting this to no turns off known-hosts checking.	Or you can check
     that the host key matches a specific fingerprint. The  fingerprint  can  be
     provided  in  md5,  sha1,	or sha256 format, however, it is strongly recom-
     mended to only use sha256, since the other options are considered	insecure
     by  modern  standards. The fingerprint value must be given as a hex encoded
     string:

	host_key_check=sha256:04ce2ae89ff4295a6b9c4111640bdcb3297858ee55cb434d9dd88796e93aa795

     The key string may optionally contain ":" separators between each	pair  of
     hex digits.

     The  $HOME/.ssh/known_hosts  file	contains  the  base64 encoded host keys.
     These can be converted into the format needed for QEMU using a command such
     as:

	$ for key in `grep 10.33.8.112 known_hosts | awk '{print $3}'`
	  do
	    echo $key | base64 -d | sha256sum
	  done
	  6c3aa525beda9dc83eadfbd7e5ba7d976ecb59575d1633c87cd06ed2ed6e366f  -
	  12214fd9ea5b408086f98ecccd9958609bd9ac7c0ea316734006bc7818b45dc8  -
	  d36420137bcbd101209ef70c3b15dc07362fbe0fa53c5b135eba6e6afa82f0ce  -

     Note that there can be multiple keys present per host, each with  different
     key  ciphers.  Care  is needed to pick the key fingerprint that matches the
     cipher QEMU will negotiate with the remote server.

     Currently authentication must be done using ssh-agent.   Other  authentica-
     tion methods may be supported in future.

     Note:  Many  ssh  servers do not support an fsync-style operation.  The ssh
     driver cannot guarantee that disk	flush  requests  are  obeyed,  and  this
     causes  a risk of disk corruption if the remote server or network goes down
     during writes.  The driver will print a warning  when  fsync  is  not  sup-
     ported:

	warning: ssh server ssh.example.com:22 does not support fsync

     With sufficiently new versions of libssh and OpenSSH, fsync is supported.

   NVMe disk images
     NVM  Express (NVMe) storage controllers can be accessed directly by a user-
     space driver in QEMU.  This bypasses the host kernel file system and  block
     layers  while  retaining  QEMU  block  layer functionalities, such as block
     jobs, I/O throttling, image formats, etc.	Disk I/O  performance  is  typi-
     cally  higher  than  with	-drive file=/dev/sda using either thread pool or
     linux-aio.

     The controller will be exclusively used by the QEMU process  once	started.
     To  be able to share storage between multiple VMs and other applications on
     the host, please use the file based protocols.

     Before starting QEMU, bind the host NVMe controller to  the  host	vfio-pci
     driver.  For example:

	# modprobe vfio-pci
	# lspci -n -s 0000:06:0d.0
	06:0d.0 0401: 1102:0002 (rev 08)
	# echo 0000:06:0d.0 > /sys/bus/pci/devices/0000:06:0d.0/driver/unbind
	# echo 1102 0002 > /sys/bus/pci/drivers/vfio-pci/new_id

	# qemu-system-x86_64 -drive file=nvme://HOST:BUS:SLOT.FUNC/NAMESPACE

     Alternative syntax using properties:

	qemu-system-x86_64 -drive file.driver=nvme,file.device=HOST:BUS:SLOT.FUNC,file.namespace=NAMESPACE

     HOST:BUS:SLOT.FUNC is the NVMe controller's PCI device address on the host.

     NAMESPACE is the NVMe namespace number, starting from 1.

   Disk image file locking
     By  default,  QEMU  tries to protect image files from unexpected concurrent
     access, as long as it's supported by the block protocol driver and host op-
     erating system. If multiple QEMU processes (including  QEMU  emulators  and
     utilities) try to open the same image with conflicting accessing modes, all
     but the first one will get an error.

     This  feature is currently supported by the file protocol on Linux with the
     Open File Descriptor (OFD) locking API, and can be configured to fall  back
     to POSIX locking if the POSIX host doesn't support Linux OFD locking.

     To explicitly enable image locking, specify "locking=on" in the file proto-
     col  driver  options.  If	OFD  locking  is not possible, a warning will be
     printed and the POSIX locking API will be used. In this  case  there  is  a
     risk that the lock will get silently lost when doing hot plugging and block
     jobs, due to the shortcomings of the POSIX locking API.

     QEMU  transparently  handles lock handover during shared storage migration.
     For shared virtual disk images between multiple VMs, the "share-rw"  device
     option should be used.

     By  default, the guest has exclusive write access to its disk image. If the
     guest can safely share the  disk  image  with  other  writers  the  -device
     ...,share-rw=on  parameter  can be used.  This is only safe if the guest is
     running software, such as a cluster file system, that coordinates disk  ac-
     cesses to avoid corruption.

     Note  that share-rw=on only declares the guest's ability to share the disk.
     Some QEMU features, such as image file formats, require exclusive write ac-
     cess to the disk image and this is unaffected by the share-rw=on option.

     Alternatively, locking can be fully disabled by "locking=off" block  device
     option.  In  the  command	line,  the  option  is	usually  in  the form of
     "file.locking=off" as the protocol driver is normally placed  as  a  "file"
     child under a format driver. For example:

	-blockdev driver=qcow2,file.filename=/path/to/image,file.locking=off,file.driver=file

     To check if image locking is active, check the output of the "lslocks" com-
     mand on host and see if there are locks held by the QEMU process on the im-
     age  file.   More	than one byte could be locked by the QEMU instance, each
     byte of which reflects a particular permission that  is  acquired	or  pro-
     tected by the running block driver.

   Filter drivers
     QEMU  supports several filter drivers, which don't store any data, but per-
     form some additional tasks, hooking io requests.

     preallocate
	    The preallocate filter driver is intended  to  be  inserted  between
	    format  and  protocol  nodes  and preallocates some additional space
	    (expanding the protocol file) when writing past the fileas end. This
	    can be useful for file-systems with slow allocation.

	    Supported options:

	    prealloc-align
		   On preallocation, align the file length  to	this  value  (in
		   bytes), default 1M.

	    prealloc-size
		   How much to preallocate (in bytes), default 128M.

SEE ALSO
     The  HTML documentation of QEMU for more precise information and Linux user
     mode emulator invocation.

AUTHOR
     Fabrice Bellard and the QEMU Project developers

COPYRIGHT
     2026, The QEMU Project Developers

11.0.2				  Aug 27, 2026		   QEMU-BLOCK-DRIVERS(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=qemu-block-drivers&sektion=7&manpath=FreeBSD+Ports+15.1.quarterly>

home | help