1# -*- Mode: Python -*- 2 3## 4# == Block core (VM unrelated) 5## 6 7{ 'include': 'common.json' } 8{ 'include': 'crypto.json' } 9{ 'include': 'job.json' } 10{ 'include': 'sockets.json' } 11 12## 13# @SnapshotInfo: 14# 15# @id: unique snapshot id 16# 17# @name: user chosen name 18# 19# @vm-state-size: size of the VM state 20# 21# @date-sec: UTC date of the snapshot in seconds 22# 23# @date-nsec: fractional part in nano seconds to be used with date-sec 24# 25# @vm-clock-sec: VM clock relative to boot in seconds 26# 27# @vm-clock-nsec: fractional part in nano seconds to be used with vm-clock-sec 28# 29# Since: 1.3 30# 31## 32{ 'struct': 'SnapshotInfo', 33 'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int', 34 'date-sec': 'int', 'date-nsec': 'int', 35 'vm-clock-sec': 'int', 'vm-clock-nsec': 'int' } } 36 37## 38# @ImageInfoSpecificQCow2EncryptionBase: 39# 40# @format: The encryption format 41# 42# Since: 2.10 43## 44{ 'struct': 'ImageInfoSpecificQCow2EncryptionBase', 45 'data': { 'format': 'BlockdevQcow2EncryptionFormat'}} 46 47## 48# @ImageInfoSpecificQCow2Encryption: 49# 50# Since: 2.10 51## 52{ 'union': 'ImageInfoSpecificQCow2Encryption', 53 'base': 'ImageInfoSpecificQCow2EncryptionBase', 54 'discriminator': 'format', 55 'data': { 'luks': 'QCryptoBlockInfoLUKS' } } 56 57## 58# @ImageInfoSpecificQCow2: 59# 60# @compat: compatibility level 61# 62# @data-file: the filename of the external data file that is stored in the 63# image and used as a default for opening the image (since: 4.0) 64# 65# @data-file-raw: True if the external data file must stay valid as a 66# standalone (read-only) raw image without looking at qcow2 67# metadata (since: 4.0) 68# 69# @lazy-refcounts: on or off; only valid for compat >= 1.1 70# 71# @corrupt: true if the image has been marked corrupt; only valid for 72# compat >= 1.1 (since 2.2) 73# 74# @refcount-bits: width of a refcount entry in bits (since 2.3) 75# 76# @encrypt: details about encryption parameters; only set if image 77# is encrypted (since 2.10) 78# 79# @bitmaps: A list of qcow2 bitmap details (since 4.0) 80# 81# Since: 1.7 82## 83{ 'struct': 'ImageInfoSpecificQCow2', 84 'data': { 85 'compat': 'str', 86 '*data-file': 'str', 87 '*data-file-raw': 'bool', 88 '*lazy-refcounts': 'bool', 89 '*corrupt': 'bool', 90 'refcount-bits': 'int', 91 '*encrypt': 'ImageInfoSpecificQCow2Encryption', 92 '*bitmaps': ['Qcow2BitmapInfo'] 93 } } 94 95## 96# @ImageInfoSpecificVmdk: 97# 98# @create-type: The create type of VMDK image 99# 100# @cid: Content id of image 101# 102# @parent-cid: Parent VMDK image's cid 103# 104# @extents: List of extent files 105# 106# Since: 1.7 107## 108{ 'struct': 'ImageInfoSpecificVmdk', 109 'data': { 110 'create-type': 'str', 111 'cid': 'int', 112 'parent-cid': 'int', 113 'extents': ['ImageInfo'] 114 } } 115 116## 117# @ImageInfoSpecific: 118# 119# A discriminated record of image format specific information structures. 120# 121# Since: 1.7 122## 123{ 'union': 'ImageInfoSpecific', 124 'data': { 125 'qcow2': 'ImageInfoSpecificQCow2', 126 'vmdk': 'ImageInfoSpecificVmdk', 127 # If we need to add block driver specific parameters for 128 # LUKS in future, then we'll subclass QCryptoBlockInfoLUKS 129 # to define a ImageInfoSpecificLUKS 130 'luks': 'QCryptoBlockInfoLUKS' 131 } } 132 133## 134# @ImageInfo: 135# 136# Information about a QEMU image file 137# 138# @filename: name of the image file 139# 140# @format: format of the image file 141# 142# @virtual-size: maximum capacity in bytes of the image 143# 144# @actual-size: actual size on disk in bytes of the image 145# 146# @dirty-flag: true if image is not cleanly closed 147# 148# @cluster-size: size of a cluster in bytes 149# 150# @encrypted: true if the image is encrypted 151# 152# @compressed: true if the image is compressed (Since 1.7) 153# 154# @backing-filename: name of the backing file 155# 156# @full-backing-filename: full path of the backing file 157# 158# @backing-filename-format: the format of the backing file 159# 160# @snapshots: list of VM snapshots 161# 162# @backing-image: info of the backing image (since 1.6) 163# 164# @format-specific: structure supplying additional format-specific 165# information (since 1.7) 166# 167# Since: 1.3 168# 169## 170{ 'struct': 'ImageInfo', 171 'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool', 172 '*actual-size': 'int', 'virtual-size': 'int', 173 '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool', 174 '*backing-filename': 'str', '*full-backing-filename': 'str', 175 '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'], 176 '*backing-image': 'ImageInfo', 177 '*format-specific': 'ImageInfoSpecific' } } 178 179## 180# @ImageCheck: 181# 182# Information about a QEMU image file check 183# 184# @filename: name of the image file checked 185# 186# @format: format of the image file checked 187# 188# @check-errors: number of unexpected errors occurred during check 189# 190# @image-end-offset: offset (in bytes) where the image ends, this 191# field is present if the driver for the image format 192# supports it 193# 194# @corruptions: number of corruptions found during the check if any 195# 196# @leaks: number of leaks found during the check if any 197# 198# @corruptions-fixed: number of corruptions fixed during the check 199# if any 200# 201# @leaks-fixed: number of leaks fixed during the check if any 202# 203# @total-clusters: total number of clusters, this field is present 204# if the driver for the image format supports it 205# 206# @allocated-clusters: total number of allocated clusters, this 207# field is present if the driver for the image format 208# supports it 209# 210# @fragmented-clusters: total number of fragmented clusters, this 211# field is present if the driver for the image format 212# supports it 213# 214# @compressed-clusters: total number of compressed clusters, this 215# field is present if the driver for the image format 216# supports it 217# 218# Since: 1.4 219# 220## 221{ 'struct': 'ImageCheck', 222 'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int', 223 '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int', 224 '*corruptions-fixed': 'int', '*leaks-fixed': 'int', 225 '*total-clusters': 'int', '*allocated-clusters': 'int', 226 '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } } 227 228## 229# @MapEntry: 230# 231# Mapping information from a virtual block range to a host file range 232# 233# @start: the start byte of the mapped virtual range 234# 235# @length: the number of bytes of the mapped virtual range 236# 237# @data: whether the mapped range has data 238# 239# @zero: whether the virtual blocks are zeroed 240# 241# @depth: the depth of the mapping 242# 243# @offset: the offset in file that the virtual sectors are mapped to 244# 245# @filename: filename that is referred to by @offset 246# 247# Since: 2.6 248# 249## 250{ 'struct': 'MapEntry', 251 'data': {'start': 'int', 'length': 'int', 'data': 'bool', 252 'zero': 'bool', 'depth': 'int', '*offset': 'int', 253 '*filename': 'str' } } 254 255## 256# @BlockdevCacheInfo: 257# 258# Cache mode information for a block device 259# 260# @writeback: true if writeback mode is enabled 261# @direct: true if the host page cache is bypassed (O_DIRECT) 262# @no-flush: true if flush requests are ignored for the device 263# 264# Since: 2.3 265## 266{ 'struct': 'BlockdevCacheInfo', 267 'data': { 'writeback': 'bool', 268 'direct': 'bool', 269 'no-flush': 'bool' } } 270 271## 272# @BlockDeviceInfo: 273# 274# Information about the backing device for a block device. 275# 276# @file: the filename of the backing device 277# 278# @node-name: the name of the block driver node (Since 2.0) 279# 280# @ro: true if the backing device was open read-only 281# 282# @drv: the name of the block format used to open the backing device. As of 283# 0.14.0 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 'dmg', 284# 'file', 'file', 'ftp', 'ftps', 'host_cdrom', 'host_device', 285# 'http', 'https', 'luks', 'nbd', 'parallels', 'qcow', 286# 'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat' 287# 2.2: 'archipelago' added, 'cow' dropped 288# 2.3: 'host_floppy' deprecated 289# 2.5: 'host_floppy' dropped 290# 2.6: 'luks' added 291# 2.8: 'replication' added, 'tftp' dropped 292# 2.9: 'archipelago' dropped 293# 294# @backing_file: the name of the backing file (for copy-on-write) 295# 296# @backing_file_depth: number of files in the backing file chain (since: 1.2) 297# 298# @encrypted: true if the backing device is encrypted 299# 300# @encryption_key_missing: Deprecated; always false 301# 302# @detect_zeroes: detect and optimize zero writes (Since 2.1) 303# 304# @bps: total throughput limit in bytes per second is specified 305# 306# @bps_rd: read throughput limit in bytes per second is specified 307# 308# @bps_wr: write throughput limit in bytes per second is specified 309# 310# @iops: total I/O operations per second is specified 311# 312# @iops_rd: read I/O operations per second is specified 313# 314# @iops_wr: write I/O operations per second is specified 315# 316# @image: the info of image used (since: 1.6) 317# 318# @bps_max: total throughput limit during bursts, 319# in bytes (Since 1.7) 320# 321# @bps_rd_max: read throughput limit during bursts, 322# in bytes (Since 1.7) 323# 324# @bps_wr_max: write throughput limit during bursts, 325# in bytes (Since 1.7) 326# 327# @iops_max: total I/O operations per second during bursts, 328# in bytes (Since 1.7) 329# 330# @iops_rd_max: read I/O operations per second during bursts, 331# in bytes (Since 1.7) 332# 333# @iops_wr_max: write I/O operations per second during bursts, 334# in bytes (Since 1.7) 335# 336# @bps_max_length: maximum length of the @bps_max burst 337# period, in seconds. (Since 2.6) 338# 339# @bps_rd_max_length: maximum length of the @bps_rd_max 340# burst period, in seconds. (Since 2.6) 341# 342# @bps_wr_max_length: maximum length of the @bps_wr_max 343# burst period, in seconds. (Since 2.6) 344# 345# @iops_max_length: maximum length of the @iops burst 346# period, in seconds. (Since 2.6) 347# 348# @iops_rd_max_length: maximum length of the @iops_rd_max 349# burst period, in seconds. (Since 2.6) 350# 351# @iops_wr_max_length: maximum length of the @iops_wr_max 352# burst period, in seconds. (Since 2.6) 353# 354# @iops_size: an I/O size in bytes (Since 1.7) 355# 356# @group: throttle group name (Since 2.4) 357# 358# @cache: the cache mode used for the block device (since: 2.3) 359# 360# @write_threshold: configured write threshold for the device. 361# 0 if disabled. (Since 2.3) 362# 363# Since: 0.14.0 364# 365## 366{ 'struct': 'BlockDeviceInfo', 367 'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str', 368 '*backing_file': 'str', 'backing_file_depth': 'int', 369 'encrypted': 'bool', 'encryption_key_missing': 'bool', 370 'detect_zeroes': 'BlockdevDetectZeroesOptions', 371 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int', 372 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', 373 'image': 'ImageInfo', 374 '*bps_max': 'int', '*bps_rd_max': 'int', 375 '*bps_wr_max': 'int', '*iops_max': 'int', 376 '*iops_rd_max': 'int', '*iops_wr_max': 'int', 377 '*bps_max_length': 'int', '*bps_rd_max_length': 'int', 378 '*bps_wr_max_length': 'int', '*iops_max_length': 'int', 379 '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int', 380 '*iops_size': 'int', '*group': 'str', 'cache': 'BlockdevCacheInfo', 381 'write_threshold': 'int' } } 382 383## 384# @BlockDeviceIoStatus: 385# 386# An enumeration of block device I/O status. 387# 388# @ok: The last I/O operation has succeeded 389# 390# @failed: The last I/O operation has failed 391# 392# @nospace: The last I/O operation has failed due to a no-space condition 393# 394# Since: 1.0 395## 396{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] } 397 398## 399# @BlockDeviceMapEntry: 400# 401# Entry in the metadata map of the device (returned by "qemu-img map") 402# 403# @start: Offset in the image of the first byte described by this entry 404# (in bytes) 405# 406# @length: Length of the range described by this entry (in bytes) 407# 408# @depth: Number of layers (0 = top image, 1 = top image's backing file, etc.) 409# before reaching one for which the range is allocated. The value is 410# in the range 0 to the depth of the image chain - 1. 411# 412# @zero: the sectors in this range read as zeros 413# 414# @data: reading the image will actually read data from a file (in particular, 415# if @offset is present this means that the sectors are not simply 416# preallocated, but contain actual data in raw format) 417# 418# @offset: if present, the image file stores the data for this range in 419# raw format at the given offset. 420# 421# Since: 1.7 422## 423{ 'struct': 'BlockDeviceMapEntry', 424 'data': { 'start': 'int', 'length': 'int', 'depth': 'int', 'zero': 'bool', 425 'data': 'bool', '*offset': 'int' } } 426 427## 428# @DirtyBitmapStatus: 429# 430# An enumeration of possible states that a dirty bitmap can report to the user. 431# 432# @frozen: The bitmap is currently in-use by some operation and is immutable. 433# If the bitmap was @active prior to the operation, new writes by the 434# guest are being recorded in a temporary buffer, and will not be lost. 435# Generally, bitmaps are cleared on successful use in an operation and 436# the temporary buffer is committed into the bitmap. On failure, the 437# temporary buffer is merged back into the bitmap without first 438# clearing it. 439# Please refer to the documentation for each bitmap-using operation, 440# See also @blockdev-backup, @drive-backup. 441# 442# @disabled: The bitmap is not currently recording new writes by the guest. 443# This is requested explicitly via @block-dirty-bitmap-disable. 444# It can still be cleared, deleted, or used for backup operations. 445# 446# @active: The bitmap is actively monitoring for new writes, and can be cleared, 447# deleted, or used for backup operations. 448# 449# @locked: The bitmap is currently in-use by some operation and is immutable. 450# If the bitmap was @active prior to the operation, it is still 451# recording new writes. If the bitmap was @disabled, it is not 452# recording new writes. (Since 2.12) 453# 454# @inconsistent: This is a persistent dirty bitmap that was marked in-use on 455# disk, and is unusable by QEMU. It can only be deleted. 456# Please rely on the inconsistent field in @BlockDirtyInfo 457# instead, as the status field is deprecated. (Since 4.0) 458# 459# Since: 2.4 460## 461{ 'enum': 'DirtyBitmapStatus', 462 'data': ['active', 'disabled', 'frozen', 'locked', 'inconsistent'] } 463 464## 465# @BlockDirtyInfo: 466# 467# Block dirty bitmap information. 468# 469# @name: the name of the dirty bitmap (Since 2.4) 470# 471# @count: number of dirty bytes according to the dirty bitmap 472# 473# @granularity: granularity of the dirty bitmap in bytes (since 1.4) 474# 475# @status: Deprecated in favor of @recording and @locked. (since 2.4) 476# 477# @recording: true if the bitmap is recording new writes from the guest. 478# Replaces `active` and `disabled` statuses. (since 4.0) 479# 480# @busy: true if the bitmap is in-use by some operation (NBD or jobs) 481# and cannot be modified via QMP or used by another operation. 482# Replaces `locked` and `frozen` statuses. (since 4.0) 483# 484# @persistent: true if the bitmap was stored on disk, is scheduled to be stored 485# on disk, or both. (since 4.0) 486# 487# @inconsistent: true if this is a persistent bitmap that was improperly 488# stored. Implies @persistent to be true; @recording and 489# @busy to be false. This bitmap cannot be used. To remove 490# it, use @block-dirty-bitmap-remove. (Since 4.0) 491# 492# Since: 1.3 493## 494{ 'struct': 'BlockDirtyInfo', 495 'data': {'*name': 'str', 'count': 'int', 'granularity': 'uint32', 496 'recording': 'bool', 'busy': 'bool', 'status': 'DirtyBitmapStatus', 497 'persistent': 'bool', '*inconsistent': 'bool' } } 498 499## 500# @Qcow2BitmapInfoFlags: 501# 502# An enumeration of flags that a bitmap can report to the user. 503# 504# @in-use: This flag is set by any process actively modifying the qcow2 file, 505# and cleared when the updated bitmap is flushed to the qcow2 image. 506# The presence of this flag in an offline image means that the bitmap 507# was not saved correctly after its last usage, and may contain 508# inconsistent data. 509# 510# @auto: The bitmap must reflect all changes of the virtual disk by any 511# application that would write to this qcow2 file. 512# 513# Since: 4.0 514## 515{ 'enum': 'Qcow2BitmapInfoFlags', 516 'data': ['in-use', 'auto'] } 517 518## 519# @Qcow2BitmapInfo: 520# 521# Qcow2 bitmap information. 522# 523# @name: the name of the bitmap 524# 525# @granularity: granularity of the bitmap in bytes 526# 527# @flags: flags of the bitmap 528# 529# Since: 4.0 530## 531{ 'struct': 'Qcow2BitmapInfo', 532 'data': {'name': 'str', 'granularity': 'uint32', 533 'flags': ['Qcow2BitmapInfoFlags'] } } 534 535## 536# @BlockLatencyHistogramInfo: 537# 538# Block latency histogram. 539# 540# @boundaries: list of interval boundary values in nanoseconds, all greater 541# than zero and in ascending order. 542# For example, the list [10, 50, 100] produces the following 543# histogram intervals: [0, 10), [10, 50), [50, 100), [100, +inf). 544# 545# @bins: list of io request counts corresponding to histogram intervals. 546# len(@bins) = len(@boundaries) + 1 547# For the example above, @bins may be something like [3, 1, 5, 2], 548# and corresponding histogram looks like: 549# 550# 5| * 551# 4| * 552# 3| * * 553# 2| * * * 554# 1| * * * * 555# +------------------ 556# 10 50 100 557# 558# Since: 4.0 559## 560{ 'struct': 'BlockLatencyHistogramInfo', 561 'data': {'boundaries': ['uint64'], 'bins': ['uint64'] } } 562 563## 564# @block-latency-histogram-set: 565# 566# Manage read, write and flush latency histograms for the device. 567# 568# If only @device parameter is specified, remove all present latency histograms 569# for the device. Otherwise, add/reset some of (or all) latency histograms. 570# 571# @id: The name or QOM path of the guest device. 572# 573# @boundaries: list of interval boundary values (see description in 574# BlockLatencyHistogramInfo definition). If specified, all 575# latency histograms are removed, and empty ones created for all 576# io types with intervals corresponding to @boundaries (except for 577# io types, for which specific boundaries are set through the 578# following parameters). 579# 580# @boundaries-read: list of interval boundary values for read latency 581# histogram. If specified, old read latency histogram is 582# removed, and empty one created with intervals 583# corresponding to @boundaries-read. The parameter has higher 584# priority then @boundaries. 585# 586# @boundaries-write: list of interval boundary values for write latency 587# histogram. 588# 589# @boundaries-flush: list of interval boundary values for flush latency 590# histogram. 591# 592# Returns: error if device is not found or any boundary arrays are invalid. 593# 594# Since: 4.0 595# 596# Example: set new histograms for all io types with intervals 597# [0, 10), [10, 50), [50, 100), [100, +inf): 598# 599# -> { "execute": "block-latency-histogram-set", 600# "arguments": { "device": "drive0", 601# "boundaries": [10, 50, 100] } } 602# <- { "return": {} } 603# 604# Example: set new histogram only for write, other histograms will remain 605# not changed (or not created): 606# 607# -> { "execute": "block-latency-histogram-set", 608# "arguments": { "device": "drive0", 609# "boundaries-write": [10, 50, 100] } } 610# <- { "return": {} } 611# 612# Example: set new histograms with the following intervals: 613# read, flush: [0, 10), [10, 50), [50, 100), [100, +inf) 614# write: [0, 1000), [1000, 5000), [5000, +inf) 615# 616# -> { "execute": "block-latency-histogram-set", 617# "arguments": { "device": "drive0", 618# "boundaries": [10, 50, 100], 619# "boundaries-write": [1000, 5000] } } 620# <- { "return": {} } 621# 622# Example: remove all latency histograms: 623# 624# -> { "execute": "block-latency-histogram-set", 625# "arguments": { "device": "drive0" } } 626# <- { "return": {} } 627## 628{ 'command': 'block-latency-histogram-set', 629 'data': {'id': 'str', 630 '*boundaries': ['uint64'], 631 '*boundaries-read': ['uint64'], 632 '*boundaries-write': ['uint64'], 633 '*boundaries-flush': ['uint64'] } } 634 635## 636# @BlockInfo: 637# 638# Block device information. This structure describes a virtual device and 639# the backing device associated with it. 640# 641# @device: The device name associated with the virtual device. 642# 643# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the block 644# device. (since 2.10) 645# 646# @type: This field is returned only for compatibility reasons, it should 647# not be used (always returns 'unknown') 648# 649# @removable: True if the device supports removable media. 650# 651# @locked: True if the guest has locked this device from having its media 652# removed 653# 654# @tray_open: True if the device's tray is open 655# (only present if it has a tray) 656# 657# @dirty-bitmaps: dirty bitmaps information (only present if the 658# driver has one or more dirty bitmaps) (Since 2.0) 659# 660# @io-status: @BlockDeviceIoStatus. Only present if the device 661# supports it and the VM is configured to stop on errors 662# (supported device models: virtio-blk, IDE, SCSI except 663# scsi-generic) 664# 665# @inserted: @BlockDeviceInfo describing the device if media is 666# present 667# 668# Since: 0.14.0 669## 670{ 'struct': 'BlockInfo', 671 'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool', 672 'locked': 'bool', '*inserted': 'BlockDeviceInfo', 673 '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus', 674 '*dirty-bitmaps': ['BlockDirtyInfo'] } } 675 676## 677# @BlockMeasureInfo: 678# 679# Image file size calculation information. This structure describes the size 680# requirements for creating a new image file. 681# 682# The size requirements depend on the new image file format. File size always 683# equals virtual disk size for the 'raw' format, even for sparse POSIX files. 684# Compact formats such as 'qcow2' represent unallocated and zero regions 685# efficiently so file size may be smaller than virtual disk size. 686# 687# The values are upper bounds that are guaranteed to fit the new image file. 688# Subsequent modification, such as internal snapshot or bitmap creation, may 689# require additional space and is not covered here. 690# 691# @required: Size required for a new image file, in bytes. 692# 693# @fully-allocated: Image file size, in bytes, once data has been written 694# to all sectors. 695# 696# Since: 2.10 697## 698{ 'struct': 'BlockMeasureInfo', 699 'data': {'required': 'int', 'fully-allocated': 'int'} } 700 701## 702# @query-block: 703# 704# Get a list of BlockInfo for all virtual block devices. 705# 706# Returns: a list of @BlockInfo describing each virtual block device. Filter 707# nodes that were created implicitly are skipped over. 708# 709# Since: 0.14.0 710# 711# Example: 712# 713# -> { "execute": "query-block" } 714# <- { 715# "return":[ 716# { 717# "io-status": "ok", 718# "device":"ide0-hd0", 719# "locked":false, 720# "removable":false, 721# "inserted":{ 722# "ro":false, 723# "drv":"qcow2", 724# "encrypted":false, 725# "file":"disks/test.qcow2", 726# "backing_file_depth":1, 727# "bps":1000000, 728# "bps_rd":0, 729# "bps_wr":0, 730# "iops":1000000, 731# "iops_rd":0, 732# "iops_wr":0, 733# "bps_max": 8000000, 734# "bps_rd_max": 0, 735# "bps_wr_max": 0, 736# "iops_max": 0, 737# "iops_rd_max": 0, 738# "iops_wr_max": 0, 739# "iops_size": 0, 740# "detect_zeroes": "on", 741# "write_threshold": 0, 742# "image":{ 743# "filename":"disks/test.qcow2", 744# "format":"qcow2", 745# "virtual-size":2048000, 746# "backing_file":"base.qcow2", 747# "full-backing-filename":"disks/base.qcow2", 748# "backing-filename-format":"qcow2", 749# "snapshots":[ 750# { 751# "id": "1", 752# "name": "snapshot1", 753# "vm-state-size": 0, 754# "date-sec": 10000200, 755# "date-nsec": 12, 756# "vm-clock-sec": 206, 757# "vm-clock-nsec": 30 758# } 759# ], 760# "backing-image":{ 761# "filename":"disks/base.qcow2", 762# "format":"qcow2", 763# "virtual-size":2048000 764# } 765# } 766# }, 767# "qdev": "ide_disk", 768# "type":"unknown" 769# }, 770# { 771# "io-status": "ok", 772# "device":"ide1-cd0", 773# "locked":false, 774# "removable":true, 775# "qdev": "/machine/unattached/device[23]", 776# "tray_open": false, 777# "type":"unknown" 778# }, 779# { 780# "device":"floppy0", 781# "locked":false, 782# "removable":true, 783# "qdev": "/machine/unattached/device[20]", 784# "type":"unknown" 785# }, 786# { 787# "device":"sd0", 788# "locked":false, 789# "removable":true, 790# "type":"unknown" 791# } 792# ] 793# } 794# 795## 796{ 'command': 'query-block', 'returns': ['BlockInfo'] } 797 798 799## 800# @BlockDeviceTimedStats: 801# 802# Statistics of a block device during a given interval of time. 803# 804# @interval_length: Interval used for calculating the statistics, 805# in seconds. 806# 807# @min_rd_latency_ns: Minimum latency of read operations in the 808# defined interval, in nanoseconds. 809# 810# @min_wr_latency_ns: Minimum latency of write operations in the 811# defined interval, in nanoseconds. 812# 813# @min_flush_latency_ns: Minimum latency of flush operations in the 814# defined interval, in nanoseconds. 815# 816# @max_rd_latency_ns: Maximum latency of read operations in the 817# defined interval, in nanoseconds. 818# 819# @max_wr_latency_ns: Maximum latency of write operations in the 820# defined interval, in nanoseconds. 821# 822# @max_flush_latency_ns: Maximum latency of flush operations in the 823# defined interval, in nanoseconds. 824# 825# @avg_rd_latency_ns: Average latency of read operations in the 826# defined interval, in nanoseconds. 827# 828# @avg_wr_latency_ns: Average latency of write operations in the 829# defined interval, in nanoseconds. 830# 831# @avg_flush_latency_ns: Average latency of flush operations in the 832# defined interval, in nanoseconds. 833# 834# @avg_rd_queue_depth: Average number of pending read operations 835# in the defined interval. 836# 837# @avg_wr_queue_depth: Average number of pending write operations 838# in the defined interval. 839# 840# Since: 2.5 841## 842{ 'struct': 'BlockDeviceTimedStats', 843 'data': { 'interval_length': 'int', 'min_rd_latency_ns': 'int', 844 'max_rd_latency_ns': 'int', 'avg_rd_latency_ns': 'int', 845 'min_wr_latency_ns': 'int', 'max_wr_latency_ns': 'int', 846 'avg_wr_latency_ns': 'int', 'min_flush_latency_ns': 'int', 847 'max_flush_latency_ns': 'int', 'avg_flush_latency_ns': 'int', 848 'avg_rd_queue_depth': 'number', 'avg_wr_queue_depth': 'number' } } 849 850## 851# @BlockDeviceStats: 852# 853# Statistics of a virtual block device or a block backing device. 854# 855# @rd_bytes: The number of bytes read by the device. 856# 857# @wr_bytes: The number of bytes written by the device. 858# 859# @rd_operations: The number of read operations performed by the device. 860# 861# @wr_operations: The number of write operations performed by the device. 862# 863# @flush_operations: The number of cache flush operations performed by the 864# device (since 0.15.0) 865# 866# @flush_total_time_ns: Total time spend on cache flushes in nano-seconds 867# (since 0.15.0). 868# 869# @wr_total_time_ns: Total time spend on writes in nano-seconds (since 0.15.0). 870# 871# @rd_total_time_ns: Total_time_spend on reads in nano-seconds (since 0.15.0). 872# 873# @wr_highest_offset: The offset after the greatest byte written to the 874# device. The intended use of this information is for 875# growable sparse files (like qcow2) that are used on top 876# of a physical device. 877# 878# @rd_merged: Number of read requests that have been merged into another 879# request (Since 2.3). 880# 881# @wr_merged: Number of write requests that have been merged into another 882# request (Since 2.3). 883# 884# @idle_time_ns: Time since the last I/O operation, in 885# nanoseconds. If the field is absent it means that 886# there haven't been any operations yet (Since 2.5). 887# 888# @failed_rd_operations: The number of failed read operations 889# performed by the device (Since 2.5) 890# 891# @failed_wr_operations: The number of failed write operations 892# performed by the device (Since 2.5) 893# 894# @failed_flush_operations: The number of failed flush operations 895# performed by the device (Since 2.5) 896# 897# @invalid_rd_operations: The number of invalid read operations 898# performed by the device (Since 2.5) 899# 900# @invalid_wr_operations: The number of invalid write operations 901# performed by the device (Since 2.5) 902# 903# @invalid_flush_operations: The number of invalid flush operations 904# performed by the device (Since 2.5) 905# 906# @account_invalid: Whether invalid operations are included in the 907# last access statistics (Since 2.5) 908# 909# @account_failed: Whether failed operations are included in the 910# latency and last access statistics (Since 2.5) 911# 912# @timed_stats: Statistics specific to the set of previously defined 913# intervals of time (Since 2.5) 914# 915# @rd_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0) 916# 917# @wr_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0) 918# 919# @flush_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0) 920# 921# Since: 0.14.0 922## 923{ 'struct': 'BlockDeviceStats', 924 'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'rd_operations': 'int', 925 'wr_operations': 'int', 'flush_operations': 'int', 926 'flush_total_time_ns': 'int', 'wr_total_time_ns': 'int', 927 'rd_total_time_ns': 'int', 'wr_highest_offset': 'int', 928 'rd_merged': 'int', 'wr_merged': 'int', '*idle_time_ns': 'int', 929 'failed_rd_operations': 'int', 'failed_wr_operations': 'int', 930 'failed_flush_operations': 'int', 'invalid_rd_operations': 'int', 931 'invalid_wr_operations': 'int', 'invalid_flush_operations': 'int', 932 'account_invalid': 'bool', 'account_failed': 'bool', 933 'timed_stats': ['BlockDeviceTimedStats'], 934 '*rd_latency_histogram': 'BlockLatencyHistogramInfo', 935 '*wr_latency_histogram': 'BlockLatencyHistogramInfo', 936 '*flush_latency_histogram': 'BlockLatencyHistogramInfo' } } 937 938## 939# @BlockStats: 940# 941# Statistics of a virtual block device or a block backing device. 942# 943# @device: If the stats are for a virtual block device, the name 944# corresponding to the virtual block device. 945# 946# @node-name: The node name of the device. (Since 2.3) 947# 948# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the block 949# device. (since 3.0) 950# 951# @stats: A @BlockDeviceStats for the device. 952# 953# @parent: This describes the file block device if it has one. 954# Contains recursively the statistics of the underlying 955# protocol (e.g. the host file for a qcow2 image). If there is 956# no underlying protocol, this field is omitted 957# 958# @backing: This describes the backing block device if it has one. 959# (Since 2.0) 960# 961# Since: 0.14.0 962## 963{ 'struct': 'BlockStats', 964 'data': {'*device': 'str', '*qdev': 'str', '*node-name': 'str', 965 'stats': 'BlockDeviceStats', 966 '*parent': 'BlockStats', 967 '*backing': 'BlockStats'} } 968 969## 970# @query-blockstats: 971# 972# Query the @BlockStats for all virtual block devices. 973# 974# @query-nodes: If true, the command will query all the block nodes 975# that have a node name, in a list which will include "parent" 976# information, but not "backing". 977# If false or omitted, the behavior is as before - query all the 978# device backends, recursively including their "parent" and 979# "backing". Filter nodes that were created implicitly are 980# skipped over in this mode. (Since 2.3) 981# 982# Returns: A list of @BlockStats for each virtual block devices. 983# 984# Since: 0.14.0 985# 986# Example: 987# 988# -> { "execute": "query-blockstats" } 989# <- { 990# "return":[ 991# { 992# "device":"ide0-hd0", 993# "parent":{ 994# "stats":{ 995# "wr_highest_offset":3686448128, 996# "wr_bytes":9786368, 997# "wr_operations":751, 998# "rd_bytes":122567168, 999# "rd_operations":36772 1000# "wr_total_times_ns":313253456 1001# "rd_total_times_ns":3465673657 1002# "flush_total_times_ns":49653 1003# "flush_operations":61, 1004# "rd_merged":0, 1005# "wr_merged":0, 1006# "idle_time_ns":2953431879, 1007# "account_invalid":true, 1008# "account_failed":false 1009# } 1010# }, 1011# "stats":{ 1012# "wr_highest_offset":2821110784, 1013# "wr_bytes":9786368, 1014# "wr_operations":692, 1015# "rd_bytes":122739200, 1016# "rd_operations":36604 1017# "flush_operations":51, 1018# "wr_total_times_ns":313253456 1019# "rd_total_times_ns":3465673657 1020# "flush_total_times_ns":49653, 1021# "rd_merged":0, 1022# "wr_merged":0, 1023# "idle_time_ns":2953431879, 1024# "account_invalid":true, 1025# "account_failed":false 1026# }, 1027# "qdev": "/machine/unattached/device[23]" 1028# }, 1029# { 1030# "device":"ide1-cd0", 1031# "stats":{ 1032# "wr_highest_offset":0, 1033# "wr_bytes":0, 1034# "wr_operations":0, 1035# "rd_bytes":0, 1036# "rd_operations":0 1037# "flush_operations":0, 1038# "wr_total_times_ns":0 1039# "rd_total_times_ns":0 1040# "flush_total_times_ns":0, 1041# "rd_merged":0, 1042# "wr_merged":0, 1043# "account_invalid":false, 1044# "account_failed":false 1045# }, 1046# "qdev": "/machine/unattached/device[24]" 1047# }, 1048# { 1049# "device":"floppy0", 1050# "stats":{ 1051# "wr_highest_offset":0, 1052# "wr_bytes":0, 1053# "wr_operations":0, 1054# "rd_bytes":0, 1055# "rd_operations":0 1056# "flush_operations":0, 1057# "wr_total_times_ns":0 1058# "rd_total_times_ns":0 1059# "flush_total_times_ns":0, 1060# "rd_merged":0, 1061# "wr_merged":0, 1062# "account_invalid":false, 1063# "account_failed":false 1064# }, 1065# "qdev": "/machine/unattached/device[16]" 1066# }, 1067# { 1068# "device":"sd0", 1069# "stats":{ 1070# "wr_highest_offset":0, 1071# "wr_bytes":0, 1072# "wr_operations":0, 1073# "rd_bytes":0, 1074# "rd_operations":0 1075# "flush_operations":0, 1076# "wr_total_times_ns":0 1077# "rd_total_times_ns":0 1078# "flush_total_times_ns":0, 1079# "rd_merged":0, 1080# "wr_merged":0, 1081# "account_invalid":false, 1082# "account_failed":false 1083# } 1084# } 1085# ] 1086# } 1087# 1088## 1089{ 'command': 'query-blockstats', 1090 'data': { '*query-nodes': 'bool' }, 1091 'returns': ['BlockStats'] } 1092 1093## 1094# @BlockdevOnError: 1095# 1096# An enumeration of possible behaviors for errors on I/O operations. 1097# The exact meaning depends on whether the I/O was initiated by a guest 1098# or by a block job 1099# 1100# @report: for guest operations, report the error to the guest; 1101# for jobs, cancel the job 1102# 1103# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR 1104# or BLOCK_JOB_ERROR) 1105# 1106# @enospc: same as @stop on ENOSPC, same as @report otherwise. 1107# 1108# @stop: for guest operations, stop the virtual machine; 1109# for jobs, pause the job 1110# 1111# @auto: inherit the error handling policy of the backend (since: 2.7) 1112# 1113# Since: 1.3 1114## 1115{ 'enum': 'BlockdevOnError', 1116 'data': ['report', 'ignore', 'enospc', 'stop', 'auto'] } 1117 1118## 1119# @MirrorSyncMode: 1120# 1121# An enumeration of possible behaviors for the initial synchronization 1122# phase of storage mirroring. 1123# 1124# @top: copies data in the topmost image to the destination 1125# 1126# @full: copies data from all images to the destination 1127# 1128# @none: only copy data written from now on 1129# 1130# @incremental: only copy data described by the dirty bitmap. Since: 2.4 1131# 1132# Since: 1.3 1133## 1134{ 'enum': 'MirrorSyncMode', 1135 'data': ['top', 'full', 'none', 'incremental'] } 1136 1137## 1138# @MirrorCopyMode: 1139# 1140# An enumeration whose values tell the mirror block job when to 1141# trigger writes to the target. 1142# 1143# @background: copy data in background only. 1144# 1145# @write-blocking: when data is written to the source, write it 1146# (synchronously) to the target as well. In 1147# addition, data is copied in background just like in 1148# @background mode. 1149# 1150# Since: 3.0 1151## 1152{ 'enum': 'MirrorCopyMode', 1153 'data': ['background', 'write-blocking'] } 1154 1155## 1156# @BlockJobInfo: 1157# 1158# Information about a long-running block device operation. 1159# 1160# @type: the job type ('stream' for image streaming) 1161# 1162# @device: The job identifier. Originally the device name but other 1163# values are allowed since QEMU 2.7 1164# 1165# @len: Estimated @offset value at the completion of the job. This value can 1166# arbitrarily change while the job is running, in both directions. 1167# 1168# @offset: Progress made until now. The unit is arbitrary and the value can 1169# only meaningfully be used for the ratio of @offset to @len. The 1170# value is monotonically increasing. 1171# 1172# @busy: false if the job is known to be in a quiescent state, with 1173# no pending I/O. Since 1.3. 1174# 1175# @paused: whether the job is paused or, if @busy is true, will 1176# pause itself as soon as possible. Since 1.3. 1177# 1178# @speed: the rate limit, bytes per second 1179# 1180# @io-status: the status of the job (since 1.3) 1181# 1182# @ready: true if the job may be completed (since 2.2) 1183# 1184# @status: Current job state/status (since 2.12) 1185# 1186# @auto-finalize: Job will finalize itself when PENDING, moving to 1187# the CONCLUDED state. (since 2.12) 1188# 1189# @auto-dismiss: Job will dismiss itself when CONCLUDED, moving to the NULL 1190# state and disappearing from the query list. (since 2.12) 1191# 1192# @error: Error information if the job did not complete successfully. 1193# Not set if the job completed successfully. (since 2.12.1) 1194# 1195# Since: 1.1 1196## 1197{ 'struct': 'BlockJobInfo', 1198 'data': {'type': 'str', 'device': 'str', 'len': 'int', 1199 'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int', 1200 'io-status': 'BlockDeviceIoStatus', 'ready': 'bool', 1201 'status': 'JobStatus', 1202 'auto-finalize': 'bool', 'auto-dismiss': 'bool', 1203 '*error': 'str' } } 1204 1205## 1206# @query-block-jobs: 1207# 1208# Return information about long-running block device operations. 1209# 1210# Returns: a list of @BlockJobInfo for each active block job 1211# 1212# Since: 1.1 1213## 1214{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'] } 1215 1216## 1217# @block_passwd: 1218# 1219# This command sets the password of a block device that has not been open 1220# with a password and requires one. 1221# 1222# This command is now obsolete and will always return an error since 2.10 1223# 1224## 1225{ 'command': 'block_passwd', 1226 'data': { '*device': 'str', 1227 '*node-name': 'str', 1228 'password': 'str' } } 1229 1230## 1231# @block_resize: 1232# 1233# Resize a block image while a guest is running. 1234# 1235# Either @device or @node-name must be set but not both. 1236# 1237# @device: the name of the device to get the image resized 1238# 1239# @node-name: graph node name to get the image resized (Since 2.0) 1240# 1241# @size: new image size in bytes 1242# 1243# Returns: nothing on success 1244# If @device is not a valid block device, DeviceNotFound 1245# 1246# Since: 0.14.0 1247# 1248# Example: 1249# 1250# -> { "execute": "block_resize", 1251# "arguments": { "device": "scratch", "size": 1073741824 } } 1252# <- { "return": {} } 1253# 1254## 1255{ 'command': 'block_resize', 1256 'data': { '*device': 'str', 1257 '*node-name': 'str', 1258 'size': 'int' } } 1259 1260## 1261# @NewImageMode: 1262# 1263# An enumeration that tells QEMU how to set the backing file path in 1264# a new image file. 1265# 1266# @existing: QEMU should look for an existing image file. 1267# 1268# @absolute-paths: QEMU should create a new image with absolute paths 1269# for the backing file. If there is no backing file available, the new 1270# image will not be backed either. 1271# 1272# Since: 1.1 1273## 1274{ 'enum': 'NewImageMode', 1275 'data': [ 'existing', 'absolute-paths' ] } 1276 1277## 1278# @BlockdevSnapshotSync: 1279# 1280# Either @device or @node-name must be set but not both. 1281# 1282# @device: the name of the device to generate the snapshot from. 1283# 1284# @node-name: graph node name to generate the snapshot from (Since 2.0) 1285# 1286# @snapshot-file: the target of the new image. If the file exists, or 1287# if it is a device, the snapshot will be created in the existing 1288# file/device. Otherwise, a new file will be created. 1289# 1290# @snapshot-node-name: the graph node name of the new image (Since 2.0) 1291# 1292# @format: the format of the snapshot image, default is 'qcow2'. 1293# 1294# @mode: whether and how QEMU should create a new image, default is 1295# 'absolute-paths'. 1296## 1297{ 'struct': 'BlockdevSnapshotSync', 1298 'data': { '*device': 'str', '*node-name': 'str', 1299 'snapshot-file': 'str', '*snapshot-node-name': 'str', 1300 '*format': 'str', '*mode': 'NewImageMode' } } 1301 1302## 1303# @BlockdevSnapshot: 1304# 1305# @node: device or node name that will have a snapshot created. 1306# 1307# @overlay: reference to the existing block device that will become 1308# the overlay of @node, as part of creating the snapshot. 1309# It must not have a current backing file (this can be 1310# achieved by passing "backing": null to blockdev-add). 1311# 1312# Since: 2.5 1313## 1314{ 'struct': 'BlockdevSnapshot', 1315 'data': { 'node': 'str', 'overlay': 'str' } } 1316 1317## 1318# @DriveBackup: 1319# 1320# @job-id: identifier for the newly-created block job. If 1321# omitted, the device name will be used. (Since 2.7) 1322# 1323# @device: the device name or node-name of a root node which should be copied. 1324# 1325# @target: the target of the new image. If the file exists, or if it 1326# is a device, the existing file/device will be used as the new 1327# destination. If it does not exist, a new file will be created. 1328# 1329# @format: the format of the new destination, default is to 1330# probe if @mode is 'existing', else the format of the source 1331# 1332# @sync: what parts of the disk image should be copied to the destination 1333# (all the disk, only the sectors allocated in the topmost image, from a 1334# dirty bitmap, or only new I/O). 1335# 1336# @mode: whether and how QEMU should create a new image, default is 1337# 'absolute-paths'. 1338# 1339# @speed: the maximum speed, in bytes per second 1340# 1341# @bitmap: the name of dirty bitmap if sync is "incremental". 1342# Must be present if sync is "incremental", must NOT be present 1343# otherwise. (Since 2.4) 1344# 1345# @compress: true to compress data, if the target format supports it. 1346# (default: false) (since 2.8) 1347# 1348# @on-source-error: the action to take on an error on the source, 1349# default 'report'. 'stop' and 'enospc' can only be used 1350# if the block device supports io-status (see BlockInfo). 1351# 1352# @on-target-error: the action to take on an error on the target, 1353# default 'report' (no limitations, since this applies to 1354# a different block device than @device). 1355# 1356# @auto-finalize: When false, this job will wait in a PENDING state after it has 1357# finished its work, waiting for @block-job-finalize before 1358# making any block graph changes. 1359# When true, this job will automatically 1360# perform its abort or commit actions. 1361# Defaults to true. (Since 2.12) 1362# 1363# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it 1364# has completely ceased all work, and awaits @block-job-dismiss. 1365# When true, this job will automatically disappear from the query 1366# list without user intervention. 1367# Defaults to true. (Since 2.12) 1368# 1369# Note: @on-source-error and @on-target-error only affect background 1370# I/O. If an error occurs during a guest write request, the device's 1371# rerror/werror actions will be used. 1372# 1373# Since: 1.6 1374## 1375{ 'struct': 'DriveBackup', 1376 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', 1377 '*format': 'str', 'sync': 'MirrorSyncMode', 1378 '*mode': 'NewImageMode', '*speed': 'int', 1379 '*bitmap': 'str', '*compress': 'bool', 1380 '*on-source-error': 'BlockdevOnError', 1381 '*on-target-error': 'BlockdevOnError', 1382 '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 1383 1384## 1385# @BlockdevBackup: 1386# 1387# @job-id: identifier for the newly-created block job. If 1388# omitted, the device name will be used. (Since 2.7) 1389# 1390# @device: the device name or node-name of a root node which should be copied. 1391# 1392# @target: the device name or node-name of the backup target node. 1393# 1394# @sync: what parts of the disk image should be copied to the destination 1395# (all the disk, only the sectors allocated in the topmost image, or 1396# only new I/O). 1397# 1398# @speed: the maximum speed, in bytes per second. The default is 0, 1399# for unlimited. 1400# 1401# @bitmap: the name of dirty bitmap if sync is "incremental". 1402# Must be present if sync is "incremental", must NOT be present 1403# otherwise. (Since 3.1) 1404# 1405# @compress: true to compress data, if the target format supports it. 1406# (default: false) (since 2.8) 1407# 1408# @on-source-error: the action to take on an error on the source, 1409# default 'report'. 'stop' and 'enospc' can only be used 1410# if the block device supports io-status (see BlockInfo). 1411# 1412# @on-target-error: the action to take on an error on the target, 1413# default 'report' (no limitations, since this applies to 1414# a different block device than @device). 1415# 1416# @auto-finalize: When false, this job will wait in a PENDING state after it has 1417# finished its work, waiting for @block-job-finalize before 1418# making any block graph changes. 1419# When true, this job will automatically 1420# perform its abort or commit actions. 1421# Defaults to true. (Since 2.12) 1422# 1423# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it 1424# has completely ceased all work, and awaits @block-job-dismiss. 1425# When true, this job will automatically disappear from the query 1426# list without user intervention. 1427# Defaults to true. (Since 2.12) 1428# 1429# Note: @on-source-error and @on-target-error only affect background 1430# I/O. If an error occurs during a guest write request, the device's 1431# rerror/werror actions will be used. 1432# 1433# Since: 2.3 1434## 1435{ 'struct': 'BlockdevBackup', 1436 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', 1437 'sync': 'MirrorSyncMode', '*speed': 'int', 1438 '*bitmap': 'str', '*compress': 'bool', 1439 '*on-source-error': 'BlockdevOnError', 1440 '*on-target-error': 'BlockdevOnError', 1441 '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 1442 1443## 1444# @blockdev-snapshot-sync: 1445# 1446# Generates a synchronous snapshot of a block device. 1447# 1448# For the arguments, see the documentation of BlockdevSnapshotSync. 1449# 1450# Returns: nothing on success 1451# If @device is not a valid block device, DeviceNotFound 1452# 1453# Since: 0.14.0 1454# 1455# Example: 1456# 1457# -> { "execute": "blockdev-snapshot-sync", 1458# "arguments": { "device": "ide-hd0", 1459# "snapshot-file": 1460# "/some/place/my-image", 1461# "format": "qcow2" } } 1462# <- { "return": {} } 1463# 1464## 1465{ 'command': 'blockdev-snapshot-sync', 1466 'data': 'BlockdevSnapshotSync' } 1467 1468 1469## 1470# @blockdev-snapshot: 1471# 1472# Generates a snapshot of a block device. 1473# 1474# Create a snapshot, by installing 'node' as the backing image of 1475# 'overlay'. Additionally, if 'node' is associated with a block 1476# device, the block device changes to using 'overlay' as its new active 1477# image. 1478# 1479# For the arguments, see the documentation of BlockdevSnapshot. 1480# 1481# Since: 2.5 1482# 1483# Example: 1484# 1485# -> { "execute": "blockdev-add", 1486# "arguments": { "driver": "qcow2", 1487# "node-name": "node1534", 1488# "file": { "driver": "file", 1489# "filename": "hd1.qcow2" }, 1490# "backing": null } } 1491# 1492# <- { "return": {} } 1493# 1494# -> { "execute": "blockdev-snapshot", 1495# "arguments": { "node": "ide-hd0", 1496# "overlay": "node1534" } } 1497# <- { "return": {} } 1498# 1499## 1500{ 'command': 'blockdev-snapshot', 1501 'data': 'BlockdevSnapshot' } 1502 1503## 1504# @change-backing-file: 1505# 1506# Change the backing file in the image file metadata. This does not 1507# cause QEMU to reopen the image file to reparse the backing filename 1508# (it may, however, perform a reopen to change permissions from 1509# r/o -> r/w -> r/o, if needed). The new backing file string is written 1510# into the image file metadata, and the QEMU internal strings are 1511# updated. 1512# 1513# @image-node-name: The name of the block driver state node of the 1514# image to modify. The "device" argument is used 1515# to verify "image-node-name" is in the chain 1516# described by "device". 1517# 1518# @device: The device name or node-name of the root node that owns 1519# image-node-name. 1520# 1521# @backing-file: The string to write as the backing file. This 1522# string is not validated, so care should be taken 1523# when specifying the string or the image chain may 1524# not be able to be reopened again. 1525# 1526# Returns: Nothing on success 1527# 1528# If "device" does not exist or cannot be determined, DeviceNotFound 1529# 1530# Since: 2.1 1531## 1532{ 'command': 'change-backing-file', 1533 'data': { 'device': 'str', 'image-node-name': 'str', 1534 'backing-file': 'str' } } 1535 1536## 1537# @block-commit: 1538# 1539# Live commit of data from overlay image nodes into backing nodes - i.e., 1540# writes data between 'top' and 'base' into 'base'. 1541# 1542# @job-id: identifier for the newly-created block job. If 1543# omitted, the device name will be used. (Since 2.7) 1544# 1545# @device: the device name or node-name of a root node 1546# 1547# @base-node: The node name of the backing image to write data into. 1548# If not specified, this is the deepest backing image. 1549# (since: 3.1) 1550# 1551# @base: Same as @base-node, except that it is a file name rather than a node 1552# name. This must be the exact filename string that was used to open the 1553# node; other strings, even if addressing the same file, are not 1554# accepted (deprecated, use @base-node instead) 1555# 1556# @top-node: The node name of the backing image within the image chain 1557# which contains the topmost data to be committed down. If 1558# not specified, this is the active layer. (since: 3.1) 1559# 1560# @top: Same as @top-node, except that it is a file name rather than a node 1561# name. This must be the exact filename string that was used to open the 1562# node; other strings, even if addressing the same file, are not 1563# accepted (deprecated, use @base-node instead) 1564# 1565# @backing-file: The backing file string to write into the overlay 1566# image of 'top'. If 'top' is the active layer, 1567# specifying a backing file string is an error. This 1568# filename is not validated. 1569# 1570# If a pathname string is such that it cannot be 1571# resolved by QEMU, that means that subsequent QMP or 1572# HMP commands must use node-names for the image in 1573# question, as filename lookup methods will fail. 1574# 1575# If not specified, QEMU will automatically determine 1576# the backing file string to use, or error out if 1577# there is no obvious choice. Care should be taken 1578# when specifying the string, to specify a valid 1579# filename or protocol. 1580# (Since 2.1) 1581# 1582# If top == base, that is an error. 1583# If top == active, the job will not be completed by itself, 1584# user needs to complete the job with the block-job-complete 1585# command after getting the ready event. (Since 2.0) 1586# 1587# If the base image is smaller than top, then the base image 1588# will be resized to be the same size as top. If top is 1589# smaller than the base image, the base will not be 1590# truncated. If you want the base image size to match the 1591# size of the smaller top, you can safely truncate it 1592# yourself once the commit operation successfully completes. 1593# 1594# @speed: the maximum speed, in bytes per second 1595# 1596# @filter-node-name: the node name that should be assigned to the 1597# filter driver that the commit job inserts into the graph 1598# above @top. If this option is not given, a node name is 1599# autogenerated. (Since: 2.9) 1600# 1601# @auto-finalize: When false, this job will wait in a PENDING state after it has 1602# finished its work, waiting for @block-job-finalize before 1603# making any block graph changes. 1604# When true, this job will automatically 1605# perform its abort or commit actions. 1606# Defaults to true. (Since 3.1) 1607# 1608# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it 1609# has completely ceased all work, and awaits @block-job-dismiss. 1610# When true, this job will automatically disappear from the query 1611# list without user intervention. 1612# Defaults to true. (Since 3.1) 1613# 1614# Returns: Nothing on success 1615# If @device does not exist, DeviceNotFound 1616# Any other error returns a GenericError. 1617# 1618# Since: 1.3 1619# 1620# Example: 1621# 1622# -> { "execute": "block-commit", 1623# "arguments": { "device": "virtio0", 1624# "top": "/tmp/snap1.qcow2" } } 1625# <- { "return": {} } 1626# 1627## 1628{ 'command': 'block-commit', 1629 'data': { '*job-id': 'str', 'device': 'str', '*base-node': 'str', 1630 '*base': 'str', '*top-node': 'str', '*top': 'str', 1631 '*backing-file': 'str', '*speed': 'int', 1632 '*filter-node-name': 'str', 1633 '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 1634 1635## 1636# @drive-backup: 1637# 1638# Start a point-in-time copy of a block device to a new destination. The 1639# status of ongoing drive-backup operations can be checked with 1640# query-block-jobs where the BlockJobInfo.type field has the value 'backup'. 1641# The operation can be stopped before it has completed using the 1642# block-job-cancel command. 1643# 1644# Returns: nothing on success 1645# If @device is not a valid block device, GenericError 1646# 1647# Since: 1.6 1648# 1649# Example: 1650# 1651# -> { "execute": "drive-backup", 1652# "arguments": { "device": "drive0", 1653# "sync": "full", 1654# "target": "backup.img" } } 1655# <- { "return": {} } 1656# 1657## 1658{ 'command': 'drive-backup', 'boxed': true, 1659 'data': 'DriveBackup' } 1660 1661## 1662# @blockdev-backup: 1663# 1664# Start a point-in-time copy of a block device to a new destination. The 1665# status of ongoing blockdev-backup operations can be checked with 1666# query-block-jobs where the BlockJobInfo.type field has the value 'backup'. 1667# The operation can be stopped before it has completed using the 1668# block-job-cancel command. 1669# 1670# Returns: nothing on success 1671# If @device is not a valid block device, DeviceNotFound 1672# 1673# Since: 2.3 1674# 1675# Example: 1676# -> { "execute": "blockdev-backup", 1677# "arguments": { "device": "src-id", 1678# "sync": "full", 1679# "target": "tgt-id" } } 1680# <- { "return": {} } 1681# 1682## 1683{ 'command': 'blockdev-backup', 'boxed': true, 1684 'data': 'BlockdevBackup' } 1685 1686 1687## 1688# @query-named-block-nodes: 1689# 1690# Get the named block driver list 1691# 1692# Returns: the list of BlockDeviceInfo 1693# 1694# Since: 2.0 1695# 1696# Example: 1697# 1698# -> { "execute": "query-named-block-nodes" } 1699# <- { "return": [ { "ro":false, 1700# "drv":"qcow2", 1701# "encrypted":false, 1702# "file":"disks/test.qcow2", 1703# "node-name": "my-node", 1704# "backing_file_depth":1, 1705# "bps":1000000, 1706# "bps_rd":0, 1707# "bps_wr":0, 1708# "iops":1000000, 1709# "iops_rd":0, 1710# "iops_wr":0, 1711# "bps_max": 8000000, 1712# "bps_rd_max": 0, 1713# "bps_wr_max": 0, 1714# "iops_max": 0, 1715# "iops_rd_max": 0, 1716# "iops_wr_max": 0, 1717# "iops_size": 0, 1718# "write_threshold": 0, 1719# "image":{ 1720# "filename":"disks/test.qcow2", 1721# "format":"qcow2", 1722# "virtual-size":2048000, 1723# "backing_file":"base.qcow2", 1724# "full-backing-filename":"disks/base.qcow2", 1725# "backing-filename-format":"qcow2", 1726# "snapshots":[ 1727# { 1728# "id": "1", 1729# "name": "snapshot1", 1730# "vm-state-size": 0, 1731# "date-sec": 10000200, 1732# "date-nsec": 12, 1733# "vm-clock-sec": 206, 1734# "vm-clock-nsec": 30 1735# } 1736# ], 1737# "backing-image":{ 1738# "filename":"disks/base.qcow2", 1739# "format":"qcow2", 1740# "virtual-size":2048000 1741# } 1742# } } ] } 1743# 1744## 1745{ 'command': 'query-named-block-nodes', 'returns': [ 'BlockDeviceInfo' ] } 1746 1747## 1748# @XDbgBlockGraphNodeType: 1749# 1750# @block-backend: corresponds to BlockBackend 1751# 1752# @block-job: corresonds to BlockJob 1753# 1754# @block-driver: corresponds to BlockDriverState 1755# 1756# Since: 4.0 1757## 1758{ 'enum': 'XDbgBlockGraphNodeType', 1759 'data': [ 'block-backend', 'block-job', 'block-driver' ] } 1760 1761## 1762# @XDbgBlockGraphNode: 1763# 1764# @id: Block graph node identifier. This @id is generated only for 1765# x-debug-query-block-graph and does not relate to any other identifiers in 1766# Qemu. 1767# 1768# @type: Type of graph node. Can be one of block-backend, block-job or 1769# block-driver-state. 1770# 1771# @name: Human readable name of the node. Corresponds to node-name for 1772# block-driver-state nodes; is not guaranteed to be unique in the whole 1773# graph (with block-jobs and block-backends). 1774# 1775# Since: 4.0 1776## 1777{ 'struct': 'XDbgBlockGraphNode', 1778 'data': { 'id': 'uint64', 'type': 'XDbgBlockGraphNodeType', 'name': 'str' } } 1779 1780## 1781# @BlockPermission: 1782# 1783# Enum of base block permissions. 1784# 1785# @consistent-read: A user that has the "permission" of consistent reads is 1786# guaranteed that their view of the contents of the block 1787# device is complete and self-consistent, representing the 1788# contents of a disk at a specific point. 1789# For most block devices (including their backing files) this 1790# is true, but the property cannot be maintained in a few 1791# situations like for intermediate nodes of a commit block 1792# job. 1793# 1794# @write: This permission is required to change the visible disk contents. 1795# 1796# @write-unchanged: This permission (which is weaker than BLK_PERM_WRITE) is 1797# both enough and required for writes to the block node when 1798# the caller promises that the visible disk content doesn't 1799# change. 1800# As the BLK_PERM_WRITE permission is strictly stronger, 1801# either is sufficient to perform an unchanging write. 1802# 1803# @resize: This permission is required to change the size of a block node. 1804# 1805# @graph-mod: This permission is required to change the node that this 1806# BdrvChild points to. 1807# 1808# Since: 4.0 1809## 1810 { 'enum': 'BlockPermission', 1811 'data': [ 'consistent-read', 'write', 'write-unchanged', 'resize', 1812 'graph-mod' ] } 1813## 1814# @XDbgBlockGraphEdge: 1815# 1816# Block Graph edge description for x-debug-query-block-graph. 1817# 1818# @parent: parent id 1819# 1820# @child: child id 1821# 1822# @name: name of the relation (examples are 'file' and 'backing') 1823# 1824# @perm: granted permissions for the parent operating on the child 1825# 1826# @shared-perm: permissions that can still be granted to other users of the 1827# child while it is still attached to this parent 1828# 1829# Since: 4.0 1830## 1831{ 'struct': 'XDbgBlockGraphEdge', 1832 'data': { 'parent': 'uint64', 'child': 'uint64', 1833 'name': 'str', 'perm': [ 'BlockPermission' ], 1834 'shared-perm': [ 'BlockPermission' ] } } 1835 1836## 1837# @XDbgBlockGraph: 1838# 1839# Block Graph - list of nodes and list of edges. 1840# 1841# Since: 4.0 1842## 1843{ 'struct': 'XDbgBlockGraph', 1844 'data': { 'nodes': ['XDbgBlockGraphNode'], 'edges': ['XDbgBlockGraphEdge'] } } 1845 1846## 1847# @x-debug-query-block-graph: 1848# 1849# Get the block graph. 1850# 1851# Since: 4.0 1852## 1853{ 'command': 'x-debug-query-block-graph', 'returns': 'XDbgBlockGraph' } 1854 1855## 1856# @drive-mirror: 1857# 1858# Start mirroring a block device's writes to a new destination. target 1859# specifies the target of the new image. If the file exists, or if it 1860# is a device, it will be used as the new destination for writes. If 1861# it does not exist, a new file will be created. format specifies the 1862# format of the mirror image, default is to probe if mode='existing', 1863# else the format of the source. 1864# 1865# Returns: nothing on success 1866# If @device is not a valid block device, GenericError 1867# 1868# Since: 1.3 1869# 1870# Example: 1871# 1872# -> { "execute": "drive-mirror", 1873# "arguments": { "device": "ide-hd0", 1874# "target": "/some/place/my-image", 1875# "sync": "full", 1876# "format": "qcow2" } } 1877# <- { "return": {} } 1878# 1879## 1880{ 'command': 'drive-mirror', 'boxed': true, 1881 'data': 'DriveMirror' } 1882 1883## 1884# @DriveMirror: 1885# 1886# A set of parameters describing drive mirror setup. 1887# 1888# @job-id: identifier for the newly-created block job. If 1889# omitted, the device name will be used. (Since 2.7) 1890# 1891# @device: the device name or node-name of a root node whose writes should be 1892# mirrored. 1893# 1894# @target: the target of the new image. If the file exists, or if it 1895# is a device, the existing file/device will be used as the new 1896# destination. If it does not exist, a new file will be created. 1897# 1898# @format: the format of the new destination, default is to 1899# probe if @mode is 'existing', else the format of the source 1900# 1901# @node-name: the new block driver state node name in the graph 1902# (Since 2.1) 1903# 1904# @replaces: with sync=full graph node name to be replaced by the new 1905# image when a whole image copy is done. This can be used to repair 1906# broken Quorum files. (Since 2.1) 1907# 1908# @mode: whether and how QEMU should create a new image, default is 1909# 'absolute-paths'. 1910# 1911# @speed: the maximum speed, in bytes per second 1912# 1913# @sync: what parts of the disk image should be copied to the destination 1914# (all the disk, only the sectors allocated in the topmost image, or 1915# only new I/O). 1916# 1917# @granularity: granularity of the dirty bitmap, default is 64K 1918# if the image format doesn't have clusters, 4K if the clusters 1919# are smaller than that, else the cluster size. Must be a 1920# power of 2 between 512 and 64M (since 1.4). 1921# 1922# @buf-size: maximum amount of data in flight from source to 1923# target (since 1.4). 1924# 1925# @on-source-error: the action to take on an error on the source, 1926# default 'report'. 'stop' and 'enospc' can only be used 1927# if the block device supports io-status (see BlockInfo). 1928# 1929# @on-target-error: the action to take on an error on the target, 1930# default 'report' (no limitations, since this applies to 1931# a different block device than @device). 1932# @unmap: Whether to try to unmap target sectors where source has 1933# only zero. If true, and target unallocated sectors will read as zero, 1934# target image sectors will be unmapped; otherwise, zeroes will be 1935# written. Both will result in identical contents. 1936# Default is true. (Since 2.4) 1937# 1938# @copy-mode: when to copy data to the destination; defaults to 'background' 1939# (Since: 3.0) 1940# 1941# @auto-finalize: When false, this job will wait in a PENDING state after it has 1942# finished its work, waiting for @block-job-finalize before 1943# making any block graph changes. 1944# When true, this job will automatically 1945# perform its abort or commit actions. 1946# Defaults to true. (Since 3.1) 1947# 1948# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it 1949# has completely ceased all work, and awaits @block-job-dismiss. 1950# When true, this job will automatically disappear from the query 1951# list without user intervention. 1952# Defaults to true. (Since 3.1) 1953# Since: 1.3 1954## 1955{ 'struct': 'DriveMirror', 1956 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', 1957 '*format': 'str', '*node-name': 'str', '*replaces': 'str', 1958 'sync': 'MirrorSyncMode', '*mode': 'NewImageMode', 1959 '*speed': 'int', '*granularity': 'uint32', 1960 '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', 1961 '*on-target-error': 'BlockdevOnError', 1962 '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode', 1963 '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 1964 1965## 1966# @BlockDirtyBitmap: 1967# 1968# @node: name of device/node which the bitmap is tracking 1969# 1970# @name: name of the dirty bitmap 1971# 1972# Since: 2.4 1973## 1974{ 'struct': 'BlockDirtyBitmap', 1975 'data': { 'node': 'str', 'name': 'str' } } 1976 1977## 1978# @BlockDirtyBitmapAdd: 1979# 1980# @node: name of device/node which the bitmap is tracking 1981# 1982# @name: name of the dirty bitmap 1983# 1984# @granularity: the bitmap granularity, default is 64k for 1985# block-dirty-bitmap-add 1986# 1987# @persistent: the bitmap is persistent, i.e. it will be saved to the 1988# corresponding block device image file on its close. For now only 1989# Qcow2 disks support persistent bitmaps. Default is false for 1990# block-dirty-bitmap-add. (Since: 2.10) 1991# 1992# @autoload: ignored and deprecated since 2.12. 1993# Currently, all dirty tracking bitmaps are loaded from Qcow2 on 1994# open. 1995# 1996# @disabled: the bitmap is created in the disabled state, which means that 1997# it will not track drive changes. The bitmap may be enabled with 1998# block-dirty-bitmap-enable. Default is false. (Since: 4.0) 1999# 2000# Since: 2.4 2001## 2002{ 'struct': 'BlockDirtyBitmapAdd', 2003 'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32', 2004 '*persistent': 'bool', '*autoload': 'bool', '*disabled': 'bool' } } 2005 2006## 2007# @BlockDirtyBitmapMerge: 2008# 2009# @node: name of device/node which the bitmap is tracking 2010# 2011# @target: name of the destination dirty bitmap 2012# 2013# @bitmaps: name(s) of the source dirty bitmap(s) 2014# 2015# Since: 4.0 2016## 2017{ 'struct': 'BlockDirtyBitmapMerge', 2018 'data': { 'node': 'str', 'target': 'str', 'bitmaps': ['str'] } } 2019 2020## 2021# @block-dirty-bitmap-add: 2022# 2023# Create a dirty bitmap with a name on the node, and start tracking the writes. 2024# 2025# Returns: nothing on success 2026# If @node is not a valid block device or node, DeviceNotFound 2027# If @name is already taken, GenericError with an explanation 2028# 2029# Since: 2.4 2030# 2031# Example: 2032# 2033# -> { "execute": "block-dirty-bitmap-add", 2034# "arguments": { "node": "drive0", "name": "bitmap0" } } 2035# <- { "return": {} } 2036# 2037## 2038{ 'command': 'block-dirty-bitmap-add', 2039 'data': 'BlockDirtyBitmapAdd' } 2040 2041## 2042# @block-dirty-bitmap-remove: 2043# 2044# Stop write tracking and remove the dirty bitmap that was created 2045# with block-dirty-bitmap-add. If the bitmap is persistent, remove it from its 2046# storage too. 2047# 2048# Returns: nothing on success 2049# If @node is not a valid block device or node, DeviceNotFound 2050# If @name is not found, GenericError with an explanation 2051# if @name is frozen by an operation, GenericError 2052# 2053# Since: 2.4 2054# 2055# Example: 2056# 2057# -> { "execute": "block-dirty-bitmap-remove", 2058# "arguments": { "node": "drive0", "name": "bitmap0" } } 2059# <- { "return": {} } 2060# 2061## 2062{ 'command': 'block-dirty-bitmap-remove', 2063 'data': 'BlockDirtyBitmap' } 2064 2065## 2066# @block-dirty-bitmap-clear: 2067# 2068# Clear (reset) a dirty bitmap on the device, so that an incremental 2069# backup from this point in time forward will only backup clusters 2070# modified after this clear operation. 2071# 2072# Returns: nothing on success 2073# If @node is not a valid block device, DeviceNotFound 2074# If @name is not found, GenericError with an explanation 2075# 2076# Since: 2.4 2077# 2078# Example: 2079# 2080# -> { "execute": "block-dirty-bitmap-clear", 2081# "arguments": { "node": "drive0", "name": "bitmap0" } } 2082# <- { "return": {} } 2083# 2084## 2085{ 'command': 'block-dirty-bitmap-clear', 2086 'data': 'BlockDirtyBitmap' } 2087 2088## 2089# @block-dirty-bitmap-enable: 2090# 2091# Enables a dirty bitmap so that it will begin tracking disk changes. 2092# 2093# Returns: nothing on success 2094# If @node is not a valid block device, DeviceNotFound 2095# If @name is not found, GenericError with an explanation 2096# 2097# Since: 4.0 2098# 2099# Example: 2100# 2101# -> { "execute": "block-dirty-bitmap-enable", 2102# "arguments": { "node": "drive0", "name": "bitmap0" } } 2103# <- { "return": {} } 2104# 2105## 2106 { 'command': 'block-dirty-bitmap-enable', 2107 'data': 'BlockDirtyBitmap' } 2108 2109## 2110# @block-dirty-bitmap-disable: 2111# 2112# Disables a dirty bitmap so that it will stop tracking disk changes. 2113# 2114# Returns: nothing on success 2115# If @node is not a valid block device, DeviceNotFound 2116# If @name is not found, GenericError with an explanation 2117# 2118# Since: 4.0 2119# 2120# Example: 2121# 2122# -> { "execute": "block-dirty-bitmap-disable", 2123# "arguments": { "node": "drive0", "name": "bitmap0" } } 2124# <- { "return": {} } 2125# 2126## 2127 { 'command': 'block-dirty-bitmap-disable', 2128 'data': 'BlockDirtyBitmap' } 2129 2130## 2131# @block-dirty-bitmap-merge: 2132# 2133# Merge dirty bitmaps listed in @bitmaps to the @target dirty bitmap. 2134# Dirty bitmaps in @bitmaps will be unchanged, except if it also appears 2135# as the @target bitmap. Any bits already set in @target will still be 2136# set after the merge, i.e., this operation does not clear the target. 2137# On error, @target is unchanged. 2138# 2139# The resulting bitmap will count as dirty any clusters that were dirty in any 2140# of the source bitmaps. This can be used to achieve backup checkpoints, or in 2141# simpler usages, to copy bitmaps. 2142# 2143# Returns: nothing on success 2144# If @node is not a valid block device, DeviceNotFound 2145# If any bitmap in @bitmaps or @target is not found, GenericError 2146# If any of the bitmaps have different sizes or granularities, 2147# GenericError 2148# 2149# Since: 4.0 2150# 2151# Example: 2152# 2153# -> { "execute": "block-dirty-bitmap-merge", 2154# "arguments": { "node": "drive0", "target": "bitmap0", 2155# "bitmaps": ["bitmap1"] } } 2156# <- { "return": {} } 2157# 2158## 2159 { 'command': 'block-dirty-bitmap-merge', 2160 'data': 'BlockDirtyBitmapMerge' } 2161 2162## 2163# @BlockDirtyBitmapSha256: 2164# 2165# SHA256 hash of dirty bitmap data 2166# 2167# @sha256: ASCII representation of SHA256 bitmap hash 2168# 2169# Since: 2.10 2170## 2171 { 'struct': 'BlockDirtyBitmapSha256', 2172 'data': {'sha256': 'str'} } 2173 2174## 2175# @x-debug-block-dirty-bitmap-sha256: 2176# 2177# Get bitmap SHA256. 2178# 2179# Returns: BlockDirtyBitmapSha256 on success 2180# If @node is not a valid block device, DeviceNotFound 2181# If @name is not found or if hashing has failed, GenericError with an 2182# explanation 2183# 2184# Since: 2.10 2185## 2186 { 'command': 'x-debug-block-dirty-bitmap-sha256', 2187 'data': 'BlockDirtyBitmap', 'returns': 'BlockDirtyBitmapSha256' } 2188 2189## 2190# @blockdev-mirror: 2191# 2192# Start mirroring a block device's writes to a new destination. 2193# 2194# @job-id: identifier for the newly-created block job. If 2195# omitted, the device name will be used. (Since 2.7) 2196# 2197# @device: The device name or node-name of a root node whose writes should be 2198# mirrored. 2199# 2200# @target: the id or node-name of the block device to mirror to. This mustn't be 2201# attached to guest. 2202# 2203# @replaces: with sync=full graph node name to be replaced by the new 2204# image when a whole image copy is done. This can be used to repair 2205# broken Quorum files. 2206# 2207# @speed: the maximum speed, in bytes per second 2208# 2209# @sync: what parts of the disk image should be copied to the destination 2210# (all the disk, only the sectors allocated in the topmost image, or 2211# only new I/O). 2212# 2213# @granularity: granularity of the dirty bitmap, default is 64K 2214# if the image format doesn't have clusters, 4K if the clusters 2215# are smaller than that, else the cluster size. Must be a 2216# power of 2 between 512 and 64M 2217# 2218# @buf-size: maximum amount of data in flight from source to 2219# target 2220# 2221# @on-source-error: the action to take on an error on the source, 2222# default 'report'. 'stop' and 'enospc' can only be used 2223# if the block device supports io-status (see BlockInfo). 2224# 2225# @on-target-error: the action to take on an error on the target, 2226# default 'report' (no limitations, since this applies to 2227# a different block device than @device). 2228# 2229# @filter-node-name: the node name that should be assigned to the 2230# filter driver that the mirror job inserts into the graph 2231# above @device. If this option is not given, a node name is 2232# autogenerated. (Since: 2.9) 2233# 2234# @copy-mode: when to copy data to the destination; defaults to 'background' 2235# (Since: 3.0) 2236# 2237# @auto-finalize: When false, this job will wait in a PENDING state after it has 2238# finished its work, waiting for @block-job-finalize before 2239# making any block graph changes. 2240# When true, this job will automatically 2241# perform its abort or commit actions. 2242# Defaults to true. (Since 3.1) 2243# 2244# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it 2245# has completely ceased all work, and awaits @block-job-dismiss. 2246# When true, this job will automatically disappear from the query 2247# list without user intervention. 2248# Defaults to true. (Since 3.1) 2249# Returns: nothing on success. 2250# 2251# Since: 2.6 2252# 2253# Example: 2254# 2255# -> { "execute": "blockdev-mirror", 2256# "arguments": { "device": "ide-hd0", 2257# "target": "target0", 2258# "sync": "full" } } 2259# <- { "return": {} } 2260# 2261## 2262{ 'command': 'blockdev-mirror', 2263 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', 2264 '*replaces': 'str', 2265 'sync': 'MirrorSyncMode', 2266 '*speed': 'int', '*granularity': 'uint32', 2267 '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', 2268 '*on-target-error': 'BlockdevOnError', 2269 '*filter-node-name': 'str', 2270 '*copy-mode': 'MirrorCopyMode', 2271 '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 2272 2273## 2274# @block_set_io_throttle: 2275# 2276# Change I/O throttle limits for a block drive. 2277# 2278# Since QEMU 2.4, each device with I/O limits is member of a throttle 2279# group. 2280# 2281# If two or more devices are members of the same group, the limits 2282# will apply to the combined I/O of the whole group in a round-robin 2283# fashion. Therefore, setting new I/O limits to a device will affect 2284# the whole group. 2285# 2286# The name of the group can be specified using the 'group' parameter. 2287# If the parameter is unset, it is assumed to be the current group of 2288# that device. If it's not in any group yet, the name of the device 2289# will be used as the name for its group. 2290# 2291# The 'group' parameter can also be used to move a device to a 2292# different group. In this case the limits specified in the parameters 2293# will be applied to the new group only. 2294# 2295# I/O limits can be disabled by setting all of them to 0. In this case 2296# the device will be removed from its group and the rest of its 2297# members will not be affected. The 'group' parameter is ignored. 2298# 2299# Returns: Nothing on success 2300# If @device is not a valid block device, DeviceNotFound 2301# 2302# Since: 1.1 2303# 2304# Example: 2305# 2306# -> { "execute": "block_set_io_throttle", 2307# "arguments": { "id": "virtio-blk-pci0/virtio-backend", 2308# "bps": 0, 2309# "bps_rd": 0, 2310# "bps_wr": 0, 2311# "iops": 512, 2312# "iops_rd": 0, 2313# "iops_wr": 0, 2314# "bps_max": 0, 2315# "bps_rd_max": 0, 2316# "bps_wr_max": 0, 2317# "iops_max": 0, 2318# "iops_rd_max": 0, 2319# "iops_wr_max": 0, 2320# "bps_max_length": 0, 2321# "iops_size": 0 } } 2322# <- { "return": {} } 2323# 2324# -> { "execute": "block_set_io_throttle", 2325# "arguments": { "id": "ide0-1-0", 2326# "bps": 1000000, 2327# "bps_rd": 0, 2328# "bps_wr": 0, 2329# "iops": 0, 2330# "iops_rd": 0, 2331# "iops_wr": 0, 2332# "bps_max": 8000000, 2333# "bps_rd_max": 0, 2334# "bps_wr_max": 0, 2335# "iops_max": 0, 2336# "iops_rd_max": 0, 2337# "iops_wr_max": 0, 2338# "bps_max_length": 60, 2339# "iops_size": 0 } } 2340# <- { "return": {} } 2341## 2342{ 'command': 'block_set_io_throttle', 'boxed': true, 2343 'data': 'BlockIOThrottle' } 2344 2345## 2346# @BlockIOThrottle: 2347# 2348# A set of parameters describing block throttling. 2349# 2350# @device: Block device name (deprecated, use @id instead) 2351# 2352# @id: The name or QOM path of the guest device (since: 2.8) 2353# 2354# @bps: total throughput limit in bytes per second 2355# 2356# @bps_rd: read throughput limit in bytes per second 2357# 2358# @bps_wr: write throughput limit in bytes per second 2359# 2360# @iops: total I/O operations per second 2361# 2362# @iops_rd: read I/O operations per second 2363# 2364# @iops_wr: write I/O operations per second 2365# 2366# @bps_max: total throughput limit during bursts, 2367# in bytes (Since 1.7) 2368# 2369# @bps_rd_max: read throughput limit during bursts, 2370# in bytes (Since 1.7) 2371# 2372# @bps_wr_max: write throughput limit during bursts, 2373# in bytes (Since 1.7) 2374# 2375# @iops_max: total I/O operations per second during bursts, 2376# in bytes (Since 1.7) 2377# 2378# @iops_rd_max: read I/O operations per second during bursts, 2379# in bytes (Since 1.7) 2380# 2381# @iops_wr_max: write I/O operations per second during bursts, 2382# in bytes (Since 1.7) 2383# 2384# @bps_max_length: maximum length of the @bps_max burst 2385# period, in seconds. It must only 2386# be set if @bps_max is set as well. 2387# Defaults to 1. (Since 2.6) 2388# 2389# @bps_rd_max_length: maximum length of the @bps_rd_max 2390# burst period, in seconds. It must only 2391# be set if @bps_rd_max is set as well. 2392# Defaults to 1. (Since 2.6) 2393# 2394# @bps_wr_max_length: maximum length of the @bps_wr_max 2395# burst period, in seconds. It must only 2396# be set if @bps_wr_max is set as well. 2397# Defaults to 1. (Since 2.6) 2398# 2399# @iops_max_length: maximum length of the @iops burst 2400# period, in seconds. It must only 2401# be set if @iops_max is set as well. 2402# Defaults to 1. (Since 2.6) 2403# 2404# @iops_rd_max_length: maximum length of the @iops_rd_max 2405# burst period, in seconds. It must only 2406# be set if @iops_rd_max is set as well. 2407# Defaults to 1. (Since 2.6) 2408# 2409# @iops_wr_max_length: maximum length of the @iops_wr_max 2410# burst period, in seconds. It must only 2411# be set if @iops_wr_max is set as well. 2412# Defaults to 1. (Since 2.6) 2413# 2414# @iops_size: an I/O size in bytes (Since 1.7) 2415# 2416# @group: throttle group name (Since 2.4) 2417# 2418# Since: 1.1 2419## 2420{ 'struct': 'BlockIOThrottle', 2421 'data': { '*device': 'str', '*id': 'str', 'bps': 'int', 'bps_rd': 'int', 2422 'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', 2423 '*bps_max': 'int', '*bps_rd_max': 'int', 2424 '*bps_wr_max': 'int', '*iops_max': 'int', 2425 '*iops_rd_max': 'int', '*iops_wr_max': 'int', 2426 '*bps_max_length': 'int', '*bps_rd_max_length': 'int', 2427 '*bps_wr_max_length': 'int', '*iops_max_length': 'int', 2428 '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int', 2429 '*iops_size': 'int', '*group': 'str' } } 2430 2431## 2432# @ThrottleLimits: 2433# 2434# Limit parameters for throttling. 2435# Since some limit combinations are illegal, limits should always be set in one 2436# transaction. All fields are optional. When setting limits, if a field is 2437# missing the current value is not changed. 2438# 2439# @iops-total: limit total I/O operations per second 2440# @iops-total-max: I/O operations burst 2441# @iops-total-max-length: length of the iops-total-max burst period, in seconds 2442# It must only be set if @iops-total-max is set as well. 2443# @iops-read: limit read operations per second 2444# @iops-read-max: I/O operations read burst 2445# @iops-read-max-length: length of the iops-read-max burst period, in seconds 2446# It must only be set if @iops-read-max is set as well. 2447# @iops-write: limit write operations per second 2448# @iops-write-max: I/O operations write burst 2449# @iops-write-max-length: length of the iops-write-max burst period, in seconds 2450# It must only be set if @iops-write-max is set as well. 2451# @bps-total: limit total bytes per second 2452# @bps-total-max: total bytes burst 2453# @bps-total-max-length: length of the bps-total-max burst period, in seconds. 2454# It must only be set if @bps-total-max is set as well. 2455# @bps-read: limit read bytes per second 2456# @bps-read-max: total bytes read burst 2457# @bps-read-max-length: length of the bps-read-max burst period, in seconds 2458# It must only be set if @bps-read-max is set as well. 2459# @bps-write: limit write bytes per second 2460# @bps-write-max: total bytes write burst 2461# @bps-write-max-length: length of the bps-write-max burst period, in seconds 2462# It must only be set if @bps-write-max is set as well. 2463# @iops-size: when limiting by iops max size of an I/O in bytes 2464# 2465# Since: 2.11 2466## 2467{ 'struct': 'ThrottleLimits', 2468 'data': { '*iops-total' : 'int', '*iops-total-max' : 'int', 2469 '*iops-total-max-length' : 'int', '*iops-read' : 'int', 2470 '*iops-read-max' : 'int', '*iops-read-max-length' : 'int', 2471 '*iops-write' : 'int', '*iops-write-max' : 'int', 2472 '*iops-write-max-length' : 'int', '*bps-total' : 'int', 2473 '*bps-total-max' : 'int', '*bps-total-max-length' : 'int', 2474 '*bps-read' : 'int', '*bps-read-max' : 'int', 2475 '*bps-read-max-length' : 'int', '*bps-write' : 'int', 2476 '*bps-write-max' : 'int', '*bps-write-max-length' : 'int', 2477 '*iops-size' : 'int' } } 2478 2479## 2480# @block-stream: 2481# 2482# Copy data from a backing file into a block device. 2483# 2484# The block streaming operation is performed in the background until the entire 2485# backing file has been copied. This command returns immediately once streaming 2486# has started. The status of ongoing block streaming operations can be checked 2487# with query-block-jobs. The operation can be stopped before it has completed 2488# using the block-job-cancel command. 2489# 2490# The node that receives the data is called the top image, can be located in 2491# any part of the chain (but always above the base image; see below) and can be 2492# specified using its device or node name. Earlier qemu versions only allowed 2493# 'device' to name the top level node; presence of the 'base-node' parameter 2494# during introspection can be used as a witness of the enhanced semantics 2495# of 'device'. 2496# 2497# If a base file is specified then sectors are not copied from that base file and 2498# its backing chain. When streaming completes the image file will have the base 2499# file as its backing file. This can be used to stream a subset of the backing 2500# file chain instead of flattening the entire image. 2501# 2502# On successful completion the image file is updated to drop the backing file 2503# and the BLOCK_JOB_COMPLETED event is emitted. 2504# 2505# @job-id: identifier for the newly-created block job. If 2506# omitted, the device name will be used. (Since 2.7) 2507# 2508# @device: the device or node name of the top image 2509# 2510# @base: the common backing file name. 2511# It cannot be set if @base-node is also set. 2512# 2513# @base-node: the node name of the backing file. 2514# It cannot be set if @base is also set. (Since 2.8) 2515# 2516# @backing-file: The backing file string to write into the top 2517# image. This filename is not validated. 2518# 2519# If a pathname string is such that it cannot be 2520# resolved by QEMU, that means that subsequent QMP or 2521# HMP commands must use node-names for the image in 2522# question, as filename lookup methods will fail. 2523# 2524# If not specified, QEMU will automatically determine 2525# the backing file string to use, or error out if there 2526# is no obvious choice. Care should be taken when 2527# specifying the string, to specify a valid filename or 2528# protocol. 2529# (Since 2.1) 2530# 2531# @speed: the maximum speed, in bytes per second 2532# 2533# @on-error: the action to take on an error (default report). 2534# 'stop' and 'enospc' can only be used if the block device 2535# supports io-status (see BlockInfo). Since 1.3. 2536# 2537# @auto-finalize: When false, this job will wait in a PENDING state after it has 2538# finished its work, waiting for @block-job-finalize before 2539# making any block graph changes. 2540# When true, this job will automatically 2541# perform its abort or commit actions. 2542# Defaults to true. (Since 3.1) 2543# 2544# @auto-dismiss: When false, this job will wait in a CONCLUDED state after it 2545# has completely ceased all work, and awaits @block-job-dismiss. 2546# When true, this job will automatically disappear from the query 2547# list without user intervention. 2548# Defaults to true. (Since 3.1) 2549# 2550# Returns: Nothing on success. If @device does not exist, DeviceNotFound. 2551# 2552# Since: 1.1 2553# 2554# Example: 2555# 2556# -> { "execute": "block-stream", 2557# "arguments": { "device": "virtio0", 2558# "base": "/tmp/master.qcow2" } } 2559# <- { "return": {} } 2560# 2561## 2562{ 'command': 'block-stream', 2563 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', 2564 '*base-node': 'str', '*backing-file': 'str', '*speed': 'int', 2565 '*on-error': 'BlockdevOnError', 2566 '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 2567 2568## 2569# @block-job-set-speed: 2570# 2571# Set maximum speed for a background block operation. 2572# 2573# This command can only be issued when there is an active block job. 2574# 2575# Throttling can be disabled by setting the speed to 0. 2576# 2577# @device: The job identifier. This used to be a device name (hence 2578# the name of the parameter), but since QEMU 2.7 it can have 2579# other values. 2580# 2581# @speed: the maximum speed, in bytes per second, or 0 for unlimited. 2582# Defaults to 0. 2583# 2584# Returns: Nothing on success 2585# If no background operation is active on this device, DeviceNotActive 2586# 2587# Since: 1.1 2588## 2589{ 'command': 'block-job-set-speed', 2590 'data': { 'device': 'str', 'speed': 'int' } } 2591 2592## 2593# @block-job-cancel: 2594# 2595# Stop an active background block operation. 2596# 2597# This command returns immediately after marking the active background block 2598# operation for cancellation. It is an error to call this command if no 2599# operation is in progress. 2600# 2601# The operation will cancel as soon as possible and then emit the 2602# BLOCK_JOB_CANCELLED event. Before that happens the job is still visible when 2603# enumerated using query-block-jobs. 2604# 2605# Note that if you issue 'block-job-cancel' after 'drive-mirror' has indicated 2606# (via the event BLOCK_JOB_READY) that the source and destination are 2607# synchronized, then the event triggered by this command changes to 2608# BLOCK_JOB_COMPLETED, to indicate that the mirroring has ended and the 2609# destination now has a point-in-time copy tied to the time of the cancellation. 2610# 2611# For streaming, the image file retains its backing file unless the streaming 2612# operation happens to complete just as it is being cancelled. A new streaming 2613# operation can be started at a later time to finish copying all data from the 2614# backing file. 2615# 2616# @device: The job identifier. This used to be a device name (hence 2617# the name of the parameter), but since QEMU 2.7 it can have 2618# other values. 2619# 2620# @force: If true, and the job has already emitted the event BLOCK_JOB_READY, 2621# abandon the job immediately (even if it is paused) instead of waiting 2622# for the destination to complete its final synchronization (since 1.3) 2623# 2624# Returns: Nothing on success 2625# If no background operation is active on this device, DeviceNotActive 2626# 2627# Since: 1.1 2628## 2629{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' } } 2630 2631## 2632# @block-job-pause: 2633# 2634# Pause an active background block operation. 2635# 2636# This command returns immediately after marking the active background block 2637# operation for pausing. It is an error to call this command if no 2638# operation is in progress or if the job is already paused. 2639# 2640# The operation will pause as soon as possible. No event is emitted when 2641# the operation is actually paused. Cancelling a paused job automatically 2642# resumes it. 2643# 2644# @device: The job identifier. This used to be a device name (hence 2645# the name of the parameter), but since QEMU 2.7 it can have 2646# other values. 2647# 2648# Returns: Nothing on success 2649# If no background operation is active on this device, DeviceNotActive 2650# 2651# Since: 1.3 2652## 2653{ 'command': 'block-job-pause', 'data': { 'device': 'str' } } 2654 2655## 2656# @block-job-resume: 2657# 2658# Resume an active background block operation. 2659# 2660# This command returns immediately after resuming a paused background block 2661# operation. It is an error to call this command if no operation is in 2662# progress or if the job is not paused. 2663# 2664# This command also clears the error status of the job. 2665# 2666# @device: The job identifier. This used to be a device name (hence 2667# the name of the parameter), but since QEMU 2.7 it can have 2668# other values. 2669# 2670# Returns: Nothing on success 2671# If no background operation is active on this device, DeviceNotActive 2672# 2673# Since: 1.3 2674## 2675{ 'command': 'block-job-resume', 'data': { 'device': 'str' } } 2676 2677## 2678# @block-job-complete: 2679# 2680# Manually trigger completion of an active background block operation. This 2681# is supported for drive mirroring, where it also switches the device to 2682# write to the target path only. The ability to complete is signaled with 2683# a BLOCK_JOB_READY event. 2684# 2685# This command completes an active background block operation synchronously. 2686# The ordering of this command's return with the BLOCK_JOB_COMPLETED event 2687# is not defined. Note that if an I/O error occurs during the processing of 2688# this command: 1) the command itself will fail; 2) the error will be processed 2689# according to the rerror/werror arguments that were specified when starting 2690# the operation. 2691# 2692# A cancelled or paused job cannot be completed. 2693# 2694# @device: The job identifier. This used to be a device name (hence 2695# the name of the parameter), but since QEMU 2.7 it can have 2696# other values. 2697# 2698# Returns: Nothing on success 2699# If no background operation is active on this device, DeviceNotActive 2700# 2701# Since: 1.3 2702## 2703{ 'command': 'block-job-complete', 'data': { 'device': 'str' } } 2704 2705## 2706# @block-job-dismiss: 2707# 2708# For jobs that have already concluded, remove them from the block-job-query 2709# list. This command only needs to be run for jobs which were started with 2710# QEMU 2.12+ job lifetime management semantics. 2711# 2712# This command will refuse to operate on any job that has not yet reached 2713# its terminal state, JOB_STATUS_CONCLUDED. For jobs that make use of the 2714# BLOCK_JOB_READY event, block-job-cancel or block-job-complete will still need 2715# to be used as appropriate. 2716# 2717# @id: The job identifier. 2718# 2719# Returns: Nothing on success 2720# 2721# Since: 2.12 2722## 2723{ 'command': 'block-job-dismiss', 'data': { 'id': 'str' } } 2724 2725## 2726# @block-job-finalize: 2727# 2728# Once a job that has manual=true reaches the pending state, it can be 2729# instructed to finalize any graph changes and do any necessary cleanup 2730# via this command. 2731# For jobs in a transaction, instructing one job to finalize will force 2732# ALL jobs in the transaction to finalize, so it is only necessary to instruct 2733# a single member job to finalize. 2734# 2735# @id: The job identifier. 2736# 2737# Returns: Nothing on success 2738# 2739# Since: 2.12 2740## 2741{ 'command': 'block-job-finalize', 'data': { 'id': 'str' } } 2742 2743## 2744# @BlockdevDiscardOptions: 2745# 2746# Determines how to handle discard requests. 2747# 2748# @ignore: Ignore the request 2749# @unmap: Forward as an unmap request 2750# 2751# Since: 2.9 2752## 2753{ 'enum': 'BlockdevDiscardOptions', 2754 'data': [ 'ignore', 'unmap' ] } 2755 2756## 2757# @BlockdevDetectZeroesOptions: 2758# 2759# Describes the operation mode for the automatic conversion of plain 2760# zero writes by the OS to driver specific optimized zero write commands. 2761# 2762# @off: Disabled (default) 2763# @on: Enabled 2764# @unmap: Enabled and even try to unmap blocks if possible. This requires 2765# also that @BlockdevDiscardOptions is set to unmap for this device. 2766# 2767# Since: 2.1 2768## 2769{ 'enum': 'BlockdevDetectZeroesOptions', 2770 'data': [ 'off', 'on', 'unmap' ] } 2771 2772## 2773# @BlockdevAioOptions: 2774# 2775# Selects the AIO backend to handle I/O requests 2776# 2777# @threads: Use qemu's thread pool 2778# @native: Use native AIO backend (only Linux and Windows) 2779# 2780# Since: 2.9 2781## 2782{ 'enum': 'BlockdevAioOptions', 2783 'data': [ 'threads', 'native' ] } 2784 2785## 2786# @BlockdevCacheOptions: 2787# 2788# Includes cache-related options for block devices 2789# 2790# @direct: enables use of O_DIRECT (bypass the host page cache; 2791# default: false) 2792# @no-flush: ignore any flush requests for the device (default: 2793# false) 2794# 2795# Since: 2.9 2796## 2797{ 'struct': 'BlockdevCacheOptions', 2798 'data': { '*direct': 'bool', 2799 '*no-flush': 'bool' } } 2800 2801## 2802# @BlockdevDriver: 2803# 2804# Drivers that are supported in block device operations. 2805# 2806# @vxhs: Since 2.10 2807# @throttle: Since 2.11 2808# @nvme: Since 2.12 2809# @copy-on-read: Since 3.0 2810# @blklogwrites: Since 3.0 2811# 2812# Since: 2.9 2813## 2814{ 'enum': 'BlockdevDriver', 2815 'data': [ 'blkdebug', 'blklogwrites', 'blkverify', 'bochs', 'cloop', 2816 'copy-on-read', 'dmg', 'file', 'ftp', 'ftps', 'gluster', 2817 'host_cdrom', 'host_device', 'http', 'https', 'iscsi', 'luks', 2818 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels', 'qcow', 2819 'qcow2', 'qed', 'quorum', 'raw', 'rbd', 2820 { 'name': 'replication', 'if': 'defined(CONFIG_REPLICATION)' }, 2821 'sheepdog', 2822 'ssh', 'throttle', 'vdi', 'vhdx', 'vmdk', 'vpc', 'vvfat', 'vxhs' ] } 2823 2824## 2825# @BlockdevOptionsFile: 2826# 2827# Driver specific block device options for the file backend. 2828# 2829# @filename: path to the image file 2830# @pr-manager: the id for the object that will handle persistent reservations 2831# for this device (default: none, forward the commands via SG_IO; 2832# since 2.11) 2833# @aio: AIO backend (default: threads) (since: 2.8) 2834# @locking: whether to enable file locking. If set to 'auto', only enable 2835# when Open File Descriptor (OFD) locking API is available 2836# (default: auto, since 2.10) 2837# @drop-cache: invalidate page cache during live migration. This prevents 2838# stale data on the migration destination with cache.direct=off. 2839# Currently only supported on Linux hosts. 2840# (default: on, since: 4.0) 2841# @x-check-cache-dropped: whether to check that page cache was dropped on live 2842# migration. May cause noticeable delays if the image 2843# file is large, do not use in production. 2844# (default: off) (since: 3.0) 2845# 2846# Since: 2.9 2847## 2848{ 'struct': 'BlockdevOptionsFile', 2849 'data': { 'filename': 'str', 2850 '*pr-manager': 'str', 2851 '*locking': 'OnOffAuto', 2852 '*aio': 'BlockdevAioOptions', 2853 '*drop-cache': {'type': 'bool', 2854 'if': 'defined(CONFIG_LINUX)'}, 2855 '*x-check-cache-dropped': 'bool' } } 2856 2857## 2858# @BlockdevOptionsNull: 2859# 2860# Driver specific block device options for the null backend. 2861# 2862# @size: size of the device in bytes. 2863# @latency-ns: emulated latency (in nanoseconds) in processing 2864# requests. Default to zero which completes requests immediately. 2865# (Since 2.4) 2866# 2867# Since: 2.9 2868## 2869{ 'struct': 'BlockdevOptionsNull', 2870 'data': { '*size': 'int', '*latency-ns': 'uint64' } } 2871 2872## 2873# @BlockdevOptionsNVMe: 2874# 2875# Driver specific block device options for the NVMe backend. 2876# 2877# @device: controller address of the NVMe device. 2878# @namespace: namespace number of the device, starting from 1. 2879# 2880# Since: 2.12 2881## 2882{ 'struct': 'BlockdevOptionsNVMe', 2883 'data': { 'device': 'str', 'namespace': 'int' } } 2884 2885## 2886# @BlockdevOptionsVVFAT: 2887# 2888# Driver specific block device options for the vvfat protocol. 2889# 2890# @dir: directory to be exported as FAT image 2891# @fat-type: FAT type: 12, 16 or 32 2892# @floppy: whether to export a floppy image (true) or 2893# partitioned hard disk (false; default) 2894# @label: set the volume label, limited to 11 bytes. FAT16 and 2895# FAT32 traditionally have some restrictions on labels, which are 2896# ignored by most operating systems. Defaults to "QEMU VVFAT". 2897# (since 2.4) 2898# @rw: whether to allow write operations (default: false) 2899# 2900# Since: 2.9 2901## 2902{ 'struct': 'BlockdevOptionsVVFAT', 2903 'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool', 2904 '*label': 'str', '*rw': 'bool' } } 2905 2906## 2907# @BlockdevOptionsGenericFormat: 2908# 2909# Driver specific block device options for image format that have no option 2910# besides their data source. 2911# 2912# @file: reference to or definition of the data source block device 2913# 2914# Since: 2.9 2915## 2916{ 'struct': 'BlockdevOptionsGenericFormat', 2917 'data': { 'file': 'BlockdevRef' } } 2918 2919## 2920# @BlockdevOptionsLUKS: 2921# 2922# Driver specific block device options for LUKS. 2923# 2924# @key-secret: the ID of a QCryptoSecret object providing 2925# the decryption key (since 2.6). Mandatory except when 2926# doing a metadata-only probe of the image. 2927# 2928# Since: 2.9 2929## 2930{ 'struct': 'BlockdevOptionsLUKS', 2931 'base': 'BlockdevOptionsGenericFormat', 2932 'data': { '*key-secret': 'str' } } 2933 2934 2935## 2936# @BlockdevOptionsGenericCOWFormat: 2937# 2938# Driver specific block device options for image format that have no option 2939# besides their data source and an optional backing file. 2940# 2941# @backing: reference to or definition of the backing file block 2942# device, null disables the backing file entirely. 2943# Defaults to the backing file stored the image file. 2944# 2945# Since: 2.9 2946## 2947{ 'struct': 'BlockdevOptionsGenericCOWFormat', 2948 'base': 'BlockdevOptionsGenericFormat', 2949 'data': { '*backing': 'BlockdevRefOrNull' } } 2950 2951## 2952# @Qcow2OverlapCheckMode: 2953# 2954# General overlap check modes. 2955# 2956# @none: Do not perform any checks 2957# 2958# @constant: Perform only checks which can be done in constant time and 2959# without reading anything from disk 2960# 2961# @cached: Perform only checks which can be done without reading anything 2962# from disk 2963# 2964# @all: Perform all available overlap checks 2965# 2966# Since: 2.9 2967## 2968{ 'enum': 'Qcow2OverlapCheckMode', 2969 'data': [ 'none', 'constant', 'cached', 'all' ] } 2970 2971## 2972# @Qcow2OverlapCheckFlags: 2973# 2974# Structure of flags for each metadata structure. Setting a field to 'true' 2975# makes qemu guard that structure against unintended overwriting. The default 2976# value is chosen according to the template given. 2977# 2978# @template: Specifies a template mode which can be adjusted using the other 2979# flags, defaults to 'cached' 2980# 2981# @bitmap-directory: since 3.0 2982# 2983# Since: 2.9 2984## 2985{ 'struct': 'Qcow2OverlapCheckFlags', 2986 'data': { '*template': 'Qcow2OverlapCheckMode', 2987 '*main-header': 'bool', 2988 '*active-l1': 'bool', 2989 '*active-l2': 'bool', 2990 '*refcount-table': 'bool', 2991 '*refcount-block': 'bool', 2992 '*snapshot-table': 'bool', 2993 '*inactive-l1': 'bool', 2994 '*inactive-l2': 'bool', 2995 '*bitmap-directory': 'bool' } } 2996 2997## 2998# @Qcow2OverlapChecks: 2999# 3000# Specifies which metadata structures should be guarded against unintended 3001# overwriting. 3002# 3003# @flags: set of flags for separate specification of each metadata structure 3004# type 3005# 3006# @mode: named mode which chooses a specific set of flags 3007# 3008# Since: 2.9 3009## 3010{ 'alternate': 'Qcow2OverlapChecks', 3011 'data': { 'flags': 'Qcow2OverlapCheckFlags', 3012 'mode': 'Qcow2OverlapCheckMode' } } 3013 3014## 3015# @BlockdevQcowEncryptionFormat: 3016# 3017# @aes: AES-CBC with plain64 initialization vectors 3018# 3019# Since: 2.10 3020## 3021{ 'enum': 'BlockdevQcowEncryptionFormat', 3022 'data': [ 'aes' ] } 3023 3024## 3025# @BlockdevQcowEncryption: 3026# 3027# Since: 2.10 3028## 3029{ 'union': 'BlockdevQcowEncryption', 3030 'base': { 'format': 'BlockdevQcowEncryptionFormat' }, 3031 'discriminator': 'format', 3032 'data': { 'aes': 'QCryptoBlockOptionsQCow' } } 3033 3034## 3035# @BlockdevOptionsQcow: 3036# 3037# Driver specific block device options for qcow. 3038# 3039# @encrypt: Image decryption options. Mandatory for 3040# encrypted images, except when doing a metadata-only 3041# probe of the image. 3042# 3043# Since: 2.10 3044## 3045{ 'struct': 'BlockdevOptionsQcow', 3046 'base': 'BlockdevOptionsGenericCOWFormat', 3047 'data': { '*encrypt': 'BlockdevQcowEncryption' } } 3048 3049 3050 3051## 3052# @BlockdevQcow2EncryptionFormat: 3053# @aes: AES-CBC with plain64 initialization vectors 3054# 3055# Since: 2.10 3056## 3057{ 'enum': 'BlockdevQcow2EncryptionFormat', 3058 'data': [ 'aes', 'luks' ] } 3059 3060## 3061# @BlockdevQcow2Encryption: 3062# 3063# Since: 2.10 3064## 3065{ 'union': 'BlockdevQcow2Encryption', 3066 'base': { 'format': 'BlockdevQcow2EncryptionFormat' }, 3067 'discriminator': 'format', 3068 'data': { 'aes': 'QCryptoBlockOptionsQCow', 3069 'luks': 'QCryptoBlockOptionsLUKS'} } 3070 3071## 3072# @BlockdevOptionsQcow2: 3073# 3074# Driver specific block device options for qcow2. 3075# 3076# @lazy-refcounts: whether to enable the lazy refcounts 3077# feature (default is taken from the image file) 3078# 3079# @pass-discard-request: whether discard requests to the qcow2 3080# device should be forwarded to the data source 3081# 3082# @pass-discard-snapshot: whether discard requests for the data source 3083# should be issued when a snapshot operation (e.g. 3084# deleting a snapshot) frees clusters in the qcow2 file 3085# 3086# @pass-discard-other: whether discard requests for the data source 3087# should be issued on other occasions where a cluster 3088# gets freed 3089# 3090# @overlap-check: which overlap checks to perform for writes 3091# to the image, defaults to 'cached' (since 2.2) 3092# 3093# @cache-size: the maximum total size of the L2 table and 3094# refcount block caches in bytes (since 2.2) 3095# 3096# @l2-cache-size: the maximum size of the L2 table cache in 3097# bytes (since 2.2) 3098# 3099# @l2-cache-entry-size: the size of each entry in the L2 cache in 3100# bytes. It must be a power of two between 512 3101# and the cluster size. The default value is 3102# the cluster size (since 2.12) 3103# 3104# @refcount-cache-size: the maximum size of the refcount block cache 3105# in bytes (since 2.2) 3106# 3107# @cache-clean-interval: clean unused entries in the L2 and refcount 3108# caches. The interval is in seconds. The default value 3109# is 600 on supporting platforms, and 0 on other 3110# platforms. 0 disables this feature. (since 2.5) 3111# 3112# @encrypt: Image decryption options. Mandatory for 3113# encrypted images, except when doing a metadata-only 3114# probe of the image. (since 2.10) 3115# 3116# @data-file: reference to or definition of the external data file. 3117# This may only be specified for images that require an 3118# external data file. If it is not specified for such 3119# an image, the data file name is loaded from the image 3120# file. (since 4.0) 3121# 3122# Since: 2.9 3123## 3124{ 'struct': 'BlockdevOptionsQcow2', 3125 'base': 'BlockdevOptionsGenericCOWFormat', 3126 'data': { '*lazy-refcounts': 'bool', 3127 '*pass-discard-request': 'bool', 3128 '*pass-discard-snapshot': 'bool', 3129 '*pass-discard-other': 'bool', 3130 '*overlap-check': 'Qcow2OverlapChecks', 3131 '*cache-size': 'int', 3132 '*l2-cache-size': 'int', 3133 '*l2-cache-entry-size': 'int', 3134 '*refcount-cache-size': 'int', 3135 '*cache-clean-interval': 'int', 3136 '*encrypt': 'BlockdevQcow2Encryption', 3137 '*data-file': 'BlockdevRef' } } 3138 3139## 3140# @SshHostKeyCheckMode: 3141# 3142# @none Don't check the host key at all 3143# @hash Compare the host key with a given hash 3144# @known_hosts Check the host key against the known_hosts file 3145# 3146# Since: 2.12 3147## 3148{ 'enum': 'SshHostKeyCheckMode', 3149 'data': [ 'none', 'hash', 'known_hosts' ] } 3150 3151## 3152# @SshHostKeyCheckHashType: 3153# 3154# @md5 The given hash is an md5 hash 3155# @sha1 The given hash is an sha1 hash 3156# 3157# Since: 2.12 3158## 3159{ 'enum': 'SshHostKeyCheckHashType', 3160 'data': [ 'md5', 'sha1' ] } 3161 3162## 3163# @SshHostKeyHash: 3164# 3165# @type The hash algorithm used for the hash 3166# @hash The expected hash value 3167# 3168# Since: 2.12 3169## 3170{ 'struct': 'SshHostKeyHash', 3171 'data': { 'type': 'SshHostKeyCheckHashType', 3172 'hash': 'str' }} 3173 3174## 3175# @SshHostKeyCheck: 3176# 3177# Since: 2.12 3178## 3179{ 'union': 'SshHostKeyCheck', 3180 'base': { 'mode': 'SshHostKeyCheckMode' }, 3181 'discriminator': 'mode', 3182 'data': { 'hash': 'SshHostKeyHash' } } 3183 3184## 3185# @BlockdevOptionsSsh: 3186# 3187# @server: host address 3188# 3189# @path: path to the image on the host 3190# 3191# @user: user as which to connect, defaults to current 3192# local user name 3193# 3194# @host-key-check: Defines how and what to check the host key against 3195# (default: known_hosts) 3196# 3197# Since: 2.9 3198## 3199{ 'struct': 'BlockdevOptionsSsh', 3200 'data': { 'server': 'InetSocketAddress', 3201 'path': 'str', 3202 '*user': 'str', 3203 '*host-key-check': 'SshHostKeyCheck' } } 3204 3205 3206## 3207# @BlkdebugEvent: 3208# 3209# Trigger events supported by blkdebug. 3210# 3211# @l1_shrink_write_table: write zeros to the l1 table to shrink image. 3212# (since 2.11) 3213# 3214# @l1_shrink_free_l2_clusters: discard the l2 tables. (since 2.11) 3215# 3216# @cor_write: a write due to copy-on-read (since 2.11) 3217# 3218# Since: 2.9 3219## 3220{ 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG', 3221 'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table', 3222 'l1_grow_activate_table', 'l2_load', 'l2_update', 3223 'l2_update_compressed', 'l2_alloc_cow_read', 'l2_alloc_write', 3224 'read_aio', 'read_backing_aio', 'read_compressed', 'write_aio', 3225 'write_compressed', 'vmstate_load', 'vmstate_save', 'cow_read', 3226 'cow_write', 'reftable_load', 'reftable_grow', 'reftable_update', 3227 'refblock_load', 'refblock_update', 'refblock_update_part', 3228 'refblock_alloc', 'refblock_alloc_hookup', 'refblock_alloc_write', 3229 'refblock_alloc_write_blocks', 'refblock_alloc_write_table', 3230 'refblock_alloc_switch_table', 'cluster_alloc', 3231 'cluster_alloc_bytes', 'cluster_free', 'flush_to_os', 3232 'flush_to_disk', 'pwritev_rmw_head', 'pwritev_rmw_after_head', 3233 'pwritev_rmw_tail', 'pwritev_rmw_after_tail', 'pwritev', 3234 'pwritev_zero', 'pwritev_done', 'empty_image_prepare', 3235 'l1_shrink_write_table', 'l1_shrink_free_l2_clusters', 3236 'cor_write'] } 3237 3238## 3239# @BlkdebugInjectErrorOptions: 3240# 3241# Describes a single error injection for blkdebug. 3242# 3243# @event: trigger event 3244# 3245# @state: the state identifier blkdebug needs to be in to 3246# actually trigger the event; defaults to "any" 3247# 3248# @errno: error identifier (errno) to be returned; defaults to 3249# EIO 3250# 3251# @sector: specifies the sector index which has to be affected 3252# in order to actually trigger the event; defaults to "any 3253# sector" 3254# 3255# @once: disables further events after this one has been 3256# triggered; defaults to false 3257# 3258# @immediately: fail immediately; defaults to false 3259# 3260# Since: 2.9 3261## 3262{ 'struct': 'BlkdebugInjectErrorOptions', 3263 'data': { 'event': 'BlkdebugEvent', 3264 '*state': 'int', 3265 '*errno': 'int', 3266 '*sector': 'int', 3267 '*once': 'bool', 3268 '*immediately': 'bool' } } 3269 3270## 3271# @BlkdebugSetStateOptions: 3272# 3273# Describes a single state-change event for blkdebug. 3274# 3275# @event: trigger event 3276# 3277# @state: the current state identifier blkdebug needs to be in; 3278# defaults to "any" 3279# 3280# @new_state: the state identifier blkdebug is supposed to assume if 3281# this event is triggered 3282# 3283# Since: 2.9 3284## 3285{ 'struct': 'BlkdebugSetStateOptions', 3286 'data': { 'event': 'BlkdebugEvent', 3287 '*state': 'int', 3288 'new_state': 'int' } } 3289 3290## 3291# @BlockdevOptionsBlkdebug: 3292# 3293# Driver specific block device options for blkdebug. 3294# 3295# @image: underlying raw block device (or image file) 3296# 3297# @config: filename of the configuration file 3298# 3299# @align: required alignment for requests in bytes, must be 3300# positive power of 2, or 0 for default 3301# 3302# @max-transfer: maximum size for I/O transfers in bytes, must be 3303# positive multiple of @align and of the underlying 3304# file's request alignment (but need not be a power of 3305# 2), or 0 for default (since 2.10) 3306# 3307# @opt-write-zero: preferred alignment for write zero requests in bytes, 3308# must be positive multiple of @align and of the 3309# underlying file's request alignment (but need not be a 3310# power of 2), or 0 for default (since 2.10) 3311# 3312# @max-write-zero: maximum size for write zero requests in bytes, must be 3313# positive multiple of @align, of @opt-write-zero, and of 3314# the underlying file's request alignment (but need not 3315# be a power of 2), or 0 for default (since 2.10) 3316# 3317# @opt-discard: preferred alignment for discard requests in bytes, must 3318# be positive multiple of @align and of the underlying 3319# file's request alignment (but need not be a power of 3320# 2), or 0 for default (since 2.10) 3321# 3322# @max-discard: maximum size for discard requests in bytes, must be 3323# positive multiple of @align, of @opt-discard, and of 3324# the underlying file's request alignment (but need not 3325# be a power of 2), or 0 for default (since 2.10) 3326# 3327# @inject-error: array of error injection descriptions 3328# 3329# @set-state: array of state-change descriptions 3330# 3331# Since: 2.9 3332## 3333{ 'struct': 'BlockdevOptionsBlkdebug', 3334 'data': { 'image': 'BlockdevRef', 3335 '*config': 'str', 3336 '*align': 'int', '*max-transfer': 'int32', 3337 '*opt-write-zero': 'int32', '*max-write-zero': 'int32', 3338 '*opt-discard': 'int32', '*max-discard': 'int32', 3339 '*inject-error': ['BlkdebugInjectErrorOptions'], 3340 '*set-state': ['BlkdebugSetStateOptions'] } } 3341 3342## 3343# @BlockdevOptionsBlklogwrites: 3344# 3345# Driver specific block device options for blklogwrites. 3346# 3347# @file: block device 3348# 3349# @log: block device used to log writes to @file 3350# 3351# @log-sector-size: sector size used in logging writes to @file, determines 3352# granularity of offsets and sizes of writes (default: 512) 3353# 3354# @log-append: append to an existing log (default: false) 3355# 3356# @log-super-update-interval: interval of write requests after which the log 3357# super block is updated to disk (default: 4096) 3358# 3359# Since: 3.0 3360## 3361{ 'struct': 'BlockdevOptionsBlklogwrites', 3362 'data': { 'file': 'BlockdevRef', 3363 'log': 'BlockdevRef', 3364 '*log-sector-size': 'uint32', 3365 '*log-append': 'bool', 3366 '*log-super-update-interval': 'uint64' } } 3367 3368## 3369# @BlockdevOptionsBlkverify: 3370# 3371# Driver specific block device options for blkverify. 3372# 3373# @test: block device to be tested 3374# 3375# @raw: raw image used for verification 3376# 3377# Since: 2.9 3378## 3379{ 'struct': 'BlockdevOptionsBlkverify', 3380 'data': { 'test': 'BlockdevRef', 3381 'raw': 'BlockdevRef' } } 3382 3383## 3384# @QuorumReadPattern: 3385# 3386# An enumeration of quorum read patterns. 3387# 3388# @quorum: read all the children and do a quorum vote on reads 3389# 3390# @fifo: read only from the first child that has not failed 3391# 3392# Since: 2.9 3393## 3394{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] } 3395 3396## 3397# @BlockdevOptionsQuorum: 3398# 3399# Driver specific block device options for Quorum 3400# 3401# @blkverify: true if the driver must print content mismatch 3402# set to false by default 3403# 3404# @children: the children block devices to use 3405# 3406# @vote-threshold: the vote limit under which a read will fail 3407# 3408# @rewrite-corrupted: rewrite corrupted data when quorum is reached 3409# (Since 2.1) 3410# 3411# @read-pattern: choose read pattern and set to quorum by default 3412# (Since 2.2) 3413# 3414# Since: 2.9 3415## 3416{ 'struct': 'BlockdevOptionsQuorum', 3417 'data': { '*blkverify': 'bool', 3418 'children': [ 'BlockdevRef' ], 3419 'vote-threshold': 'int', 3420 '*rewrite-corrupted': 'bool', 3421 '*read-pattern': 'QuorumReadPattern' } } 3422 3423## 3424# @BlockdevOptionsGluster: 3425# 3426# Driver specific block device options for Gluster 3427# 3428# @volume: name of gluster volume where VM image resides 3429# 3430# @path: absolute path to image file in gluster volume 3431# 3432# @server: gluster servers description 3433# 3434# @debug: libgfapi log level (default '4' which is Error) 3435# (Since 2.8) 3436# 3437# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8) 3438# 3439# Since: 2.9 3440## 3441{ 'struct': 'BlockdevOptionsGluster', 3442 'data': { 'volume': 'str', 3443 'path': 'str', 3444 'server': ['SocketAddress'], 3445 '*debug': 'int', 3446 '*logfile': 'str' } } 3447 3448## 3449# @IscsiTransport: 3450# 3451# An enumeration of libiscsi transport types 3452# 3453# Since: 2.9 3454## 3455{ 'enum': 'IscsiTransport', 3456 'data': [ 'tcp', 'iser' ] } 3457 3458## 3459# @IscsiHeaderDigest: 3460# 3461# An enumeration of header digests supported by libiscsi 3462# 3463# Since: 2.9 3464## 3465{ 'enum': 'IscsiHeaderDigest', 3466 'prefix': 'QAPI_ISCSI_HEADER_DIGEST', 3467 'data': [ 'crc32c', 'none', 'crc32c-none', 'none-crc32c' ] } 3468 3469## 3470# @BlockdevOptionsIscsi: 3471# 3472# @transport: The iscsi transport type 3473# 3474# @portal: The address of the iscsi portal 3475# 3476# @target: The target iqn name 3477# 3478# @lun: LUN to connect to. Defaults to 0. 3479# 3480# @user: User name to log in with. If omitted, no CHAP 3481# authentication is performed. 3482# 3483# @password-secret: The ID of a QCryptoSecret object providing 3484# the password for the login. This option is required if 3485# @user is specified. 3486# 3487# @initiator-name: The iqn name we want to identify to the target 3488# as. If this option is not specified, an initiator name is 3489# generated automatically. 3490# 3491# @header-digest: The desired header digest. Defaults to 3492# none-crc32c. 3493# 3494# @timeout: Timeout in seconds after which a request will 3495# timeout. 0 means no timeout and is the default. 3496# 3497# Driver specific block device options for iscsi 3498# 3499# Since: 2.9 3500## 3501{ 'struct': 'BlockdevOptionsIscsi', 3502 'data': { 'transport': 'IscsiTransport', 3503 'portal': 'str', 3504 'target': 'str', 3505 '*lun': 'int', 3506 '*user': 'str', 3507 '*password-secret': 'str', 3508 '*initiator-name': 'str', 3509 '*header-digest': 'IscsiHeaderDigest', 3510 '*timeout': 'int' } } 3511 3512 3513## 3514# @RbdAuthMode: 3515# 3516# Since: 3.0 3517## 3518{ 'enum': 'RbdAuthMode', 3519 'data': [ 'cephx', 'none' ] } 3520 3521## 3522# @BlockdevOptionsRbd: 3523# 3524# @pool: Ceph pool name. 3525# 3526# @image: Image name in the Ceph pool. 3527# 3528# @conf: path to Ceph configuration file. Values 3529# in the configuration file will be overridden by 3530# options specified via QAPI. 3531# 3532# @snapshot: Ceph snapshot name. 3533# 3534# @user: Ceph id name. 3535# 3536# @auth-client-required: Acceptable authentication modes. 3537# This maps to Ceph configuration option 3538# "auth_client_required". (Since 3.0) 3539# 3540# @key-secret: ID of a QCryptoSecret object providing a key 3541# for cephx authentication. 3542# This maps to Ceph configuration option 3543# "key". (Since 3.0) 3544# 3545# @server: Monitor host address and port. This maps 3546# to the "mon_host" Ceph option. 3547# 3548# Since: 2.9 3549## 3550{ 'struct': 'BlockdevOptionsRbd', 3551 'data': { 'pool': 'str', 3552 'image': 'str', 3553 '*conf': 'str', 3554 '*snapshot': 'str', 3555 '*user': 'str', 3556 '*auth-client-required': ['RbdAuthMode'], 3557 '*key-secret': 'str', 3558 '*server': ['InetSocketAddressBase'] } } 3559 3560## 3561# @BlockdevOptionsSheepdog: 3562# 3563# Driver specific block device options for sheepdog 3564# 3565# @vdi: Virtual disk image name 3566# @server: The Sheepdog server to connect to 3567# @snap-id: Snapshot ID 3568# @tag: Snapshot tag name 3569# 3570# Only one of @snap-id and @tag may be present. 3571# 3572# Since: 2.9 3573## 3574{ 'struct': 'BlockdevOptionsSheepdog', 3575 'data': { 'server': 'SocketAddress', 3576 'vdi': 'str', 3577 '*snap-id': 'uint32', 3578 '*tag': 'str' } } 3579 3580## 3581# @ReplicationMode: 3582# 3583# An enumeration of replication modes. 3584# 3585# @primary: Primary mode, the vm's state will be sent to secondary QEMU. 3586# 3587# @secondary: Secondary mode, receive the vm's state from primary QEMU. 3588# 3589# Since: 2.9 3590## 3591{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ], 3592 'if': 'defined(CONFIG_REPLICATION)' } 3593 3594## 3595# @BlockdevOptionsReplication: 3596# 3597# Driver specific block device options for replication 3598# 3599# @mode: the replication mode 3600# 3601# @top-id: In secondary mode, node name or device ID of the root 3602# node who owns the replication node chain. Must not be given in 3603# primary mode. 3604# 3605# Since: 2.9 3606## 3607{ 'struct': 'BlockdevOptionsReplication', 3608 'base': 'BlockdevOptionsGenericFormat', 3609 'data': { 'mode': 'ReplicationMode', 3610 '*top-id': 'str' }, 3611 'if': 'defined(CONFIG_REPLICATION)' } 3612 3613## 3614# @NFSTransport: 3615# 3616# An enumeration of NFS transport types 3617# 3618# @inet: TCP transport 3619# 3620# Since: 2.9 3621## 3622{ 'enum': 'NFSTransport', 3623 'data': [ 'inet' ] } 3624 3625## 3626# @NFSServer: 3627# 3628# Captures the address of the socket 3629# 3630# @type: transport type used for NFS (only TCP supported) 3631# 3632# @host: host address for NFS server 3633# 3634# Since: 2.9 3635## 3636{ 'struct': 'NFSServer', 3637 'data': { 'type': 'NFSTransport', 3638 'host': 'str' } } 3639 3640## 3641# @BlockdevOptionsNfs: 3642# 3643# Driver specific block device option for NFS 3644# 3645# @server: host address 3646# 3647# @path: path of the image on the host 3648# 3649# @user: UID value to use when talking to the 3650# server (defaults to 65534 on Windows and getuid() 3651# on unix) 3652# 3653# @group: GID value to use when talking to the 3654# server (defaults to 65534 on Windows and getgid() 3655# in unix) 3656# 3657# @tcp-syn-count: number of SYNs during the session 3658# establishment (defaults to libnfs default) 3659# 3660# @readahead-size: set the readahead size in bytes (defaults 3661# to libnfs default) 3662# 3663# @page-cache-size: set the pagecache size in bytes (defaults 3664# to libnfs default) 3665# 3666# @debug: set the NFS debug level (max 2) (defaults 3667# to libnfs default) 3668# 3669# Since: 2.9 3670## 3671{ 'struct': 'BlockdevOptionsNfs', 3672 'data': { 'server': 'NFSServer', 3673 'path': 'str', 3674 '*user': 'int', 3675 '*group': 'int', 3676 '*tcp-syn-count': 'int', 3677 '*readahead-size': 'int', 3678 '*page-cache-size': 'int', 3679 '*debug': 'int' } } 3680 3681## 3682# @BlockdevOptionsCurlBase: 3683# 3684# Driver specific block device options shared by all protocols supported by the 3685# curl backend. 3686# 3687# @url: URL of the image file 3688# 3689# @readahead: Size of the read-ahead cache; must be a multiple of 3690# 512 (defaults to 256 kB) 3691# 3692# @timeout: Timeout for connections, in seconds (defaults to 5) 3693# 3694# @username: Username for authentication (defaults to none) 3695# 3696# @password-secret: ID of a QCryptoSecret object providing a password 3697# for authentication (defaults to no password) 3698# 3699# @proxy-username: Username for proxy authentication (defaults to none) 3700# 3701# @proxy-password-secret: ID of a QCryptoSecret object providing a password 3702# for proxy authentication (defaults to no password) 3703# 3704# Since: 2.9 3705## 3706{ 'struct': 'BlockdevOptionsCurlBase', 3707 'data': { 'url': 'str', 3708 '*readahead': 'int', 3709 '*timeout': 'int', 3710 '*username': 'str', 3711 '*password-secret': 'str', 3712 '*proxy-username': 'str', 3713 '*proxy-password-secret': 'str' } } 3714 3715## 3716# @BlockdevOptionsCurlHttp: 3717# 3718# Driver specific block device options for HTTP connections over the curl 3719# backend. URLs must start with "http://". 3720# 3721# @cookie: List of cookies to set; format is 3722# "name1=content1; name2=content2;" as explained by 3723# CURLOPT_COOKIE(3). Defaults to no cookies. 3724# 3725# @cookie-secret: ID of a QCryptoSecret object providing the cookie data in a 3726# secure way. See @cookie for the format. (since 2.10) 3727# 3728# Since: 2.9 3729## 3730{ 'struct': 'BlockdevOptionsCurlHttp', 3731 'base': 'BlockdevOptionsCurlBase', 3732 'data': { '*cookie': 'str', 3733 '*cookie-secret': 'str'} } 3734 3735## 3736# @BlockdevOptionsCurlHttps: 3737# 3738# Driver specific block device options for HTTPS connections over the curl 3739# backend. URLs must start with "https://". 3740# 3741# @cookie: List of cookies to set; format is 3742# "name1=content1; name2=content2;" as explained by 3743# CURLOPT_COOKIE(3). Defaults to no cookies. 3744# 3745# @sslverify: Whether to verify the SSL certificate's validity (defaults to 3746# true) 3747# 3748# @cookie-secret: ID of a QCryptoSecret object providing the cookie data in a 3749# secure way. See @cookie for the format. (since 2.10) 3750# 3751# Since: 2.9 3752## 3753{ 'struct': 'BlockdevOptionsCurlHttps', 3754 'base': 'BlockdevOptionsCurlBase', 3755 'data': { '*cookie': 'str', 3756 '*sslverify': 'bool', 3757 '*cookie-secret': 'str'} } 3758 3759## 3760# @BlockdevOptionsCurlFtp: 3761# 3762# Driver specific block device options for FTP connections over the curl 3763# backend. URLs must start with "ftp://". 3764# 3765# Since: 2.9 3766## 3767{ 'struct': 'BlockdevOptionsCurlFtp', 3768 'base': 'BlockdevOptionsCurlBase', 3769 'data': { } } 3770 3771## 3772# @BlockdevOptionsCurlFtps: 3773# 3774# Driver specific block device options for FTPS connections over the curl 3775# backend. URLs must start with "ftps://". 3776# 3777# @sslverify: Whether to verify the SSL certificate's validity (defaults to 3778# true) 3779# 3780# Since: 2.9 3781## 3782{ 'struct': 'BlockdevOptionsCurlFtps', 3783 'base': 'BlockdevOptionsCurlBase', 3784 'data': { '*sslverify': 'bool' } } 3785 3786## 3787# @BlockdevOptionsNbd: 3788# 3789# Driver specific block device options for NBD. 3790# 3791# @server: NBD server address 3792# 3793# @export: export name 3794# 3795# @tls-creds: TLS credentials ID 3796# 3797# @x-dirty-bitmap: A "qemu:dirty-bitmap:NAME" string to query in place of 3798# traditional "base:allocation" block status (see 3799# NBD_OPT_LIST_META_CONTEXT in the NBD protocol) (since 3.0) 3800# 3801# Since: 2.9 3802## 3803{ 'struct': 'BlockdevOptionsNbd', 3804 'data': { 'server': 'SocketAddress', 3805 '*export': 'str', 3806 '*tls-creds': 'str', 3807 '*x-dirty-bitmap': 'str' } } 3808 3809## 3810# @BlockdevOptionsRaw: 3811# 3812# Driver specific block device options for the raw driver. 3813# 3814# @offset: position where the block device starts 3815# @size: the assumed size of the device 3816# 3817# Since: 2.9 3818## 3819{ 'struct': 'BlockdevOptionsRaw', 3820 'base': 'BlockdevOptionsGenericFormat', 3821 'data': { '*offset': 'int', '*size': 'int' } } 3822 3823## 3824# @BlockdevOptionsVxHS: 3825# 3826# Driver specific block device options for VxHS 3827# 3828# @vdisk-id: UUID of VxHS volume 3829# @server: vxhs server IP, port 3830# @tls-creds: TLS credentials ID 3831# 3832# Since: 2.10 3833## 3834{ 'struct': 'BlockdevOptionsVxHS', 3835 'data': { 'vdisk-id': 'str', 3836 'server': 'InetSocketAddressBase', 3837 '*tls-creds': 'str' } } 3838 3839## 3840# @BlockdevOptionsThrottle: 3841# 3842# Driver specific block device options for the throttle driver 3843# 3844# @throttle-group: the name of the throttle-group object to use. It 3845# must already exist. 3846# @file: reference to or definition of the data source block device 3847# Since: 2.11 3848## 3849{ 'struct': 'BlockdevOptionsThrottle', 3850 'data': { 'throttle-group': 'str', 3851 'file' : 'BlockdevRef' 3852 } } 3853## 3854# @BlockdevOptions: 3855# 3856# Options for creating a block device. Many options are available for all 3857# block devices, independent of the block driver: 3858# 3859# @driver: block driver name 3860# @node-name: the node name of the new node (Since 2.0). 3861# This option is required on the top level of blockdev-add. 3862# Valid node names start with an alphabetic character and may 3863# contain only alphanumeric characters, '-', '.' and '_'. Their 3864# maximum length is 31 characters. 3865# @discard: discard-related options (default: ignore) 3866# @cache: cache-related options 3867# @read-only: whether the block device should be read-only (default: false). 3868# Note that some block drivers support only read-only access, 3869# either generally or in certain configurations. In this case, 3870# the default value does not work and the option must be 3871# specified explicitly. 3872# @auto-read-only: if true and @read-only is false, QEMU may automatically 3873# decide not to open the image read-write as requested, but 3874# fall back to read-only instead (and switch between the modes 3875# later), e.g. depending on whether the image file is writable 3876# or whether a writing user is attached to the node 3877# (default: false, since 3.1) 3878# @detect-zeroes: detect and optimize zero writes (Since 2.1) 3879# (default: off) 3880# @force-share: force share all permission on added nodes. 3881# Requires read-only=true. (Since 2.10) 3882# 3883# Remaining options are determined by the block driver. 3884# 3885# Since: 2.9 3886## 3887{ 'union': 'BlockdevOptions', 3888 'base': { 'driver': 'BlockdevDriver', 3889 '*node-name': 'str', 3890 '*discard': 'BlockdevDiscardOptions', 3891 '*cache': 'BlockdevCacheOptions', 3892 '*read-only': 'bool', 3893 '*auto-read-only': 'bool', 3894 '*force-share': 'bool', 3895 '*detect-zeroes': 'BlockdevDetectZeroesOptions' }, 3896 'discriminator': 'driver', 3897 'data': { 3898 'blkdebug': 'BlockdevOptionsBlkdebug', 3899 'blklogwrites':'BlockdevOptionsBlklogwrites', 3900 'blkverify': 'BlockdevOptionsBlkverify', 3901 'bochs': 'BlockdevOptionsGenericFormat', 3902 'cloop': 'BlockdevOptionsGenericFormat', 3903 'copy-on-read':'BlockdevOptionsGenericFormat', 3904 'dmg': 'BlockdevOptionsGenericFormat', 3905 'file': 'BlockdevOptionsFile', 3906 'ftp': 'BlockdevOptionsCurlFtp', 3907 'ftps': 'BlockdevOptionsCurlFtps', 3908 'gluster': 'BlockdevOptionsGluster', 3909 'host_cdrom': 'BlockdevOptionsFile', 3910 'host_device':'BlockdevOptionsFile', 3911 'http': 'BlockdevOptionsCurlHttp', 3912 'https': 'BlockdevOptionsCurlHttps', 3913 'iscsi': 'BlockdevOptionsIscsi', 3914 'luks': 'BlockdevOptionsLUKS', 3915 'nbd': 'BlockdevOptionsNbd', 3916 'nfs': 'BlockdevOptionsNfs', 3917 'null-aio': 'BlockdevOptionsNull', 3918 'null-co': 'BlockdevOptionsNull', 3919 'nvme': 'BlockdevOptionsNVMe', 3920 'parallels': 'BlockdevOptionsGenericFormat', 3921 'qcow2': 'BlockdevOptionsQcow2', 3922 'qcow': 'BlockdevOptionsQcow', 3923 'qed': 'BlockdevOptionsGenericCOWFormat', 3924 'quorum': 'BlockdevOptionsQuorum', 3925 'raw': 'BlockdevOptionsRaw', 3926 'rbd': 'BlockdevOptionsRbd', 3927 'replication': { 'type': 'BlockdevOptionsReplication', 3928 'if': 'defined(CONFIG_REPLICATION)' }, 3929 'sheepdog': 'BlockdevOptionsSheepdog', 3930 'ssh': 'BlockdevOptionsSsh', 3931 'throttle': 'BlockdevOptionsThrottle', 3932 'vdi': 'BlockdevOptionsGenericFormat', 3933 'vhdx': 'BlockdevOptionsGenericFormat', 3934 'vmdk': 'BlockdevOptionsGenericCOWFormat', 3935 'vpc': 'BlockdevOptionsGenericFormat', 3936 'vvfat': 'BlockdevOptionsVVFAT', 3937 'vxhs': 'BlockdevOptionsVxHS' 3938 } } 3939 3940## 3941# @BlockdevRef: 3942# 3943# Reference to a block device. 3944# 3945# @definition: defines a new block device inline 3946# @reference: references the ID of an existing block device 3947# 3948# Since: 2.9 3949## 3950{ 'alternate': 'BlockdevRef', 3951 'data': { 'definition': 'BlockdevOptions', 3952 'reference': 'str' } } 3953 3954## 3955# @BlockdevRefOrNull: 3956# 3957# Reference to a block device. 3958# 3959# @definition: defines a new block device inline 3960# @reference: references the ID of an existing block device. 3961# An empty string means that no block device should 3962# be referenced. Deprecated; use null instead. 3963# @null: No block device should be referenced (since 2.10) 3964# 3965# Since: 2.9 3966## 3967{ 'alternate': 'BlockdevRefOrNull', 3968 'data': { 'definition': 'BlockdevOptions', 3969 'reference': 'str', 3970 'null': 'null' } } 3971 3972## 3973# @blockdev-add: 3974# 3975# Creates a new block device. If the @id option is given at the top level, a 3976# BlockBackend will be created; otherwise, @node-name is mandatory at the top 3977# level and no BlockBackend will be created. 3978# 3979# Since: 2.9 3980# 3981# Example: 3982# 3983# 1. 3984# -> { "execute": "blockdev-add", 3985# "arguments": { 3986# "driver": "qcow2", 3987# "node-name": "test1", 3988# "file": { 3989# "driver": "file", 3990# "filename": "test.qcow2" 3991# } 3992# } 3993# } 3994# <- { "return": {} } 3995# 3996# 2. 3997# -> { "execute": "blockdev-add", 3998# "arguments": { 3999# "driver": "qcow2", 4000# "node-name": "node0", 4001# "discard": "unmap", 4002# "cache": { 4003# "direct": true 4004# }, 4005# "file": { 4006# "driver": "file", 4007# "filename": "/tmp/test.qcow2" 4008# }, 4009# "backing": { 4010# "driver": "raw", 4011# "file": { 4012# "driver": "file", 4013# "filename": "/dev/fdset/4" 4014# } 4015# } 4016# } 4017# } 4018# 4019# <- { "return": {} } 4020# 4021## 4022{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true } 4023 4024## 4025# @x-blockdev-reopen: 4026# 4027# Reopens a block device using the given set of options. Any option 4028# not specified will be reset to its default value regardless of its 4029# previous status. If an option cannot be changed or a particular 4030# driver does not support reopening then the command will return an 4031# error. 4032# 4033# The top-level @node-name option (from BlockdevOptions) must be 4034# specified and is used to select the block device to be reopened. 4035# Other @node-name options must be either omitted or set to the 4036# current name of the appropriate node. This command won't change any 4037# node name and any attempt to do it will result in an error. 4038# 4039# In the case of options that refer to child nodes, the behavior of 4040# this command depends on the value: 4041# 4042# 1) A set of options (BlockdevOptions): the child is reopened with 4043# the specified set of options. 4044# 4045# 2) A reference to the current child: the child is reopened using 4046# its existing set of options. 4047# 4048# 3) A reference to a different node: the current child is replaced 4049# with the specified one. 4050# 4051# 4) NULL: the current child (if any) is detached. 4052# 4053# Options (1) and (2) are supported in all cases, but at the moment 4054# only @backing allows replacing or detaching an existing child. 4055# 4056# Unlike with blockdev-add, the @backing option must always be present 4057# unless the node being reopened does not have a backing file and its 4058# image does not have a default backing file name as part of its 4059# metadata. 4060# 4061# Since: 4.0 4062## 4063{ 'command': 'x-blockdev-reopen', 4064 'data': 'BlockdevOptions', 'boxed': true } 4065 4066## 4067# @blockdev-del: 4068# 4069# Deletes a block device that has been added using blockdev-add. 4070# The command will fail if the node is attached to a device or is 4071# otherwise being used. 4072# 4073# @node-name: Name of the graph node to delete. 4074# 4075# Since: 2.9 4076# 4077# Example: 4078# 4079# -> { "execute": "blockdev-add", 4080# "arguments": { 4081# "driver": "qcow2", 4082# "node-name": "node0", 4083# "file": { 4084# "driver": "file", 4085# "filename": "test.qcow2" 4086# } 4087# } 4088# } 4089# <- { "return": {} } 4090# 4091# -> { "execute": "blockdev-del", 4092# "arguments": { "node-name": "node0" } 4093# } 4094# <- { "return": {} } 4095# 4096## 4097{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' } } 4098 4099## 4100# @BlockdevCreateOptionsFile: 4101# 4102# Driver specific image creation options for file. 4103# 4104# @filename Filename for the new image file 4105# @size Size of the virtual disk in bytes 4106# @preallocation Preallocation mode for the new image (default: off) 4107# @nocow Turn off copy-on-write (valid only on btrfs; default: off) 4108# 4109# Since: 2.12 4110## 4111{ 'struct': 'BlockdevCreateOptionsFile', 4112 'data': { 'filename': 'str', 4113 'size': 'size', 4114 '*preallocation': 'PreallocMode', 4115 '*nocow': 'bool' } } 4116 4117## 4118# @BlockdevCreateOptionsGluster: 4119# 4120# Driver specific image creation options for gluster. 4121# 4122# @location Where to store the new image file 4123# @size Size of the virtual disk in bytes 4124# @preallocation Preallocation mode for the new image (default: off) 4125# 4126# Since: 2.12 4127## 4128{ 'struct': 'BlockdevCreateOptionsGluster', 4129 'data': { 'location': 'BlockdevOptionsGluster', 4130 'size': 'size', 4131 '*preallocation': 'PreallocMode' } } 4132 4133## 4134# @BlockdevCreateOptionsLUKS: 4135# 4136# Driver specific image creation options for LUKS. 4137# 4138# @file Node to create the image format on 4139# @size Size of the virtual disk in bytes 4140# 4141# Since: 2.12 4142## 4143{ 'struct': 'BlockdevCreateOptionsLUKS', 4144 'base': 'QCryptoBlockCreateOptionsLUKS', 4145 'data': { 'file': 'BlockdevRef', 4146 'size': 'size' } } 4147 4148## 4149# @BlockdevCreateOptionsNfs: 4150# 4151# Driver specific image creation options for NFS. 4152# 4153# @location Where to store the new image file 4154# @size Size of the virtual disk in bytes 4155# 4156# Since: 2.12 4157## 4158{ 'struct': 'BlockdevCreateOptionsNfs', 4159 'data': { 'location': 'BlockdevOptionsNfs', 4160 'size': 'size' } } 4161 4162## 4163# @BlockdevCreateOptionsParallels: 4164# 4165# Driver specific image creation options for parallels. 4166# 4167# @file Node to create the image format on 4168# @size Size of the virtual disk in bytes 4169# @cluster-size Cluster size in bytes (default: 1 MB) 4170# 4171# Since: 2.12 4172## 4173{ 'struct': 'BlockdevCreateOptionsParallels', 4174 'data': { 'file': 'BlockdevRef', 4175 'size': 'size', 4176 '*cluster-size': 'size' } } 4177 4178## 4179# @BlockdevCreateOptionsQcow: 4180# 4181# Driver specific image creation options for qcow. 4182# 4183# @file Node to create the image format on 4184# @size Size of the virtual disk in bytes 4185# @backing-file File name of the backing file if a backing file 4186# should be used 4187# @encrypt Encryption options if the image should be encrypted 4188# 4189# Since: 2.12 4190## 4191{ 'struct': 'BlockdevCreateOptionsQcow', 4192 'data': { 'file': 'BlockdevRef', 4193 'size': 'size', 4194 '*backing-file': 'str', 4195 '*encrypt': 'QCryptoBlockCreateOptions' } } 4196 4197## 4198# @BlockdevQcow2Version: 4199# 4200# @v2: The original QCOW2 format as introduced in qemu 0.10 (version 2) 4201# @v3: The extended QCOW2 format as introduced in qemu 1.1 (version 3) 4202# 4203# Since: 2.12 4204## 4205{ 'enum': 'BlockdevQcow2Version', 4206 'data': [ 'v2', 'v3' ] } 4207 4208 4209## 4210# @BlockdevCreateOptionsQcow2: 4211# 4212# Driver specific image creation options for qcow2. 4213# 4214# @file Node to create the image format on 4215# @data-file Node to use as an external data file in which all guest 4216# data is stored so that only metadata remains in the qcow2 4217# file (since: 4.0) 4218# @data-file-raw True if the external data file must stay valid as a 4219# standalone (read-only) raw image without looking at qcow2 4220# metadata (default: false; since: 4.0) 4221# @size Size of the virtual disk in bytes 4222# @version Compatibility level (default: v3) 4223# @backing-file File name of the backing file if a backing file 4224# should be used 4225# @backing-fmt Name of the block driver to use for the backing file 4226# @encrypt Encryption options if the image should be encrypted 4227# @cluster-size qcow2 cluster size in bytes (default: 65536) 4228# @preallocation Preallocation mode for the new image (default: off) 4229# @lazy-refcounts True if refcounts may be updated lazily (default: off) 4230# @refcount-bits Width of reference counts in bits (default: 16) 4231# 4232# Since: 2.12 4233## 4234{ 'struct': 'BlockdevCreateOptionsQcow2', 4235 'data': { 'file': 'BlockdevRef', 4236 '*data-file': 'BlockdevRef', 4237 '*data-file-raw': 'bool', 4238 'size': 'size', 4239 '*version': 'BlockdevQcow2Version', 4240 '*backing-file': 'str', 4241 '*backing-fmt': 'BlockdevDriver', 4242 '*encrypt': 'QCryptoBlockCreateOptions', 4243 '*cluster-size': 'size', 4244 '*preallocation': 'PreallocMode', 4245 '*lazy-refcounts': 'bool', 4246 '*refcount-bits': 'int' } } 4247 4248## 4249# @BlockdevCreateOptionsQed: 4250# 4251# Driver specific image creation options for qed. 4252# 4253# @file Node to create the image format on 4254# @size Size of the virtual disk in bytes 4255# @backing-file File name of the backing file if a backing file 4256# should be used 4257# @backing-fmt Name of the block driver to use for the backing file 4258# @cluster-size Cluster size in bytes (default: 65536) 4259# @table-size L1/L2 table size (in clusters) 4260# 4261# Since: 2.12 4262## 4263{ 'struct': 'BlockdevCreateOptionsQed', 4264 'data': { 'file': 'BlockdevRef', 4265 'size': 'size', 4266 '*backing-file': 'str', 4267 '*backing-fmt': 'BlockdevDriver', 4268 '*cluster-size': 'size', 4269 '*table-size': 'int' } } 4270 4271## 4272# @BlockdevCreateOptionsRbd: 4273# 4274# Driver specific image creation options for rbd/Ceph. 4275# 4276# @location Where to store the new image file. This location cannot 4277# point to a snapshot. 4278# @size Size of the virtual disk in bytes 4279# @cluster-size RBD object size 4280# 4281# Since: 2.12 4282## 4283{ 'struct': 'BlockdevCreateOptionsRbd', 4284 'data': { 'location': 'BlockdevOptionsRbd', 4285 'size': 'size', 4286 '*cluster-size' : 'size' } } 4287 4288## 4289# @BlockdevVmdkSubformat: 4290# 4291# Subformat options for VMDK images 4292# 4293# @monolithicSparse: Single file image with sparse cluster allocation 4294# 4295# @monolithicFlat: Single flat data image and a descriptor file 4296# 4297# @twoGbMaxExtentSparse: Data is split into 2GB (per virtual LBA) sparse extent 4298# files, in addition to a descriptor file 4299# 4300# @twoGbMaxExtentFlat: Data is split into 2GB (per virtual LBA) flat extent 4301# files, in addition to a descriptor file 4302# 4303# @streamOptimized: Single file image sparse cluster allocation, optimized 4304# for streaming over network. 4305# 4306# Since: 4.0 4307## 4308{ 'enum': 'BlockdevVmdkSubformat', 4309 'data': [ 'monolithicSparse', 'monolithicFlat', 'twoGbMaxExtentSparse', 4310 'twoGbMaxExtentFlat', 'streamOptimized'] } 4311 4312## 4313# @BlockdevVmdkAdapterType: 4314# 4315# Adapter type info for VMDK images 4316# 4317# Since: 4.0 4318## 4319{ 'enum': 'BlockdevVmdkAdapterType', 4320 'data': [ 'ide', 'buslogic', 'lsilogic', 'legacyESX'] } 4321 4322## 4323# @BlockdevCreateOptionsVmdk: 4324# 4325# Driver specific image creation options for VMDK. 4326# 4327# @file Where to store the new image file. This refers to the image 4328# file for monolithcSparse and streamOptimized format, or the 4329# descriptor file for other formats. 4330# @size Size of the virtual disk in bytes 4331# @extents Where to store the data extents. Required for monolithcFlat, 4332# twoGbMaxExtentSparse and twoGbMaxExtentFlat formats. For 4333# monolithicFlat, only one entry is required; for 4334# twoGbMaxExtent* formats, the number of entries required is 4335# calculated as extent_number = virtual_size / 2GB. Providing 4336# more extents than will be used is an error. 4337# @subformat The subformat of the VMDK image. Default: "monolithicSparse". 4338# @backing-file The path of backing file. Default: no backing file is used. 4339# @adapter-type The adapter type used to fill in the descriptor. Default: ide. 4340# @hwversion Hardware version. The meaningful options are "4" or "6". 4341# Default: "4". 4342# @zeroed-grain Whether to enable zeroed-grain feature for sparse subformats. 4343# Default: false. 4344# 4345# Since: 4.0 4346## 4347{ 'struct': 'BlockdevCreateOptionsVmdk', 4348 'data': { 'file': 'BlockdevRef', 4349 'size': 'size', 4350 '*extents': ['BlockdevRef'], 4351 '*subformat': 'BlockdevVmdkSubformat', 4352 '*backing-file': 'str', 4353 '*adapter-type': 'BlockdevVmdkAdapterType', 4354 '*hwversion': 'str', 4355 '*zeroed-grain': 'bool' } } 4356 4357 4358## 4359# @SheepdogRedundancyType: 4360# 4361# @full Create a fully replicated vdi with x copies 4362# @erasure-coded Create an erasure coded vdi with x data strips and 4363# y parity strips 4364# 4365# Since: 2.12 4366## 4367{ 'enum': 'SheepdogRedundancyType', 4368 'data': [ 'full', 'erasure-coded' ] } 4369 4370## 4371# @SheepdogRedundancyFull: 4372# 4373# @copies Number of copies to use (between 1 and 31) 4374# 4375# Since: 2.12 4376## 4377{ 'struct': 'SheepdogRedundancyFull', 4378 'data': { 'copies': 'int' }} 4379 4380## 4381# @SheepdogRedundancyErasureCoded: 4382# 4383# @data-strips Number of data strips to use (one of {2,4,8,16}) 4384# @parity-strips Number of parity strips to use (between 1 and 15) 4385# 4386# Since: 2.12 4387## 4388{ 'struct': 'SheepdogRedundancyErasureCoded', 4389 'data': { 'data-strips': 'int', 4390 'parity-strips': 'int' }} 4391 4392## 4393# @SheepdogRedundancy: 4394# 4395# Since: 2.12 4396## 4397{ 'union': 'SheepdogRedundancy', 4398 'base': { 'type': 'SheepdogRedundancyType' }, 4399 'discriminator': 'type', 4400 'data': { 'full': 'SheepdogRedundancyFull', 4401 'erasure-coded': 'SheepdogRedundancyErasureCoded' } } 4402 4403## 4404# @BlockdevCreateOptionsSheepdog: 4405# 4406# Driver specific image creation options for Sheepdog. 4407# 4408# @location Where to store the new image file 4409# @size Size of the virtual disk in bytes 4410# @backing-file File name of a base image 4411# @preallocation Preallocation mode (allowed values: off, full) 4412# @redundancy Redundancy of the image 4413# @object-size Object size of the image 4414# 4415# Since: 2.12 4416## 4417{ 'struct': 'BlockdevCreateOptionsSheepdog', 4418 'data': { 'location': 'BlockdevOptionsSheepdog', 4419 'size': 'size', 4420 '*backing-file': 'str', 4421 '*preallocation': 'PreallocMode', 4422 '*redundancy': 'SheepdogRedundancy', 4423 '*object-size': 'size' } } 4424 4425## 4426# @BlockdevCreateOptionsSsh: 4427# 4428# Driver specific image creation options for SSH. 4429# 4430# @location Where to store the new image file 4431# @size Size of the virtual disk in bytes 4432# 4433# Since: 2.12 4434## 4435{ 'struct': 'BlockdevCreateOptionsSsh', 4436 'data': { 'location': 'BlockdevOptionsSsh', 4437 'size': 'size' } } 4438 4439## 4440# @BlockdevCreateOptionsVdi: 4441# 4442# Driver specific image creation options for VDI. 4443# 4444# @file Node to create the image format on 4445# @size Size of the virtual disk in bytes 4446# @preallocation Preallocation mode for the new image (allowed values: off, 4447# metadata; default: off) 4448# 4449# Since: 2.12 4450## 4451{ 'struct': 'BlockdevCreateOptionsVdi', 4452 'data': { 'file': 'BlockdevRef', 4453 'size': 'size', 4454 '*preallocation': 'PreallocMode' } } 4455 4456## 4457# @BlockdevVhdxSubformat: 4458# 4459# @dynamic: Growing image file 4460# @fixed: Preallocated fixed-size image file 4461# 4462# Since: 2.12 4463## 4464{ 'enum': 'BlockdevVhdxSubformat', 4465 'data': [ 'dynamic', 'fixed' ] } 4466 4467## 4468# @BlockdevCreateOptionsVhdx: 4469# 4470# Driver specific image creation options for vhdx. 4471# 4472# @file Node to create the image format on 4473# @size Size of the virtual disk in bytes 4474# @log-size Log size in bytes, must be a multiple of 1 MB 4475# (default: 1 MB) 4476# @block-size Block size in bytes, must be a multiple of 1 MB and not 4477# larger than 256 MB (default: automatically choose a block 4478# size depending on the image size) 4479# @subformat vhdx subformat (default: dynamic) 4480# @block-state-zero Force use of payload blocks of type 'ZERO'. Non-standard, 4481# but default. Do not set to 'off' when using 'qemu-img 4482# convert' with subformat=dynamic. 4483# 4484# Since: 2.12 4485## 4486{ 'struct': 'BlockdevCreateOptionsVhdx', 4487 'data': { 'file': 'BlockdevRef', 4488 'size': 'size', 4489 '*log-size': 'size', 4490 '*block-size': 'size', 4491 '*subformat': 'BlockdevVhdxSubformat', 4492 '*block-state-zero': 'bool' } } 4493 4494## 4495# @BlockdevVpcSubformat: 4496# 4497# @dynamic: Growing image file 4498# @fixed: Preallocated fixed-size image file 4499# 4500# Since: 2.12 4501## 4502{ 'enum': 'BlockdevVpcSubformat', 4503 'data': [ 'dynamic', 'fixed' ] } 4504 4505## 4506# @BlockdevCreateOptionsVpc: 4507# 4508# Driver specific image creation options for vpc (VHD). 4509# 4510# @file Node to create the image format on 4511# @size Size of the virtual disk in bytes 4512# @subformat vhdx subformat (default: dynamic) 4513# @force-size Force use of the exact byte size instead of rounding to the 4514# next size that can be represented in CHS geometry 4515# (default: false) 4516# 4517# Since: 2.12 4518## 4519{ 'struct': 'BlockdevCreateOptionsVpc', 4520 'data': { 'file': 'BlockdevRef', 4521 'size': 'size', 4522 '*subformat': 'BlockdevVpcSubformat', 4523 '*force-size': 'bool' } } 4524 4525## 4526# @BlockdevCreateOptions: 4527# 4528# Options for creating an image format on a given node. 4529# 4530# @driver block driver to create the image format 4531# 4532# Since: 2.12 4533## 4534{ 'union': 'BlockdevCreateOptions', 4535 'base': { 4536 'driver': 'BlockdevDriver' }, 4537 'discriminator': 'driver', 4538 'data': { 4539 'file': 'BlockdevCreateOptionsFile', 4540 'gluster': 'BlockdevCreateOptionsGluster', 4541 'luks': 'BlockdevCreateOptionsLUKS', 4542 'nfs': 'BlockdevCreateOptionsNfs', 4543 'parallels': 'BlockdevCreateOptionsParallels', 4544 'qcow': 'BlockdevCreateOptionsQcow', 4545 'qcow2': 'BlockdevCreateOptionsQcow2', 4546 'qed': 'BlockdevCreateOptionsQed', 4547 'rbd': 'BlockdevCreateOptionsRbd', 4548 'sheepdog': 'BlockdevCreateOptionsSheepdog', 4549 'ssh': 'BlockdevCreateOptionsSsh', 4550 'vdi': 'BlockdevCreateOptionsVdi', 4551 'vhdx': 'BlockdevCreateOptionsVhdx', 4552 'vmdk': 'BlockdevCreateOptionsVmdk', 4553 'vpc': 'BlockdevCreateOptionsVpc' 4554 } } 4555 4556## 4557# @blockdev-create: 4558# 4559# Starts a job to create an image format on a given node. The job is 4560# automatically finalized, but a manual job-dismiss is required. 4561# 4562# @job-id: Identifier for the newly created job. 4563# 4564# @options: Options for the image creation. 4565# 4566# Since: 3.0 4567## 4568{ 'command': 'blockdev-create', 4569 'data': { 'job-id': 'str', 4570 'options': 'BlockdevCreateOptions' } } 4571 4572## 4573# @blockdev-open-tray: 4574# 4575# Opens a block device's tray. If there is a block driver state tree inserted as 4576# a medium, it will become inaccessible to the guest (but it will remain 4577# associated to the block device, so closing the tray will make it accessible 4578# again). 4579# 4580# If the tray was already open before, this will be a no-op. 4581# 4582# Once the tray opens, a DEVICE_TRAY_MOVED event is emitted. There are cases in 4583# which no such event will be generated, these include: 4584# - if the guest has locked the tray, @force is false and the guest does not 4585# respond to the eject request 4586# - if the BlockBackend denoted by @device does not have a guest device attached 4587# to it 4588# - if the guest device does not have an actual tray 4589# 4590# @device: Block device name (deprecated, use @id instead) 4591# 4592# @id: The name or QOM path of the guest device (since: 2.8) 4593# 4594# @force: if false (the default), an eject request will be sent to 4595# the guest if it has locked the tray (and the tray will not be opened 4596# immediately); if true, the tray will be opened regardless of whether 4597# it is locked 4598# 4599# Since: 2.5 4600# 4601# Example: 4602# 4603# -> { "execute": "blockdev-open-tray", 4604# "arguments": { "id": "ide0-1-0" } } 4605# 4606# <- { "timestamp": { "seconds": 1418751016, 4607# "microseconds": 716996 }, 4608# "event": "DEVICE_TRAY_MOVED", 4609# "data": { "device": "ide1-cd0", 4610# "id": "ide0-1-0", 4611# "tray-open": true } } 4612# 4613# <- { "return": {} } 4614# 4615## 4616{ 'command': 'blockdev-open-tray', 4617 'data': { '*device': 'str', 4618 '*id': 'str', 4619 '*force': 'bool' } } 4620 4621## 4622# @blockdev-close-tray: 4623# 4624# Closes a block device's tray. If there is a block driver state tree associated 4625# with the block device (which is currently ejected), that tree will be loaded 4626# as the medium. 4627# 4628# If the tray was already closed before, this will be a no-op. 4629# 4630# @device: Block device name (deprecated, use @id instead) 4631# 4632# @id: The name or QOM path of the guest device (since: 2.8) 4633# 4634# Since: 2.5 4635# 4636# Example: 4637# 4638# -> { "execute": "blockdev-close-tray", 4639# "arguments": { "id": "ide0-1-0" } } 4640# 4641# <- { "timestamp": { "seconds": 1418751345, 4642# "microseconds": 272147 }, 4643# "event": "DEVICE_TRAY_MOVED", 4644# "data": { "device": "ide1-cd0", 4645# "id": "ide0-1-0", 4646# "tray-open": false } } 4647# 4648# <- { "return": {} } 4649# 4650## 4651{ 'command': 'blockdev-close-tray', 4652 'data': { '*device': 'str', 4653 '*id': 'str' } } 4654 4655## 4656# @blockdev-remove-medium: 4657# 4658# Removes a medium (a block driver state tree) from a block device. That block 4659# device's tray must currently be open (unless there is no attached guest 4660# device). 4661# 4662# If the tray is open and there is no medium inserted, this will be a no-op. 4663# 4664# @id: The name or QOM path of the guest device 4665# 4666# Since: 2.12 4667# 4668# Example: 4669# 4670# -> { "execute": "blockdev-remove-medium", 4671# "arguments": { "id": "ide0-1-0" } } 4672# 4673# <- { "error": { "class": "GenericError", 4674# "desc": "Tray of device 'ide0-1-0' is not open" } } 4675# 4676# -> { "execute": "blockdev-open-tray", 4677# "arguments": { "id": "ide0-1-0" } } 4678# 4679# <- { "timestamp": { "seconds": 1418751627, 4680# "microseconds": 549958 }, 4681# "event": "DEVICE_TRAY_MOVED", 4682# "data": { "device": "ide1-cd0", 4683# "id": "ide0-1-0", 4684# "tray-open": true } } 4685# 4686# <- { "return": {} } 4687# 4688# -> { "execute": "blockdev-remove-medium", 4689# "arguments": { "id": "ide0-1-0" } } 4690# 4691# <- { "return": {} } 4692# 4693## 4694{ 'command': 'blockdev-remove-medium', 4695 'data': { 'id': 'str' } } 4696 4697## 4698# @blockdev-insert-medium: 4699# 4700# Inserts a medium (a block driver state tree) into a block device. That block 4701# device's tray must currently be open (unless there is no attached guest 4702# device) and there must be no medium inserted already. 4703# 4704# @id: The name or QOM path of the guest device 4705# 4706# @node-name: name of a node in the block driver state graph 4707# 4708# Since: 2.12 4709# 4710# Example: 4711# 4712# -> { "execute": "blockdev-add", 4713# "arguments": { 4714# "node-name": "node0", 4715# "driver": "raw", 4716# "file": { "driver": "file", 4717# "filename": "fedora.iso" } } } 4718# <- { "return": {} } 4719# 4720# -> { "execute": "blockdev-insert-medium", 4721# "arguments": { "id": "ide0-1-0", 4722# "node-name": "node0" } } 4723# 4724# <- { "return": {} } 4725# 4726## 4727{ 'command': 'blockdev-insert-medium', 4728 'data': { 'id': 'str', 4729 'node-name': 'str'} } 4730 4731 4732## 4733# @BlockdevChangeReadOnlyMode: 4734# 4735# Specifies the new read-only mode of a block device subject to the 4736# @blockdev-change-medium command. 4737# 4738# @retain: Retains the current read-only mode 4739# 4740# @read-only: Makes the device read-only 4741# 4742# @read-write: Makes the device writable 4743# 4744# Since: 2.3 4745# 4746## 4747{ 'enum': 'BlockdevChangeReadOnlyMode', 4748 'data': ['retain', 'read-only', 'read-write'] } 4749 4750 4751## 4752# @blockdev-change-medium: 4753# 4754# Changes the medium inserted into a block device by ejecting the current medium 4755# and loading a new image file which is inserted as the new medium (this command 4756# combines blockdev-open-tray, blockdev-remove-medium, blockdev-insert-medium 4757# and blockdev-close-tray). 4758# 4759# @device: Block device name (deprecated, use @id instead) 4760# 4761# @id: The name or QOM path of the guest device 4762# (since: 2.8) 4763# 4764# @filename: filename of the new image to be loaded 4765# 4766# @format: format to open the new image with (defaults to 4767# the probed format) 4768# 4769# @read-only-mode: change the read-only mode of the device; defaults 4770# to 'retain' 4771# 4772# Since: 2.5 4773# 4774# Examples: 4775# 4776# 1. Change a removable medium 4777# 4778# -> { "execute": "blockdev-change-medium", 4779# "arguments": { "id": "ide0-1-0", 4780# "filename": "/srv/images/Fedora-12-x86_64-DVD.iso", 4781# "format": "raw" } } 4782# <- { "return": {} } 4783# 4784# 2. Load a read-only medium into a writable drive 4785# 4786# -> { "execute": "blockdev-change-medium", 4787# "arguments": { "id": "floppyA", 4788# "filename": "/srv/images/ro.img", 4789# "format": "raw", 4790# "read-only-mode": "retain" } } 4791# 4792# <- { "error": 4793# { "class": "GenericError", 4794# "desc": "Could not open '/srv/images/ro.img': Permission denied" } } 4795# 4796# -> { "execute": "blockdev-change-medium", 4797# "arguments": { "id": "floppyA", 4798# "filename": "/srv/images/ro.img", 4799# "format": "raw", 4800# "read-only-mode": "read-only" } } 4801# 4802# <- { "return": {} } 4803# 4804## 4805{ 'command': 'blockdev-change-medium', 4806 'data': { '*device': 'str', 4807 '*id': 'str', 4808 'filename': 'str', 4809 '*format': 'str', 4810 '*read-only-mode': 'BlockdevChangeReadOnlyMode' } } 4811 4812 4813## 4814# @BlockErrorAction: 4815# 4816# An enumeration of action that has been taken when a DISK I/O occurs 4817# 4818# @ignore: error has been ignored 4819# 4820# @report: error has been reported to the device 4821# 4822# @stop: error caused VM to be stopped 4823# 4824# Since: 2.1 4825## 4826{ 'enum': 'BlockErrorAction', 4827 'data': [ 'ignore', 'report', 'stop' ] } 4828 4829 4830## 4831# @BLOCK_IMAGE_CORRUPTED: 4832# 4833# Emitted when a disk image is being marked corrupt. The image can be 4834# identified by its device or node name. The 'device' field is always 4835# present for compatibility reasons, but it can be empty ("") if the 4836# image does not have a device name associated. 4837# 4838# @device: device name. This is always present for compatibility 4839# reasons, but it can be empty ("") if the image does not 4840# have a device name associated. 4841# 4842# @node-name: node name (Since: 2.4) 4843# 4844# @msg: informative message for human consumption, such as the kind of 4845# corruption being detected. It should not be parsed by machine as it is 4846# not guaranteed to be stable 4847# 4848# @offset: if the corruption resulted from an image access, this is 4849# the host's access offset into the image 4850# 4851# @size: if the corruption resulted from an image access, this is 4852# the access size 4853# 4854# @fatal: if set, the image is marked corrupt and therefore unusable after this 4855# event and must be repaired (Since 2.2; before, every 4856# BLOCK_IMAGE_CORRUPTED event was fatal) 4857# 4858# Note: If action is "stop", a STOP event will eventually follow the 4859# BLOCK_IO_ERROR event. 4860# 4861# Example: 4862# 4863# <- { "event": "BLOCK_IMAGE_CORRUPTED", 4864# "data": { "device": "ide0-hd0", "node-name": "node0", 4865# "msg": "Prevented active L1 table overwrite", "offset": 196608, 4866# "size": 65536 }, 4867# "timestamp": { "seconds": 1378126126, "microseconds": 966463 } } 4868# 4869# Since: 1.7 4870## 4871{ 'event': 'BLOCK_IMAGE_CORRUPTED', 4872 'data': { 'device' : 'str', 4873 '*node-name' : 'str', 4874 'msg' : 'str', 4875 '*offset' : 'int', 4876 '*size' : 'int', 4877 'fatal' : 'bool' } } 4878 4879## 4880# @BLOCK_IO_ERROR: 4881# 4882# Emitted when a disk I/O error occurs 4883# 4884# @device: device name. This is always present for compatibility 4885# reasons, but it can be empty ("") if the image does not 4886# have a device name associated. 4887# 4888# @node-name: node name. Note that errors may be reported for the root node 4889# that is directly attached to a guest device rather than for the 4890# node where the error occurred. The node name is not present if 4891# the drive is empty. (Since: 2.8) 4892# 4893# @operation: I/O operation 4894# 4895# @action: action that has been taken 4896# 4897# @nospace: true if I/O error was caused due to a no-space 4898# condition. This key is only present if query-block's 4899# io-status is present, please see query-block documentation 4900# for more information (since: 2.2) 4901# 4902# @reason: human readable string describing the error cause. 4903# (This field is a debugging aid for humans, it should not 4904# be parsed by applications) (since: 2.2) 4905# 4906# Note: If action is "stop", a STOP event will eventually follow the 4907# BLOCK_IO_ERROR event 4908# 4909# Since: 0.13.0 4910# 4911# Example: 4912# 4913# <- { "event": "BLOCK_IO_ERROR", 4914# "data": { "device": "ide0-hd1", 4915# "node-name": "#block212", 4916# "operation": "write", 4917# "action": "stop" }, 4918# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 4919# 4920## 4921{ 'event': 'BLOCK_IO_ERROR', 4922 'data': { 'device': 'str', '*node-name': 'str', 4923 'operation': 'IoOperationType', 4924 'action': 'BlockErrorAction', '*nospace': 'bool', 4925 'reason': 'str' } } 4926 4927## 4928# @BLOCK_JOB_COMPLETED: 4929# 4930# Emitted when a block job has completed 4931# 4932# @type: job type 4933# 4934# @device: The job identifier. Originally the device name but other 4935# values are allowed since QEMU 2.7 4936# 4937# @len: maximum progress value 4938# 4939# @offset: current progress value. On success this is equal to len. 4940# On failure this is less than len 4941# 4942# @speed: rate limit, bytes per second 4943# 4944# @error: error message. Only present on failure. This field 4945# contains a human-readable error message. There are no semantics 4946# other than that streaming has failed and clients should not try to 4947# interpret the error string 4948# 4949# Since: 1.1 4950# 4951# Example: 4952# 4953# <- { "event": "BLOCK_JOB_COMPLETED", 4954# "data": { "type": "stream", "device": "virtio-disk0", 4955# "len": 10737418240, "offset": 10737418240, 4956# "speed": 0 }, 4957# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } } 4958# 4959## 4960{ 'event': 'BLOCK_JOB_COMPLETED', 4961 'data': { 'type' : 'JobType', 4962 'device': 'str', 4963 'len' : 'int', 4964 'offset': 'int', 4965 'speed' : 'int', 4966 '*error': 'str' } } 4967 4968## 4969# @BLOCK_JOB_CANCELLED: 4970# 4971# Emitted when a block job has been cancelled 4972# 4973# @type: job type 4974# 4975# @device: The job identifier. Originally the device name but other 4976# values are allowed since QEMU 2.7 4977# 4978# @len: maximum progress value 4979# 4980# @offset: current progress value. On success this is equal to len. 4981# On failure this is less than len 4982# 4983# @speed: rate limit, bytes per second 4984# 4985# Since: 1.1 4986# 4987# Example: 4988# 4989# <- { "event": "BLOCK_JOB_CANCELLED", 4990# "data": { "type": "stream", "device": "virtio-disk0", 4991# "len": 10737418240, "offset": 134217728, 4992# "speed": 0 }, 4993# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } } 4994# 4995## 4996{ 'event': 'BLOCK_JOB_CANCELLED', 4997 'data': { 'type' : 'JobType', 4998 'device': 'str', 4999 'len' : 'int', 5000 'offset': 'int', 5001 'speed' : 'int' } } 5002 5003## 5004# @BLOCK_JOB_ERROR: 5005# 5006# Emitted when a block job encounters an error 5007# 5008# @device: The job identifier. Originally the device name but other 5009# values are allowed since QEMU 2.7 5010# 5011# @operation: I/O operation 5012# 5013# @action: action that has been taken 5014# 5015# Since: 1.3 5016# 5017# Example: 5018# 5019# <- { "event": "BLOCK_JOB_ERROR", 5020# "data": { "device": "ide0-hd1", 5021# "operation": "write", 5022# "action": "stop" }, 5023# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 5024# 5025## 5026{ 'event': 'BLOCK_JOB_ERROR', 5027 'data': { 'device' : 'str', 5028 'operation': 'IoOperationType', 5029 'action' : 'BlockErrorAction' } } 5030 5031## 5032# @BLOCK_JOB_READY: 5033# 5034# Emitted when a block job is ready to complete 5035# 5036# @type: job type 5037# 5038# @device: The job identifier. Originally the device name but other 5039# values are allowed since QEMU 2.7 5040# 5041# @len: maximum progress value 5042# 5043# @offset: current progress value. On success this is equal to len. 5044# On failure this is less than len 5045# 5046# @speed: rate limit, bytes per second 5047# 5048# Note: The "ready to complete" status is always reset by a @BLOCK_JOB_ERROR 5049# event 5050# 5051# Since: 1.3 5052# 5053# Example: 5054# 5055# <- { "event": "BLOCK_JOB_READY", 5056# "data": { "device": "drive0", "type": "mirror", "speed": 0, 5057# "len": 2097152, "offset": 2097152 } 5058# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 5059# 5060## 5061{ 'event': 'BLOCK_JOB_READY', 5062 'data': { 'type' : 'JobType', 5063 'device': 'str', 5064 'len' : 'int', 5065 'offset': 'int', 5066 'speed' : 'int' } } 5067 5068## 5069# @BLOCK_JOB_PENDING: 5070# 5071# Emitted when a block job is awaiting explicit authorization to finalize graph 5072# changes via @block-job-finalize. If this job is part of a transaction, it will 5073# not emit this event until the transaction has converged first. 5074# 5075# @type: job type 5076# 5077# @id: The job identifier. 5078# 5079# Since: 2.12 5080# 5081# Example: 5082# 5083# <- { "event": "BLOCK_JOB_WAITING", 5084# "data": { "device": "drive0", "type": "mirror" }, 5085# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 5086# 5087## 5088{ 'event': 'BLOCK_JOB_PENDING', 5089 'data': { 'type' : 'JobType', 5090 'id' : 'str' } } 5091 5092## 5093# @PreallocMode: 5094# 5095# Preallocation mode of QEMU image file 5096# 5097# @off: no preallocation 5098# @metadata: preallocate only for metadata 5099# @falloc: like @full preallocation but allocate disk space by 5100# posix_fallocate() rather than writing zeros. 5101# @full: preallocate all data by writing zeros to device to ensure disk 5102# space is really available. @full preallocation also sets up 5103# metadata correctly. 5104# 5105# Since: 2.2 5106## 5107{ 'enum': 'PreallocMode', 5108 'data': [ 'off', 'metadata', 'falloc', 'full' ] } 5109 5110## 5111# @BLOCK_WRITE_THRESHOLD: 5112# 5113# Emitted when writes on block device reaches or exceeds the 5114# configured write threshold. For thin-provisioned devices, this 5115# means the device should be extended to avoid pausing for 5116# disk exhaustion. 5117# The event is one shot. Once triggered, it needs to be 5118# re-registered with another block-set-write-threshold command. 5119# 5120# @node-name: graph node name on which the threshold was exceeded. 5121# 5122# @amount-exceeded: amount of data which exceeded the threshold, in bytes. 5123# 5124# @write-threshold: last configured threshold, in bytes. 5125# 5126# Since: 2.3 5127## 5128{ 'event': 'BLOCK_WRITE_THRESHOLD', 5129 'data': { 'node-name': 'str', 5130 'amount-exceeded': 'uint64', 5131 'write-threshold': 'uint64' } } 5132 5133## 5134# @block-set-write-threshold: 5135# 5136# Change the write threshold for a block drive. An event will be 5137# delivered if a write to this block drive crosses the configured 5138# threshold. The threshold is an offset, thus must be 5139# non-negative. Default is no write threshold. Setting the threshold 5140# to zero disables it. 5141# 5142# This is useful to transparently resize thin-provisioned drives without 5143# the guest OS noticing. 5144# 5145# @node-name: graph node name on which the threshold must be set. 5146# 5147# @write-threshold: configured threshold for the block device, bytes. 5148# Use 0 to disable the threshold. 5149# 5150# Since: 2.3 5151# 5152# Example: 5153# 5154# -> { "execute": "block-set-write-threshold", 5155# "arguments": { "node-name": "mydev", 5156# "write-threshold": 17179869184 } } 5157# <- { "return": {} } 5158# 5159## 5160{ 'command': 'block-set-write-threshold', 5161 'data': { 'node-name': 'str', 'write-threshold': 'uint64' } } 5162 5163## 5164# @x-blockdev-change: 5165# 5166# Dynamically reconfigure the block driver state graph. It can be used 5167# to add, remove, insert or replace a graph node. Currently only the 5168# Quorum driver implements this feature to add or remove its child. This 5169# is useful to fix a broken quorum child. 5170# 5171# If @node is specified, it will be inserted under @parent. @child 5172# may not be specified in this case. If both @parent and @child are 5173# specified but @node is not, @child will be detached from @parent. 5174# 5175# @parent: the id or name of the parent node. 5176# 5177# @child: the name of a child under the given parent node. 5178# 5179# @node: the name of the node that will be added. 5180# 5181# Note: this command is experimental, and its API is not stable. It 5182# does not support all kinds of operations, all kinds of children, nor 5183# all block drivers. 5184# 5185# FIXME Removing children from a quorum node means introducing gaps in the 5186# child indices. This cannot be represented in the 'children' list of 5187# BlockdevOptionsQuorum, as returned by .bdrv_refresh_filename(). 5188# 5189# Warning: The data in a new quorum child MUST be consistent with that of 5190# the rest of the array. 5191# 5192# Since: 2.7 5193# 5194# Example: 5195# 5196# 1. Add a new node to a quorum 5197# -> { "execute": "blockdev-add", 5198# "arguments": { 5199# "driver": "raw", 5200# "node-name": "new_node", 5201# "file": { "driver": "file", 5202# "filename": "test.raw" } } } 5203# <- { "return": {} } 5204# -> { "execute": "x-blockdev-change", 5205# "arguments": { "parent": "disk1", 5206# "node": "new_node" } } 5207# <- { "return": {} } 5208# 5209# 2. Delete a quorum's node 5210# -> { "execute": "x-blockdev-change", 5211# "arguments": { "parent": "disk1", 5212# "child": "children.1" } } 5213# <- { "return": {} } 5214# 5215## 5216{ 'command': 'x-blockdev-change', 5217 'data' : { 'parent': 'str', 5218 '*child': 'str', 5219 '*node': 'str' } } 5220 5221## 5222# @x-blockdev-set-iothread: 5223# 5224# Move @node and its children into the @iothread. If @iothread is null then 5225# move @node and its children into the main loop. 5226# 5227# The node must not be attached to a BlockBackend. 5228# 5229# @node-name: the name of the block driver node 5230# 5231# @iothread: the name of the IOThread object or null for the main loop 5232# 5233# @force: true if the node and its children should be moved when a BlockBackend 5234# is already attached 5235# 5236# Note: this command is experimental and intended for test cases that need 5237# control over IOThreads only. 5238# 5239# Since: 2.12 5240# 5241# Example: 5242# 5243# 1. Move a node into an IOThread 5244# -> { "execute": "x-blockdev-set-iothread", 5245# "arguments": { "node-name": "disk1", 5246# "iothread": "iothread0" } } 5247# <- { "return": {} } 5248# 5249# 2. Move a node into the main loop 5250# -> { "execute": "x-blockdev-set-iothread", 5251# "arguments": { "node-name": "disk1", 5252# "iothread": null } } 5253# <- { "return": {} } 5254# 5255## 5256{ 'command': 'x-blockdev-set-iothread', 5257 'data' : { 'node-name': 'str', 5258 'iothread': 'StrOrNull', 5259 '*force': 'bool' } } 5260