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