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