15db15096SBenoît Canet# -*- Mode: Python -*- 2f7160f32SAndrea Bolognani# vim: filetype=python 3d3a48372SMarc-André Lureau 4d3a48372SMarc-André Lureau## 5f5cf31c5SMarkus Armbruster# == Block core (VM unrelated) 6d3a48372SMarc-André Lureau## 75db15096SBenoît Canet 85db15096SBenoît Canet{ 'include': 'common.json' } 92031c133SMarkus Armbruster{ 'include': 'crypto.json' } 10bf42508fSKevin Wolf{ 'include': 'job.json' } 11a2ff5a48SMarkus Armbruster{ 'include': 'sockets.json' } 121ad166b6SBenoît Canet 131ad166b6SBenoît Canet## 145072f7b3SMarc-André Lureau# @SnapshotInfo: 151ad166b6SBenoît Canet# 161ad166b6SBenoît Canet# @id: unique snapshot id 171ad166b6SBenoît Canet# 181ad166b6SBenoît Canet# @name: user chosen name 191ad166b6SBenoît Canet# 201ad166b6SBenoît Canet# @vm-state-size: size of the VM state 211ad166b6SBenoît Canet# 221ad166b6SBenoît Canet# @date-sec: UTC date of the snapshot in seconds 231ad166b6SBenoît Canet# 241ad166b6SBenoît Canet# @date-nsec: fractional part in nano seconds to be used with date-sec 251ad166b6SBenoît Canet# 261ad166b6SBenoît Canet# @vm-clock-sec: VM clock relative to boot in seconds 271ad166b6SBenoît Canet# 28a937b6aaSMarkus Armbruster# @vm-clock-nsec: fractional part in nano seconds to be used with 29a937b6aaSMarkus Armbruster# vm-clock-sec 301ad166b6SBenoît Canet# 31a937b6aaSMarkus Armbruster# @icount: Current instruction count. Appears when execution 32a937b6aaSMarkus Armbruster# record/replay is enabled. Used for "time-traveling" to match 33a937b6aaSMarkus Armbruster# the moment in the recorded execution with the snapshots. This 34a937b6aaSMarkus Armbruster# counter may be obtained through @query-replay command (since 35a937b6aaSMarkus Armbruster# 5.2) 36b39847a5SPavel Dovgalyuk# 371ad166b6SBenoît Canet# Since: 1.3 381ad166b6SBenoît Canet## 39895a2a80SEric Blake{ 'struct': 'SnapshotInfo', 401ad166b6SBenoît Canet 'data': { 'id': 'str', 'name': 'str', 'vm-state-size': 'int', 411ad166b6SBenoît Canet 'date-sec': 'int', 'date-nsec': 'int', 42b39847a5SPavel Dovgalyuk 'vm-clock-sec': 'int', 'vm-clock-nsec': 'int', 43b39847a5SPavel Dovgalyuk '*icount': 'int' } } 441ad166b6SBenoît Canet 451ad166b6SBenoît Canet## 460a12f6f8SDaniel P. Berrange# @ImageInfoSpecificQCow2EncryptionBase: 470a12f6f8SDaniel P. Berrange# 480a12f6f8SDaniel P. Berrange# @format: The encryption format 490a12f6f8SDaniel P. Berrange# 500a12f6f8SDaniel P. Berrange# Since: 2.10 510a12f6f8SDaniel P. Berrange## 520a12f6f8SDaniel P. Berrange{ 'struct': 'ImageInfoSpecificQCow2EncryptionBase', 530a12f6f8SDaniel P. Berrange 'data': { 'format': 'BlockdevQcow2EncryptionFormat'}} 540a12f6f8SDaniel P. Berrange 550a12f6f8SDaniel P. Berrange## 560a12f6f8SDaniel P. Berrange# @ImageInfoSpecificQCow2Encryption: 570a12f6f8SDaniel P. Berrange# 580a12f6f8SDaniel P. Berrange# Since: 2.10 590a12f6f8SDaniel P. Berrange## 600a12f6f8SDaniel P. Berrange{ 'union': 'ImageInfoSpecificQCow2Encryption', 610a12f6f8SDaniel P. Berrange 'base': 'ImageInfoSpecificQCow2EncryptionBase', 620a12f6f8SDaniel P. Berrange 'discriminator': 'format', 6329cd0403SAnton Nefedov 'data': { 'luks': 'QCryptoBlockInfoLUKS' } } 640a12f6f8SDaniel P. Berrange 650a12f6f8SDaniel P. Berrange## 661ad166b6SBenoît Canet# @ImageInfoSpecificQCow2: 671ad166b6SBenoît Canet# 681ad166b6SBenoît Canet# @compat: compatibility level 691ad166b6SBenoît Canet# 70a937b6aaSMarkus Armbruster# @data-file: the filename of the external data file that is stored in 71a937b6aaSMarkus Armbruster# the image and used as a default for opening the image 72a937b6aaSMarkus Armbruster# (since: 4.0) 739b890bdcSKevin Wolf# 746c3944dcSKevin Wolf# @data-file-raw: True if the external data file must stay valid as a 756c3944dcSKevin Wolf# standalone (read-only) raw image without looking at qcow2 766c3944dcSKevin Wolf# metadata (since: 4.0) 776c3944dcSKevin Wolf# 78a937b6aaSMarkus Armbruster# @extended-l2: true if the image has extended L2 entries; only valid 79a937b6aaSMarkus Armbruster# for compat >= 1.1 (since 5.2) 807be20252SAlberto Garcia# 811d8bda12SMarkus Armbruster# @lazy-refcounts: on or off; only valid for compat >= 1.1 821ad166b6SBenoît Canet# 831d8bda12SMarkus Armbruster# @corrupt: true if the image has been marked corrupt; only valid for 849009b196SMax Reitz# compat >= 1.1 (since 2.2) 859009b196SMax Reitz# 860709c5a1SMax Reitz# @refcount-bits: width of a refcount entry in bits (since 2.3) 870709c5a1SMax Reitz# 88a937b6aaSMarkus Armbruster# @encrypt: details about encryption parameters; only set if image is 89a937b6aaSMarkus Armbruster# encrypted (since 2.10) 900a12f6f8SDaniel P. Berrange# 91b8968c87SAndrey Shinkevich# @bitmaps: A list of qcow2 bitmap details (since 4.0) 92b8968c87SAndrey Shinkevich# 93572ad978SDenis Plotnikov# @compression-type: the image cluster compression method (since 5.1) 94572ad978SDenis Plotnikov# 951ad166b6SBenoît Canet# Since: 1.7 961ad166b6SBenoît Canet## 97895a2a80SEric Blake{ 'struct': 'ImageInfoSpecificQCow2', 981ad166b6SBenoît Canet 'data': { 991ad166b6SBenoît Canet 'compat': 'str', 1009b890bdcSKevin Wolf '*data-file': 'str', 1016c3944dcSKevin Wolf '*data-file-raw': 'bool', 1027be20252SAlberto Garcia '*extended-l2': 'bool', 1039009b196SMax Reitz '*lazy-refcounts': 'bool', 1040709c5a1SMax Reitz '*corrupt': 'bool', 1050a12f6f8SDaniel P. Berrange 'refcount-bits': 'int', 106b8968c87SAndrey Shinkevich '*encrypt': 'ImageInfoSpecificQCow2Encryption', 107572ad978SDenis Plotnikov '*bitmaps': ['Qcow2BitmapInfo'], 108572ad978SDenis Plotnikov 'compression-type': 'Qcow2CompressionType' 1091ad166b6SBenoît Canet } } 1101ad166b6SBenoît Canet 1111ad166b6SBenoît Canet## 1121ad166b6SBenoît Canet# @ImageInfoSpecificVmdk: 1131ad166b6SBenoît Canet# 1141ad166b6SBenoît Canet# @create-type: The create type of VMDK image 1151ad166b6SBenoît Canet# 1161ad166b6SBenoît Canet# @cid: Content id of image 1171ad166b6SBenoît Canet# 1181ad166b6SBenoît Canet# @parent-cid: Parent VMDK image's cid 1191ad166b6SBenoît Canet# 1201ad166b6SBenoît Canet# @extents: List of extent files 1211ad166b6SBenoît Canet# 1221ad166b6SBenoît Canet# Since: 1.7 1231ad166b6SBenoît Canet## 124895a2a80SEric Blake{ 'struct': 'ImageInfoSpecificVmdk', 1251ad166b6SBenoît Canet 'data': { 1261ad166b6SBenoît Canet 'create-type': 'str', 1271ad166b6SBenoît Canet 'cid': 'int', 1281ad166b6SBenoît Canet 'parent-cid': 'int', 129456e7517SHanna Reitz 'extents': ['VmdkExtentInfo'] 130456e7517SHanna Reitz } } 131456e7517SHanna Reitz 132456e7517SHanna Reitz## 133456e7517SHanna Reitz# @VmdkExtentInfo: 134456e7517SHanna Reitz# 135456e7517SHanna Reitz# Information about a VMDK extent file 136456e7517SHanna Reitz# 137456e7517SHanna Reitz# @filename: Name of the extent file 138456e7517SHanna Reitz# 139456e7517SHanna Reitz# @format: Extent type (e.g. FLAT or SPARSE) 140456e7517SHanna Reitz# 141456e7517SHanna Reitz# @virtual-size: Number of bytes covered by this extent 142456e7517SHanna Reitz# 143456e7517SHanna Reitz# @cluster-size: Cluster size in bytes (for non-flat extents) 144456e7517SHanna Reitz# 145456e7517SHanna Reitz# @compressed: Whether this extent contains compressed data 146456e7517SHanna Reitz# 147456e7517SHanna Reitz# Since: 8.0 148456e7517SHanna Reitz## 149456e7517SHanna Reitz{ 'struct': 'VmdkExtentInfo', 150456e7517SHanna Reitz 'data': { 151456e7517SHanna Reitz 'filename': 'str', 152456e7517SHanna Reitz 'format': 'str', 153456e7517SHanna Reitz 'virtual-size': 'int', 154456e7517SHanna Reitz '*cluster-size': 'int', 155456e7517SHanna Reitz '*compressed': 'bool' 1561ad166b6SBenoît Canet } } 1571ad166b6SBenoît Canet 1581ad166b6SBenoît Canet## 15942e4ac9eSOr Ozeri# @ImageInfoSpecificRbd: 16042e4ac9eSOr Ozeri# 16142e4ac9eSOr Ozeri# @encryption-format: Image encryption format 16242e4ac9eSOr Ozeri# 16342e4ac9eSOr Ozeri# Since: 6.1 16442e4ac9eSOr Ozeri## 16542e4ac9eSOr Ozeri{ 'struct': 'ImageInfoSpecificRbd', 16642e4ac9eSOr Ozeri 'data': { 16742e4ac9eSOr Ozeri '*encryption-format': 'RbdImageEncryptionFormat' 16842e4ac9eSOr Ozeri } } 16942e4ac9eSOr Ozeri 17042e4ac9eSOr Ozeri## 1717f36a50aSHanna Reitz# @ImageInfoSpecificFile: 1727f36a50aSHanna Reitz# 1737f36a50aSHanna Reitz# @extent-size-hint: Extent size hint (if available) 1747f36a50aSHanna Reitz# 1757f36a50aSHanna Reitz# Since: 8.0 1767f36a50aSHanna Reitz## 1777f36a50aSHanna Reitz{ 'struct': 'ImageInfoSpecificFile', 1787f36a50aSHanna Reitz 'data': { 1797f36a50aSHanna Reitz '*extent-size-hint': 'size' 1807f36a50aSHanna Reitz } } 1817f36a50aSHanna Reitz 1827f36a50aSHanna Reitz## 1830db4f503SMarkus Armbruster# @ImageInfoSpecificKind: 1840db4f503SMarkus Armbruster# 1850db4f503SMarkus Armbruster# @luks: Since 2.7 186a937b6aaSMarkus Armbruster# 1870db4f503SMarkus Armbruster# @rbd: Since 6.1 188a937b6aaSMarkus Armbruster# 1897f36a50aSHanna Reitz# @file: Since 8.0 1900db4f503SMarkus Armbruster# 1910db4f503SMarkus Armbruster# Since: 1.7 1920db4f503SMarkus Armbruster## 1930db4f503SMarkus Armbruster{ 'enum': 'ImageInfoSpecificKind', 1947f36a50aSHanna Reitz 'data': [ 'qcow2', 'vmdk', 'luks', 'rbd', 'file' ] } 1950db4f503SMarkus Armbruster 1960db4f503SMarkus Armbruster## 1970db4f503SMarkus Armbruster# @ImageInfoSpecificQCow2Wrapper: 1980db4f503SMarkus Armbruster# 1992fecccbcSMarkus Armbruster# @data: image information specific to QCOW2 2002fecccbcSMarkus Armbruster# 2010db4f503SMarkus Armbruster# Since: 1.7 2020db4f503SMarkus Armbruster## 2030db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificQCow2Wrapper', 2040db4f503SMarkus Armbruster 'data': { 'data': 'ImageInfoSpecificQCow2' } } 2050db4f503SMarkus Armbruster 2060db4f503SMarkus Armbruster## 2070db4f503SMarkus Armbruster# @ImageInfoSpecificVmdkWrapper: 2080db4f503SMarkus Armbruster# 2092fecccbcSMarkus Armbruster# @data: image information specific to VMDK 2102fecccbcSMarkus Armbruster# 2110db4f503SMarkus Armbruster# Since: 6.1 2120db4f503SMarkus Armbruster## 2130db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificVmdkWrapper', 2140db4f503SMarkus Armbruster 'data': { 'data': 'ImageInfoSpecificVmdk' } } 2150db4f503SMarkus Armbruster 2160db4f503SMarkus Armbruster## 2170db4f503SMarkus Armbruster# @ImageInfoSpecificLUKSWrapper: 2180db4f503SMarkus Armbruster# 2192fecccbcSMarkus Armbruster# @data: image information specific to LUKS 2202fecccbcSMarkus Armbruster# 2210db4f503SMarkus Armbruster# Since: 2.7 2220db4f503SMarkus Armbruster## 2230db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificLUKSWrapper', 2240db4f503SMarkus Armbruster 'data': { 'data': 'QCryptoBlockInfoLUKS' } } 2250db4f503SMarkus Armbruster# If we need to add block driver specific parameters for 2260db4f503SMarkus Armbruster# LUKS in future, then we'll subclass QCryptoBlockInfoLUKS 2270db4f503SMarkus Armbruster# to define a ImageInfoSpecificLUKS 2280db4f503SMarkus Armbruster 2290db4f503SMarkus Armbruster## 2300db4f503SMarkus Armbruster# @ImageInfoSpecificRbdWrapper: 2310db4f503SMarkus Armbruster# 2322fecccbcSMarkus Armbruster# @data: image information specific to RBD 2332fecccbcSMarkus Armbruster# 2340db4f503SMarkus Armbruster# Since: 6.1 2350db4f503SMarkus Armbruster## 2360db4f503SMarkus Armbruster{ 'struct': 'ImageInfoSpecificRbdWrapper', 2370db4f503SMarkus Armbruster 'data': { 'data': 'ImageInfoSpecificRbd' } } 2380db4f503SMarkus Armbruster 2390db4f503SMarkus Armbruster## 2407f36a50aSHanna Reitz# @ImageInfoSpecificFileWrapper: 2417f36a50aSHanna Reitz# 2422fecccbcSMarkus Armbruster# @data: image information specific to files 2432fecccbcSMarkus Armbruster# 2447f36a50aSHanna Reitz# Since: 8.0 2457f36a50aSHanna Reitz## 2467f36a50aSHanna Reitz{ 'struct': 'ImageInfoSpecificFileWrapper', 2477f36a50aSHanna Reitz 'data': { 'data': 'ImageInfoSpecificFile' } } 2487f36a50aSHanna Reitz 2497f36a50aSHanna Reitz## 2501ad166b6SBenoît Canet# @ImageInfoSpecific: 2511ad166b6SBenoît Canet# 252a937b6aaSMarkus Armbruster# A discriminated record of image format specific information 253a937b6aaSMarkus Armbruster# structures. 2541ad166b6SBenoît Canet# 25589a2273bSMarkus Armbruster# @type: block driver name 25689a2273bSMarkus Armbruster# 2571ad166b6SBenoît Canet# Since: 1.7 2581ad166b6SBenoît Canet## 2591ad166b6SBenoît Canet{ 'union': 'ImageInfoSpecific', 2600db4f503SMarkus Armbruster 'base': { 'type': 'ImageInfoSpecificKind' }, 2610db4f503SMarkus Armbruster 'discriminator': 'type', 2621ad166b6SBenoît Canet 'data': { 2630db4f503SMarkus Armbruster 'qcow2': 'ImageInfoSpecificQCow2Wrapper', 2640db4f503SMarkus Armbruster 'vmdk': 'ImageInfoSpecificVmdkWrapper', 2650db4f503SMarkus Armbruster 'luks': 'ImageInfoSpecificLUKSWrapper', 2667f36a50aSHanna Reitz 'rbd': 'ImageInfoSpecificRbdWrapper', 2677f36a50aSHanna Reitz 'file': 'ImageInfoSpecificFileWrapper' 2681ad166b6SBenoît Canet } } 2691ad166b6SBenoît Canet 2701ad166b6SBenoît Canet## 271a2085f89SHanna Reitz# @BlockNodeInfo: 2721ad166b6SBenoît Canet# 2731ad166b6SBenoît Canet# Information about a QEMU image file 2741ad166b6SBenoît Canet# 2751ad166b6SBenoît Canet# @filename: name of the image file 2761ad166b6SBenoît Canet# 2771ad166b6SBenoît Canet# @format: format of the image file 2781ad166b6SBenoît Canet# 2791ad166b6SBenoît Canet# @virtual-size: maximum capacity in bytes of the image 2801ad166b6SBenoît Canet# 2811d8bda12SMarkus Armbruster# @actual-size: actual size on disk in bytes of the image 2821ad166b6SBenoît Canet# 2831d8bda12SMarkus Armbruster# @dirty-flag: true if image is not cleanly closed 2841ad166b6SBenoît Canet# 2851d8bda12SMarkus Armbruster# @cluster-size: size of a cluster in bytes 2861ad166b6SBenoît Canet# 2871d8bda12SMarkus Armbruster# @encrypted: true if the image is encrypted 2881ad166b6SBenoît Canet# 2891d8bda12SMarkus Armbruster# @compressed: true if the image is compressed (Since 1.7) 2901ad166b6SBenoît Canet# 2911d8bda12SMarkus Armbruster# @backing-filename: name of the backing file 2921ad166b6SBenoît Canet# 2931d8bda12SMarkus Armbruster# @full-backing-filename: full path of the backing file 2941ad166b6SBenoît Canet# 2951d8bda12SMarkus Armbruster# @backing-filename-format: the format of the backing file 2961ad166b6SBenoît Canet# 2971d8bda12SMarkus Armbruster# @snapshots: list of VM snapshots 2981ad166b6SBenoît Canet# 2991d8bda12SMarkus Armbruster# @format-specific: structure supplying additional format-specific 3001ad166b6SBenoît Canet# information (since 1.7) 3011ad166b6SBenoît Canet# 302a2085f89SHanna Reitz# Since: 8.0 3031ad166b6SBenoît Canet## 304a2085f89SHanna Reitz{ 'struct': 'BlockNodeInfo', 3051ad166b6SBenoît Canet 'data': {'filename': 'str', 'format': 'str', '*dirty-flag': 'bool', 3061ad166b6SBenoît Canet '*actual-size': 'int', 'virtual-size': 'int', 3071ad166b6SBenoît Canet '*cluster-size': 'int', '*encrypted': 'bool', '*compressed': 'bool', 3081ad166b6SBenoît Canet '*backing-filename': 'str', '*full-backing-filename': 'str', 3091ad166b6SBenoît Canet '*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'], 31024bf10daSKevin Wolf '*format-specific': 'ImageInfoSpecific' } } 3111ad166b6SBenoît Canet 3121ad166b6SBenoît Canet## 313a2085f89SHanna Reitz# @ImageInfo: 314a2085f89SHanna Reitz# 315a937b6aaSMarkus Armbruster# Information about a QEMU image file, and potentially its backing 316a937b6aaSMarkus Armbruster# image 317a2085f89SHanna Reitz# 318a2085f89SHanna Reitz# @backing-image: info of the backing image 319a2085f89SHanna Reitz# 320a2085f89SHanna Reitz# Since: 1.3 321a2085f89SHanna Reitz## 322a2085f89SHanna Reitz{ 'struct': 'ImageInfo', 323a2085f89SHanna Reitz 'base': 'BlockNodeInfo', 324a2085f89SHanna Reitz 'data': { 325a2085f89SHanna Reitz '*backing-image': 'ImageInfo' 326a2085f89SHanna Reitz } } 327a2085f89SHanna Reitz 328a2085f89SHanna Reitz## 3296cab3399SHanna Reitz# @BlockChildInfo: 3306cab3399SHanna Reitz# 331a937b6aaSMarkus Armbruster# Information about all nodes in the block graph starting at some 332a937b6aaSMarkus Armbruster# node, annotated with information about that node in relation to its 333a937b6aaSMarkus Armbruster# parent. 3346cab3399SHanna Reitz# 335a937b6aaSMarkus Armbruster# @name: Child name of the root node in the BlockGraphInfo struct, in 336a937b6aaSMarkus Armbruster# its role as the child of some undescribed parent node 3376cab3399SHanna Reitz# 3386cab3399SHanna Reitz# @info: Block graph information starting at this node 3396cab3399SHanna Reitz# 3406cab3399SHanna Reitz# Since: 8.0 3416cab3399SHanna Reitz## 3426cab3399SHanna Reitz{ 'struct': 'BlockChildInfo', 3436cab3399SHanna Reitz 'data': { 3446cab3399SHanna Reitz 'name': 'str', 3456cab3399SHanna Reitz 'info': 'BlockGraphInfo' 3466cab3399SHanna Reitz } } 3476cab3399SHanna Reitz 3486cab3399SHanna Reitz## 3496cab3399SHanna Reitz# @BlockGraphInfo: 3506cab3399SHanna Reitz# 351a937b6aaSMarkus Armbruster# Information about all nodes in a block (sub)graph in the form of 352a937b6aaSMarkus Armbruster# BlockNodeInfo data. The base BlockNodeInfo struct contains the 353a937b6aaSMarkus Armbruster# information for the (sub)graph's root node. 3546cab3399SHanna Reitz# 3556cab3399SHanna Reitz# @children: Array of links to this node's child nodes' information 3566cab3399SHanna Reitz# 3576cab3399SHanna Reitz# Since: 8.0 3586cab3399SHanna Reitz## 3596cab3399SHanna Reitz{ 'struct': 'BlockGraphInfo', 3606cab3399SHanna Reitz 'base': 'BlockNodeInfo', 3616cab3399SHanna Reitz 'data': { 'children': ['BlockChildInfo'] } } 3626cab3399SHanna Reitz 3636cab3399SHanna Reitz## 3641ad166b6SBenoît Canet# @ImageCheck: 3651ad166b6SBenoît Canet# 3661ad166b6SBenoît Canet# Information about a QEMU image file check 3671ad166b6SBenoît Canet# 3681ad166b6SBenoît Canet# @filename: name of the image file checked 3691ad166b6SBenoît Canet# 3701ad166b6SBenoît Canet# @format: format of the image file checked 3711ad166b6SBenoît Canet# 3721ad166b6SBenoît Canet# @check-errors: number of unexpected errors occurred during check 3731ad166b6SBenoît Canet# 3741d8bda12SMarkus Armbruster# @image-end-offset: offset (in bytes) where the image ends, this 375a937b6aaSMarkus Armbruster# field is present if the driver for the image format supports it 3761ad166b6SBenoît Canet# 3771d8bda12SMarkus Armbruster# @corruptions: number of corruptions found during the check if any 3781ad166b6SBenoît Canet# 3791d8bda12SMarkus Armbruster# @leaks: number of leaks found during the check if any 3801ad166b6SBenoît Canet# 381a937b6aaSMarkus Armbruster# @corruptions-fixed: number of corruptions fixed during the check if 382a937b6aaSMarkus Armbruster# any 3831ad166b6SBenoît Canet# 3841d8bda12SMarkus Armbruster# @leaks-fixed: number of leaks fixed during the check if any 3851ad166b6SBenoît Canet# 386a937b6aaSMarkus Armbruster# @total-clusters: total number of clusters, this field is present if 387a937b6aaSMarkus Armbruster# the driver for the image format supports it 3881ad166b6SBenoît Canet# 389a937b6aaSMarkus Armbruster# @allocated-clusters: total number of allocated clusters, this field 390a937b6aaSMarkus Armbruster# is present if the driver for the image format supports it 3911ad166b6SBenoît Canet# 3921d8bda12SMarkus Armbruster# @fragmented-clusters: total number of fragmented clusters, this 393a937b6aaSMarkus Armbruster# field is present if the driver for the image format supports it 3941ad166b6SBenoît Canet# 3951d8bda12SMarkus Armbruster# @compressed-clusters: total number of compressed clusters, this 396a937b6aaSMarkus Armbruster# field is present if the driver for the image format supports it 3971ad166b6SBenoît Canet# 3981ad166b6SBenoît Canet# Since: 1.4 3991ad166b6SBenoît Canet## 400895a2a80SEric Blake{ 'struct': 'ImageCheck', 4011ad166b6SBenoît Canet 'data': {'filename': 'str', 'format': 'str', 'check-errors': 'int', 4021ad166b6SBenoît Canet '*image-end-offset': 'int', '*corruptions': 'int', '*leaks': 'int', 4031ad166b6SBenoît Canet '*corruptions-fixed': 'int', '*leaks-fixed': 'int', 4041ad166b6SBenoît Canet '*total-clusters': 'int', '*allocated-clusters': 'int', 4051ad166b6SBenoît Canet '*fragmented-clusters': 'int', '*compressed-clusters': 'int' } } 4061ad166b6SBenoît Canet 4071ad166b6SBenoît Canet## 40816b0d555SFam Zheng# @MapEntry: 40916b0d555SFam Zheng# 41016b0d555SFam Zheng# Mapping information from a virtual block range to a host file range 41116b0d555SFam Zheng# 412ffb515faSMax Reitz# @start: virtual (guest) offset of the first byte described by this 413ffb515faSMax Reitz# entry 41416b0d555SFam Zheng# 41516b0d555SFam Zheng# @length: the number of bytes of the mapped virtual range 41616b0d555SFam Zheng# 417ffb515faSMax Reitz# @data: reading the image will actually read data from a file (in 418ffb515faSMax Reitz# particular, if @offset is present this means that the sectors 419ffb515faSMax Reitz# are not simply preallocated, but contain actual data in raw 420ffb515faSMax Reitz# format) 42116b0d555SFam Zheng# 422ffb515faSMax Reitz# @zero: whether the virtual blocks read as zeroes 42316b0d555SFam Zheng# 42452b10c9cSAndrey Drobyshev via# @compressed: true if the data is stored compressed (since 8.2) 42552b10c9cSAndrey Drobyshev via# 426ffb515faSMax Reitz# @depth: number of layers (0 = top image, 1 = top image's backing 427a937b6aaSMarkus Armbruster# file, ..., n - 1 = bottom image (where n is the number of images 428a937b6aaSMarkus Armbruster# in the chain)) before reaching one for which the range is 429a937b6aaSMarkus Armbruster# allocated 43016b0d555SFam Zheng# 431a937b6aaSMarkus Armbruster# @present: true if this layer provides the data, false if adding a 432a937b6aaSMarkus Armbruster# backing layer could impact this region (since 6.1) 4338417e137SEric Blake# 434ffb515faSMax Reitz# @offset: if present, the image file stores the data for this range 435ffb515faSMax Reitz# in raw format at the given (host) offset 43616b0d555SFam Zheng# 4371d8bda12SMarkus Armbruster# @filename: filename that is referred to by @offset 43816b0d555SFam Zheng# 43916b0d555SFam Zheng# Since: 2.6 44016b0d555SFam Zheng## 44116b0d555SFam Zheng{ 'struct': 'MapEntry', 44216b0d555SFam Zheng 'data': {'start': 'int', 'length': 'int', 'data': 'bool', 44352b10c9cSAndrey Drobyshev via 'zero': 'bool', 'compressed': 'bool', 'depth': 'int', 44452b10c9cSAndrey Drobyshev via 'present': 'bool', '*offset': 'int', '*filename': 'str' } } 44516b0d555SFam Zheng 44616b0d555SFam Zheng## 4475072f7b3SMarc-André Lureau# @BlockdevCacheInfo: 4489e193c5aSKevin Wolf# 4499e193c5aSKevin Wolf# Cache mode information for a block device 4509e193c5aSKevin Wolf# 4519e193c5aSKevin Wolf# @writeback: true if writeback mode is enabled 452a937b6aaSMarkus Armbruster# 4539e193c5aSKevin Wolf# @direct: true if the host page cache is bypassed (O_DIRECT) 454a937b6aaSMarkus Armbruster# 4559e193c5aSKevin Wolf# @no-flush: true if flush requests are ignored for the device 4569e193c5aSKevin Wolf# 4579e193c5aSKevin Wolf# Since: 2.3 4589e193c5aSKevin Wolf## 459895a2a80SEric Blake{ 'struct': 'BlockdevCacheInfo', 4609e193c5aSKevin Wolf 'data': { 'writeback': 'bool', 4619e193c5aSKevin Wolf 'direct': 'bool', 4629e193c5aSKevin Wolf 'no-flush': 'bool' } } 4639e193c5aSKevin Wolf 4649e193c5aSKevin Wolf## 4651ad166b6SBenoît Canet# @BlockDeviceInfo: 4661ad166b6SBenoît Canet# 4671ad166b6SBenoît Canet# Information about the backing device for a block device. 4681ad166b6SBenoît Canet# 4691ad166b6SBenoît Canet# @file: the filename of the backing device 4701ad166b6SBenoît Canet# 4711d8bda12SMarkus Armbruster# @node-name: the name of the block driver node (Since 2.0) 4721ad166b6SBenoît Canet# 4731ad166b6SBenoît Canet# @ro: true if the backing device was open read-only 4741ad166b6SBenoît Canet# 475a937b6aaSMarkus Armbruster# @drv: the name of the block format used to open the backing device. 476a937b6aaSMarkus Armbruster# As of 0.14 this can be: 'blkdebug', 'bochs', 'cloop', 'cow', 477a937b6aaSMarkus Armbruster# 'dmg', 'file', 'file', 'ftp', 'ftps', 'host_cdrom', 478a937b6aaSMarkus Armbruster# 'host_device', 'http', 'https', 'luks', 'nbd', 'parallels', 479a937b6aaSMarkus Armbruster# 'qcow', 'qcow2', 'raw', 'vdi', 'vmdk', 'vpc', 'vvfat' 2.2: 480a937b6aaSMarkus Armbruster# 'archipelago' added, 'cow' dropped 2.3: 'host_floppy' deprecated 481a937b6aaSMarkus Armbruster# 2.5: 'host_floppy' dropped 2.6: 'luks' added 2.8: 'replication' 482a937b6aaSMarkus Armbruster# added, 'tftp' dropped 2.9: 'archipelago' dropped 4831ad166b6SBenoît Canet# 4841d8bda12SMarkus Armbruster# @backing_file: the name of the backing file (for copy-on-write) 4851ad166b6SBenoît Canet# 486a937b6aaSMarkus Armbruster# @backing_file_depth: number of files in the backing file chain 487a937b6aaSMarkus Armbruster# (since: 1.2) 4881ad166b6SBenoît Canet# 4891ad166b6SBenoît Canet# @encrypted: true if the backing device is encrypted 4901ad166b6SBenoît Canet# 4911ad166b6SBenoît Canet# @detect_zeroes: detect and optimize zero writes (Since 2.1) 4921ad166b6SBenoît Canet# 4931ad166b6SBenoît Canet# @bps: total throughput limit in bytes per second is specified 4941ad166b6SBenoît Canet# 4951ad166b6SBenoît Canet# @bps_rd: read throughput limit in bytes per second is specified 4961ad166b6SBenoît Canet# 4971ad166b6SBenoît Canet# @bps_wr: write throughput limit in bytes per second is specified 4981ad166b6SBenoît Canet# 4991ad166b6SBenoît Canet# @iops: total I/O operations per second is specified 5001ad166b6SBenoît Canet# 5011ad166b6SBenoît Canet# @iops_rd: read I/O operations per second is specified 5021ad166b6SBenoît Canet# 5031ad166b6SBenoît Canet# @iops_wr: write I/O operations per second is specified 5041ad166b6SBenoît Canet# 5051ad166b6SBenoît Canet# @image: the info of image used (since: 1.6) 5061ad166b6SBenoît Canet# 507a937b6aaSMarkus Armbruster# @bps_max: total throughput limit during bursts, in bytes (Since 1.7) 5081ad166b6SBenoît Canet# 509a937b6aaSMarkus Armbruster# @bps_rd_max: read throughput limit during bursts, in bytes (Since 510a937b6aaSMarkus Armbruster# 1.7) 5111ad166b6SBenoît Canet# 512a937b6aaSMarkus Armbruster# @bps_wr_max: write throughput limit during bursts, in bytes (Since 513a937b6aaSMarkus Armbruster# 1.7) 5141ad166b6SBenoît Canet# 515f2de3b92SMarkus Armbruster# @iops_max: total I/O operations per second during bursts, in bytes 516f2de3b92SMarkus Armbruster# (Since 1.7) 5171ad166b6SBenoît Canet# 518f2de3b92SMarkus Armbruster# @iops_rd_max: read I/O operations per second during bursts, in bytes 519f2de3b92SMarkus Armbruster# (Since 1.7) 5201ad166b6SBenoît Canet# 521f2de3b92SMarkus Armbruster# @iops_wr_max: write I/O operations per second during bursts, in 522f2de3b92SMarkus Armbruster# bytes (Since 1.7) 523398befdfSAlberto Garcia# 524f2de3b92SMarkus Armbruster# @bps_max_length: maximum length of the @bps_max burst period, in 525f2de3b92SMarkus Armbruster# seconds. (Since 2.6) 526f2de3b92SMarkus Armbruster# 527f2de3b92SMarkus Armbruster# @bps_rd_max_length: maximum length of the @bps_rd_max burst period, 528f2de3b92SMarkus Armbruster# in seconds. (Since 2.6) 529f2de3b92SMarkus Armbruster# 530f2de3b92SMarkus Armbruster# @bps_wr_max_length: maximum length of the @bps_wr_max burst period, 531f2de3b92SMarkus Armbruster# in seconds. (Since 2.6) 532f2de3b92SMarkus Armbruster# 533f2de3b92SMarkus Armbruster# @iops_max_length: maximum length of the @iops burst period, in 534f2de3b92SMarkus Armbruster# seconds. (Since 2.6) 535f2de3b92SMarkus Armbruster# 536f2de3b92SMarkus Armbruster# @iops_rd_max_length: maximum length of the @iops_rd_max burst 537398befdfSAlberto Garcia# period, in seconds. (Since 2.6) 538398befdfSAlberto Garcia# 539f2de3b92SMarkus Armbruster# @iops_wr_max_length: maximum length of the @iops_wr_max burst 540398befdfSAlberto Garcia# period, in seconds. (Since 2.6) 541398befdfSAlberto Garcia# 5421d8bda12SMarkus Armbruster# @iops_size: an I/O size in bytes (Since 1.7) 5431ad166b6SBenoît Canet# 5441d8bda12SMarkus Armbruster# @group: throttle group name (Since 2.4) 545b8fe1694SAlberto Garcia# 5469e193c5aSKevin Wolf# @cache: the cache mode used for the block device (since: 2.3) 5479e193c5aSKevin Wolf# 548a937b6aaSMarkus Armbruster# @write_threshold: configured write threshold for the device. 0 if 549a937b6aaSMarkus Armbruster# disabled. (Since 2.3) 550e2462113SFrancesco Romani# 551a937b6aaSMarkus Armbruster# @dirty-bitmaps: dirty bitmaps information (only present if node has 552a937b6aaSMarkus Armbruster# one or more dirty bitmaps) (Since 4.2) 553590a63d5SVladimir Sementsov-Ogievskiy# 5549bc6e893SMarkus Armbruster# Since: 0.14 5551ad166b6SBenoît Canet## 556895a2a80SEric Blake{ 'struct': 'BlockDeviceInfo', 5571ad166b6SBenoît Canet 'data': { 'file': 'str', '*node-name': 'str', 'ro': 'bool', 'drv': 'str', 5581ad166b6SBenoît Canet '*backing_file': 'str', 'backing_file_depth': 'int', 559df4097aeSMarkus Armbruster 'encrypted': 'bool', 5601ad166b6SBenoît Canet 'detect_zeroes': 'BlockdevDetectZeroesOptions', 5611ad166b6SBenoît Canet 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int', 5621ad166b6SBenoît Canet 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', 5631ad166b6SBenoît Canet 'image': 'ImageInfo', 5641ad166b6SBenoît Canet '*bps_max': 'int', '*bps_rd_max': 'int', 5651ad166b6SBenoît Canet '*bps_wr_max': 'int', '*iops_max': 'int', 5661ad166b6SBenoît Canet '*iops_rd_max': 'int', '*iops_wr_max': 'int', 567398befdfSAlberto Garcia '*bps_max_length': 'int', '*bps_rd_max_length': 'int', 568398befdfSAlberto Garcia '*bps_wr_max_length': 'int', '*iops_max_length': 'int', 569398befdfSAlberto Garcia '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int', 570b8fe1694SAlberto Garcia '*iops_size': 'int', '*group': 'str', 'cache': 'BlockdevCacheInfo', 571590a63d5SVladimir Sementsov-Ogievskiy 'write_threshold': 'int', '*dirty-bitmaps': ['BlockDirtyInfo'] } } 5721ad166b6SBenoît Canet 5731ad166b6SBenoît Canet## 5741ad166b6SBenoît Canet# @BlockDeviceIoStatus: 5751ad166b6SBenoît Canet# 5761ad166b6SBenoît Canet# An enumeration of block device I/O status. 5771ad166b6SBenoît Canet# 5781ad166b6SBenoît Canet# @ok: The last I/O operation has succeeded 5791ad166b6SBenoît Canet# 5801ad166b6SBenoît Canet# @failed: The last I/O operation has failed 5811ad166b6SBenoît Canet# 582a937b6aaSMarkus Armbruster# @nospace: The last I/O operation has failed due to a no-space 583a937b6aaSMarkus Armbruster# condition 5841ad166b6SBenoît Canet# 5851ad166b6SBenoît Canet# Since: 1.0 5861ad166b6SBenoît Canet## 5871ad166b6SBenoît Canet{ 'enum': 'BlockDeviceIoStatus', 'data': [ 'ok', 'failed', 'nospace' ] } 5881ad166b6SBenoît Canet 5891ad166b6SBenoît Canet## 5901ad166b6SBenoît Canet# @BlockDirtyInfo: 5911ad166b6SBenoît Canet# 5921ad166b6SBenoît Canet# Block dirty bitmap information. 5931ad166b6SBenoît Canet# 5941d8bda12SMarkus Armbruster# @name: the name of the dirty bitmap (Since 2.4) 5950db6e54aSFam Zheng# 5961ad166b6SBenoît Canet# @count: number of dirty bytes according to the dirty bitmap 5971ad166b6SBenoît Canet# 5981ad166b6SBenoît Canet# @granularity: granularity of the dirty bitmap in bytes (since 1.4) 5991ad166b6SBenoît Canet# 600a937b6aaSMarkus Armbruster# @recording: true if the bitmap is recording new writes from the 601a937b6aaSMarkus Armbruster# guest. (since 4.0) 6024db6ceb0SJohn Snow# 6034db6ceb0SJohn Snow# @busy: true if the bitmap is in-use by some operation (NBD or jobs) 6044db6ceb0SJohn Snow# and cannot be modified via QMP or used by another operation. 6059a5af2f9SMarkus Armbruster# (since 4.0) 606a113534fSJohn Snow# 607a937b6aaSMarkus Armbruster# @persistent: true if the bitmap was stored on disk, is scheduled to 608a937b6aaSMarkus Armbruster# be stored on disk, or both. (since 4.0) 609b0f45559SJohn Snow# 610a937b6aaSMarkus Armbruster# @inconsistent: true if this is a persistent bitmap that was 611a937b6aaSMarkus Armbruster# improperly stored. Implies @persistent to be true; @recording 612a937b6aaSMarkus Armbruster# and @busy to be false. This bitmap cannot be used. To remove 613b0f45559SJohn Snow# it, use @block-dirty-bitmap-remove. (Since 4.0) 614f67cf661SEric Blake# 6151ad166b6SBenoît Canet# Since: 1.3 6161ad166b6SBenoît Canet## 617895a2a80SEric Blake{ 'struct': 'BlockDirtyInfo', 618a113534fSJohn Snow 'data': {'*name': 'str', 'count': 'int', 'granularity': 'uint32', 619df4097aeSMarkus Armbruster 'recording': 'bool', 'busy': 'bool', 620b0f45559SJohn Snow 'persistent': 'bool', '*inconsistent': 'bool' } } 6211ad166b6SBenoît Canet 6221ad166b6SBenoît Canet## 623b8968c87SAndrey Shinkevich# @Qcow2BitmapInfoFlags: 624b8968c87SAndrey Shinkevich# 625b8968c87SAndrey Shinkevich# An enumeration of flags that a bitmap can report to the user. 626b8968c87SAndrey Shinkevich# 627a937b6aaSMarkus Armbruster# @in-use: This flag is set by any process actively modifying the 628a937b6aaSMarkus Armbruster# qcow2 file, and cleared when the updated bitmap is flushed to 629a937b6aaSMarkus Armbruster# the qcow2 image. The presence of this flag in an offline image 630a937b6aaSMarkus Armbruster# means that the bitmap was not saved correctly after its last 631a937b6aaSMarkus Armbruster# usage, and may contain inconsistent data. 632b8968c87SAndrey Shinkevich# 633a937b6aaSMarkus Armbruster# @auto: The bitmap must reflect all changes of the virtual disk by 634a937b6aaSMarkus Armbruster# any application that would write to this qcow2 file. 635b8968c87SAndrey Shinkevich# 636b8968c87SAndrey Shinkevich# Since: 4.0 637b8968c87SAndrey Shinkevich## 638b8968c87SAndrey Shinkevich{ 'enum': 'Qcow2BitmapInfoFlags', 639b8968c87SAndrey Shinkevich 'data': ['in-use', 'auto'] } 640b8968c87SAndrey Shinkevich 641b8968c87SAndrey Shinkevich## 642b8968c87SAndrey Shinkevich# @Qcow2BitmapInfo: 643b8968c87SAndrey Shinkevich# 644b8968c87SAndrey Shinkevich# Qcow2 bitmap information. 645b8968c87SAndrey Shinkevich# 646b8968c87SAndrey Shinkevich# @name: the name of the bitmap 647b8968c87SAndrey Shinkevich# 648b8968c87SAndrey Shinkevich# @granularity: granularity of the bitmap in bytes 649b8968c87SAndrey Shinkevich# 650b8968c87SAndrey Shinkevich# @flags: flags of the bitmap 651b8968c87SAndrey Shinkevich# 652b8968c87SAndrey Shinkevich# Since: 4.0 653b8968c87SAndrey Shinkevich## 654b8968c87SAndrey Shinkevich{ 'struct': 'Qcow2BitmapInfo', 655b8968c87SAndrey Shinkevich 'data': {'name': 'str', 'granularity': 'uint32', 656b8968c87SAndrey Shinkevich 'flags': ['Qcow2BitmapInfoFlags'] } } 657b8968c87SAndrey Shinkevich 658b8968c87SAndrey Shinkevich## 6597e5c776dSVladimir Sementsov-Ogievskiy# @BlockLatencyHistogramInfo: 6607e5c776dSVladimir Sementsov-Ogievskiy# 6617e5c776dSVladimir Sementsov-Ogievskiy# Block latency histogram. 6627e5c776dSVladimir Sementsov-Ogievskiy# 663a937b6aaSMarkus Armbruster# @boundaries: list of interval boundary values in nanoseconds, all 664a937b6aaSMarkus Armbruster# greater than zero and in ascending order. For example, the list 665a937b6aaSMarkus Armbruster# [10, 50, 100] produces the following histogram intervals: [0, 666a937b6aaSMarkus Armbruster# 10), [10, 50), [50, 100), [100, +inf). 6677e5c776dSVladimir Sementsov-Ogievskiy# 668a937b6aaSMarkus Armbruster# @bins: list of io request counts corresponding to histogram 669dad3c956SMarkus Armbruster# intervals, one more element than @boundaries has. For the 670dad3c956SMarkus Armbruster# example above, @bins may be something like [3, 1, 5, 2], and 671d9884878SMarkus Armbruster# corresponding histogram looks like:: 672a0fcff38SPeter Maydell# 673a0fcff38SPeter Maydell# 5| * 674a0fcff38SPeter Maydell# 4| * 675a0fcff38SPeter Maydell# 3| * * 676a0fcff38SPeter Maydell# 2| * * * 677a0fcff38SPeter Maydell# 1| * * * * 678a0fcff38SPeter Maydell# +------------------ 679a0fcff38SPeter Maydell# 10 50 100 6807e5c776dSVladimir Sementsov-Ogievskiy# 681cb8aac37SVladimir Sementsov-Ogievskiy# Since: 4.0 6827e5c776dSVladimir Sementsov-Ogievskiy## 6837e5c776dSVladimir Sementsov-Ogievskiy{ 'struct': 'BlockLatencyHistogramInfo', 6847e5c776dSVladimir Sementsov-Ogievskiy 'data': {'boundaries': ['uint64'], 'bins': ['uint64'] } } 6857e5c776dSVladimir Sementsov-Ogievskiy 6867e5c776dSVladimir Sementsov-Ogievskiy## 6871ad166b6SBenoît Canet# @BlockInfo: 6881ad166b6SBenoît Canet# 689a937b6aaSMarkus Armbruster# Block device information. This structure describes a virtual device 690a937b6aaSMarkus Armbruster# and the backing device associated with it. 6911ad166b6SBenoît Canet# 6921ad166b6SBenoît Canet# @device: The device name associated with the virtual device. 6931ad166b6SBenoît Canet# 694a937b6aaSMarkus Armbruster# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the 695a937b6aaSMarkus Armbruster# block device. (since 2.10) 69646eade7bSKevin Wolf# 697a937b6aaSMarkus Armbruster# @type: This field is returned only for compatibility reasons, it 698a937b6aaSMarkus Armbruster# should not be used (always returns 'unknown') 6991ad166b6SBenoît Canet# 7001ad166b6SBenoît Canet# @removable: True if the device supports removable media. 7011ad166b6SBenoît Canet# 702a937b6aaSMarkus Armbruster# @locked: True if the guest has locked this device from having its 703a937b6aaSMarkus Armbruster# media removed 7041ad166b6SBenoît Canet# 705a937b6aaSMarkus Armbruster# @tray_open: True if the device's tray is open (only present if it 706a937b6aaSMarkus Armbruster# has a tray) 7071ad166b6SBenoît Canet# 7081d8bda12SMarkus Armbruster# @io-status: @BlockDeviceIoStatus. Only present if the device 7091ad166b6SBenoît Canet# supports it and the VM is configured to stop on errors 710f6f55affSMarkus Armbruster# (supported device models: virtio-blk, IDE, SCSI except 711f6f55affSMarkus Armbruster# scsi-generic) 7121ad166b6SBenoît Canet# 7131d8bda12SMarkus Armbruster# @inserted: @BlockDeviceInfo describing the device if media is 7141ad166b6SBenoît Canet# present 7151ad166b6SBenoît Canet# 7169bc6e893SMarkus Armbruster# Since: 0.14 7171ad166b6SBenoît Canet## 718895a2a80SEric Blake{ 'struct': 'BlockInfo', 71946eade7bSKevin Wolf 'data': {'device': 'str', '*qdev': 'str', 'type': 'str', 'removable': 'bool', 7201ad166b6SBenoît Canet 'locked': 'bool', '*inserted': 'BlockDeviceInfo', 721e67d8e29SDaniel P. Berrangé '*tray_open': 'bool', '*io-status': 'BlockDeviceIoStatus' } } 7221ad166b6SBenoît Canet 7231ad166b6SBenoît Canet## 72490880ff1SStefan Hajnoczi# @BlockMeasureInfo: 72590880ff1SStefan Hajnoczi# 726a937b6aaSMarkus Armbruster# Image file size calculation information. This structure describes 727a937b6aaSMarkus Armbruster# the size requirements for creating a new image file. 72890880ff1SStefan Hajnoczi# 729a937b6aaSMarkus Armbruster# The size requirements depend on the new image file format. File 730a937b6aaSMarkus Armbruster# size always equals virtual disk size for the 'raw' format, even for 731a937b6aaSMarkus Armbruster# sparse POSIX files. Compact formats such as 'qcow2' represent 732a937b6aaSMarkus Armbruster# unallocated and zero regions efficiently so file size may be smaller 733a937b6aaSMarkus Armbruster# than virtual disk size. 73490880ff1SStefan Hajnoczi# 735a937b6aaSMarkus Armbruster# The values are upper bounds that are guaranteed to fit the new image 736a937b6aaSMarkus Armbruster# file. Subsequent modification, such as internal snapshot or further 737a937b6aaSMarkus Armbruster# bitmap creation, may require additional space and is not covered 738a937b6aaSMarkus Armbruster# here. 73990880ff1SStefan Hajnoczi# 740a937b6aaSMarkus Armbruster# @required: Size required for a new image file, in bytes, when 741a937b6aaSMarkus Armbruster# copying just allocated guest-visible contents. 74290880ff1SStefan Hajnoczi# 743a937b6aaSMarkus Armbruster# @fully-allocated: Image file size, in bytes, once data has been 744a937b6aaSMarkus Armbruster# written to all sectors, when copying just guest-visible 745a937b6aaSMarkus Armbruster# contents. 7465d72c68bSEric Blake# 747a937b6aaSMarkus Armbruster# @bitmaps: Additional size required if all the top-level bitmap 748a937b6aaSMarkus Armbruster# metadata in the source image were to be copied to the 749a937b6aaSMarkus Armbruster# destination, present only when source and destination both 750a937b6aaSMarkus Armbruster# support persistent bitmaps. (since 5.1) 75190880ff1SStefan Hajnoczi# 75290880ff1SStefan Hajnoczi# Since: 2.10 75390880ff1SStefan Hajnoczi## 75490880ff1SStefan Hajnoczi{ 'struct': 'BlockMeasureInfo', 7555d72c68bSEric Blake 'data': {'required': 'int', 'fully-allocated': 'int', '*bitmaps': 'int'} } 75690880ff1SStefan Hajnoczi 75790880ff1SStefan Hajnoczi## 7581ad166b6SBenoît Canet# @query-block: 7591ad166b6SBenoît Canet# 7601ad166b6SBenoît Canet# Get a list of BlockInfo for all virtual block devices. 7611ad166b6SBenoît Canet# 762a937b6aaSMarkus Armbruster# Returns: a list of @BlockInfo describing each virtual block device. 763a937b6aaSMarkus Armbruster# Filter nodes that were created implicitly are skipped over. 7641ad166b6SBenoît Canet# 7659bc6e893SMarkus Armbruster# Since: 0.14 766978cceabSMarc-André Lureau# 76714b48aaaSJohn Snow# .. qmp-example:: 768978cceabSMarc-André Lureau# 769978cceabSMarc-André Lureau# -> { "execute": "query-block" } 770978cceabSMarc-André Lureau# <- { 771978cceabSMarc-André Lureau# "return":[ 772978cceabSMarc-André Lureau# { 773978cceabSMarc-André Lureau# "io-status": "ok", 774978cceabSMarc-André Lureau# "device":"ide0-hd0", 775978cceabSMarc-André Lureau# "locked":false, 776978cceabSMarc-André Lureau# "removable":false, 777978cceabSMarc-André Lureau# "inserted":{ 778978cceabSMarc-André Lureau# "ro":false, 779978cceabSMarc-André Lureau# "drv":"qcow2", 780978cceabSMarc-André Lureau# "encrypted":false, 781978cceabSMarc-André Lureau# "file":"disks/test.qcow2", 782978cceabSMarc-André Lureau# "backing_file_depth":1, 783978cceabSMarc-André Lureau# "bps":1000000, 784978cceabSMarc-André Lureau# "bps_rd":0, 785978cceabSMarc-André Lureau# "bps_wr":0, 786978cceabSMarc-André Lureau# "iops":1000000, 787978cceabSMarc-André Lureau# "iops_rd":0, 788978cceabSMarc-André Lureau# "iops_wr":0, 789978cceabSMarc-André Lureau# "bps_max": 8000000, 790978cceabSMarc-André Lureau# "bps_rd_max": 0, 791978cceabSMarc-André Lureau# "bps_wr_max": 0, 792978cceabSMarc-André Lureau# "iops_max": 0, 793978cceabSMarc-André Lureau# "iops_rd_max": 0, 794978cceabSMarc-André Lureau# "iops_wr_max": 0, 795978cceabSMarc-André Lureau# "iops_size": 0, 796978cceabSMarc-André Lureau# "detect_zeroes": "on", 797978cceabSMarc-André Lureau# "write_threshold": 0, 798978cceabSMarc-André Lureau# "image":{ 799978cceabSMarc-André Lureau# "filename":"disks/test.qcow2", 800978cceabSMarc-André Lureau# "format":"qcow2", 801978cceabSMarc-André Lureau# "virtual-size":2048000, 802978cceabSMarc-André Lureau# "backing_file":"base.qcow2", 803978cceabSMarc-André Lureau# "full-backing-filename":"disks/base.qcow2", 804978cceabSMarc-André Lureau# "backing-filename-format":"qcow2", 805978cceabSMarc-André Lureau# "snapshots":[ 806978cceabSMarc-André Lureau# { 807978cceabSMarc-André Lureau# "id": "1", 808978cceabSMarc-André Lureau# "name": "snapshot1", 809978cceabSMarc-André Lureau# "vm-state-size": 0, 810978cceabSMarc-André Lureau# "date-sec": 10000200, 811978cceabSMarc-André Lureau# "date-nsec": 12, 812978cceabSMarc-André Lureau# "vm-clock-sec": 206, 813978cceabSMarc-André Lureau# "vm-clock-nsec": 30 814978cceabSMarc-André Lureau# } 815978cceabSMarc-André Lureau# ], 816978cceabSMarc-André Lureau# "backing-image":{ 817978cceabSMarc-André Lureau# "filename":"disks/base.qcow2", 818978cceabSMarc-André Lureau# "format":"qcow2", 819978cceabSMarc-André Lureau# "virtual-size":2048000 820978cceabSMarc-André Lureau# } 821978cceabSMarc-André Lureau# } 822978cceabSMarc-André Lureau# }, 82346eade7bSKevin Wolf# "qdev": "ide_disk", 824978cceabSMarc-André Lureau# "type":"unknown" 825978cceabSMarc-André Lureau# }, 826978cceabSMarc-André Lureau# { 827978cceabSMarc-André Lureau# "io-status": "ok", 828978cceabSMarc-André Lureau# "device":"ide1-cd0", 829978cceabSMarc-André Lureau# "locked":false, 830978cceabSMarc-André Lureau# "removable":true, 83146eade7bSKevin Wolf# "qdev": "/machine/unattached/device[23]", 83246eade7bSKevin Wolf# "tray_open": false, 833978cceabSMarc-André Lureau# "type":"unknown" 834978cceabSMarc-André Lureau# }, 835978cceabSMarc-André Lureau# { 836978cceabSMarc-André Lureau# "device":"floppy0", 837978cceabSMarc-André Lureau# "locked":false, 838978cceabSMarc-André Lureau# "removable":true, 83946eade7bSKevin Wolf# "qdev": "/machine/unattached/device[20]", 840978cceabSMarc-André Lureau# "type":"unknown" 841978cceabSMarc-André Lureau# }, 842978cceabSMarc-André Lureau# { 843978cceabSMarc-André Lureau# "device":"sd0", 844978cceabSMarc-André Lureau# "locked":false, 845978cceabSMarc-André Lureau# "removable":true, 846978cceabSMarc-André Lureau# "type":"unknown" 847978cceabSMarc-André Lureau# } 848978cceabSMarc-André Lureau# ] 849978cceabSMarc-André Lureau# } 8501ad166b6SBenoît Canet## 851f55ba801SPaolo Bonzini{ 'command': 'query-block', 'returns': ['BlockInfo'], 852f55ba801SPaolo Bonzini 'allow-preconfig': true } 8531ad166b6SBenoît Canet 854979e9b03SAlberto Garcia## 855979e9b03SAlberto Garcia# @BlockDeviceTimedStats: 856979e9b03SAlberto Garcia# 857979e9b03SAlberto Garcia# Statistics of a block device during a given interval of time. 858979e9b03SAlberto Garcia# 859a937b6aaSMarkus Armbruster# @interval_length: Interval used for calculating the statistics, in 860a937b6aaSMarkus Armbruster# seconds. 861979e9b03SAlberto Garcia# 862979e9b03SAlberto Garcia# @min_rd_latency_ns: Minimum latency of read operations in the 863979e9b03SAlberto Garcia# defined interval, in nanoseconds. 864979e9b03SAlberto Garcia# 865979e9b03SAlberto Garcia# @min_wr_latency_ns: Minimum latency of write operations in the 866979e9b03SAlberto Garcia# defined interval, in nanoseconds. 867979e9b03SAlberto Garcia# 8689e272073SMarkus Armbruster# @min_zone_append_latency_ns: Minimum latency of zone append 8699e272073SMarkus Armbruster# operations in the defined interval, in nanoseconds (since 8.1) 87052eb76f4SSam Li# 871979e9b03SAlberto Garcia# @min_flush_latency_ns: Minimum latency of flush operations in the 872979e9b03SAlberto Garcia# defined interval, in nanoseconds. 873979e9b03SAlberto Garcia# 874979e9b03SAlberto Garcia# @max_rd_latency_ns: Maximum latency of read operations in the 875979e9b03SAlberto Garcia# defined interval, in nanoseconds. 876979e9b03SAlberto Garcia# 877979e9b03SAlberto Garcia# @max_wr_latency_ns: Maximum latency of write operations in the 878979e9b03SAlberto Garcia# defined interval, in nanoseconds. 879979e9b03SAlberto Garcia# 8809e272073SMarkus Armbruster# @max_zone_append_latency_ns: Maximum latency of zone append 8819e272073SMarkus Armbruster# operations in the defined interval, in nanoseconds (since 8.1) 88252eb76f4SSam Li# 883979e9b03SAlberto Garcia# @max_flush_latency_ns: Maximum latency of flush operations in the 884979e9b03SAlberto Garcia# defined interval, in nanoseconds. 885979e9b03SAlberto Garcia# 886979e9b03SAlberto Garcia# @avg_rd_latency_ns: Average latency of read operations in the 887979e9b03SAlberto Garcia# defined interval, in nanoseconds. 888979e9b03SAlberto Garcia# 889979e9b03SAlberto Garcia# @avg_wr_latency_ns: Average latency of write operations in the 890979e9b03SAlberto Garcia# defined interval, in nanoseconds. 891979e9b03SAlberto Garcia# 8929e272073SMarkus Armbruster# @avg_zone_append_latency_ns: Average latency of zone append 8939e272073SMarkus Armbruster# operations in the defined interval, in nanoseconds (since 8.1) 89452eb76f4SSam Li# 895979e9b03SAlberto Garcia# @avg_flush_latency_ns: Average latency of flush operations in the 896979e9b03SAlberto Garcia# defined interval, in nanoseconds. 897979e9b03SAlberto Garcia# 898a937b6aaSMarkus Armbruster# @avg_rd_queue_depth: Average number of pending read operations in 899a937b6aaSMarkus Armbruster# the defined interval. 90096e4dedaSAlberto Garcia# 901a937b6aaSMarkus Armbruster# @avg_wr_queue_depth: Average number of pending write operations in 902a937b6aaSMarkus Armbruster# the defined interval. 90396e4dedaSAlberto Garcia# 90452eb76f4SSam Li# @avg_zone_append_queue_depth: Average number of pending zone append 9059e272073SMarkus Armbruster# operations in the defined interval (since 8.1). 90652eb76f4SSam Li# 907979e9b03SAlberto Garcia# Since: 2.5 908979e9b03SAlberto Garcia## 909979e9b03SAlberto Garcia{ 'struct': 'BlockDeviceTimedStats', 910979e9b03SAlberto Garcia 'data': { 'interval_length': 'int', 'min_rd_latency_ns': 'int', 911979e9b03SAlberto Garcia 'max_rd_latency_ns': 'int', 'avg_rd_latency_ns': 'int', 912979e9b03SAlberto Garcia 'min_wr_latency_ns': 'int', 'max_wr_latency_ns': 'int', 91352eb76f4SSam Li 'avg_wr_latency_ns': 'int', 'min_zone_append_latency_ns': 'int', 91452eb76f4SSam Li 'max_zone_append_latency_ns': 'int', 91552eb76f4SSam Li 'avg_zone_append_latency_ns': 'int', 91652eb76f4SSam Li 'min_flush_latency_ns': 'int', 'max_flush_latency_ns': 'int', 91752eb76f4SSam Li 'avg_flush_latency_ns': 'int', 'avg_rd_queue_depth': 'number', 91852eb76f4SSam Li 'avg_wr_queue_depth': 'number', 91952eb76f4SSam Li 'avg_zone_append_queue_depth': 'number' } } 920979e9b03SAlberto Garcia 9211ad166b6SBenoît Canet## 9221ad166b6SBenoît Canet# @BlockDeviceStats: 9231ad166b6SBenoît Canet# 9241ad166b6SBenoît Canet# Statistics of a virtual block device or a block backing device. 9251ad166b6SBenoît Canet# 9261ad166b6SBenoît Canet# @rd_bytes: The number of bytes read by the device. 9271ad166b6SBenoît Canet# 9281ad166b6SBenoît Canet# @wr_bytes: The number of bytes written by the device. 9291ad166b6SBenoît Canet# 9309e272073SMarkus Armbruster# @zone_append_bytes: The number of bytes appended by the zoned 9319e272073SMarkus Armbruster# devices (since 8.1) 93252eb76f4SSam Li# 933159f85ddSAnton Nefedov# @unmap_bytes: The number of bytes unmapped by the device (Since 4.2) 934159f85ddSAnton Nefedov# 935a937b6aaSMarkus Armbruster# @rd_operations: The number of read operations performed by the 936a937b6aaSMarkus Armbruster# device. 9371ad166b6SBenoît Canet# 938a937b6aaSMarkus Armbruster# @wr_operations: The number of write operations performed by the 939a937b6aaSMarkus Armbruster# device. 9401ad166b6SBenoît Canet# 9419e272073SMarkus Armbruster# @zone_append_operations: The number of zone append operations 9429e272073SMarkus Armbruster# performed by the zoned devices (since 8.1) 94352eb76f4SSam Li# 944a937b6aaSMarkus Armbruster# @flush_operations: The number of cache flush operations performed by 945a937b6aaSMarkus Armbruster# the device (since 0.15) 9461ad166b6SBenoît Canet# 947a937b6aaSMarkus Armbruster# @unmap_operations: The number of unmap operations performed by the 948a937b6aaSMarkus Armbruster# device (Since 4.2) 949159f85ddSAnton Nefedov# 950a937b6aaSMarkus Armbruster# @rd_total_time_ns: Total time spent on reads in nanoseconds (since 951a937b6aaSMarkus Armbruster# 0.15). 952329d27e3SAnton Nefedov# 953a937b6aaSMarkus Armbruster# @wr_total_time_ns: Total time spent on writes in nanoseconds (since 954a937b6aaSMarkus Armbruster# 0.15). 955329d27e3SAnton Nefedov# 95652eb76f4SSam Li# @zone_append_total_time_ns: Total time spent on zone append writes 95752eb76f4SSam Li# in nanoseconds (since 8.1) 95852eb76f4SSam Li# 959a937b6aaSMarkus Armbruster# @flush_total_time_ns: Total time spent on cache flushes in 960a937b6aaSMarkus Armbruster# nanoseconds (since 0.15). 9611ad166b6SBenoît Canet# 962a937b6aaSMarkus Armbruster# @unmap_total_time_ns: Total time spent on unmap operations in 963a937b6aaSMarkus Armbruster# nanoseconds (Since 4.2) 964159f85ddSAnton Nefedov# 965a937b6aaSMarkus Armbruster# @wr_highest_offset: The offset after the greatest byte written to 966a937b6aaSMarkus Armbruster# the device. The intended use of this information is for 967a937b6aaSMarkus Armbruster# growable sparse files (like qcow2) that are used on top of a 968a937b6aaSMarkus Armbruster# physical device. 9691ad166b6SBenoît Canet# 970a937b6aaSMarkus Armbruster# @rd_merged: Number of read requests that have been merged into 971a937b6aaSMarkus Armbruster# another request (Since 2.3). 972f4564d53SPeter Lieven# 973a937b6aaSMarkus Armbruster# @wr_merged: Number of write requests that have been merged into 974a937b6aaSMarkus Armbruster# another request (Since 2.3). 975f4564d53SPeter Lieven# 9769e272073SMarkus Armbruster# @zone_append_merged: Number of zone append requests that have been 9779e272073SMarkus Armbruster# merged into another request (since 8.1) 97852eb76f4SSam Li# 979a937b6aaSMarkus Armbruster# @unmap_merged: Number of unmap requests that have been merged into 980a937b6aaSMarkus Armbruster# another request (Since 4.2) 981159f85ddSAnton Nefedov# 982a937b6aaSMarkus Armbruster# @idle_time_ns: Time since the last I/O operation, in nanoseconds. 983a937b6aaSMarkus Armbruster# If the field is absent it means that there haven't been any 984a937b6aaSMarkus Armbruster# operations yet (Since 2.5). 985cb38fffbSAlberto Garcia# 9867ee12dafSAlberto Garcia# @failed_rd_operations: The number of failed read operations 9877ee12dafSAlberto Garcia# performed by the device (Since 2.5) 9887ee12dafSAlberto Garcia# 9897ee12dafSAlberto Garcia# @failed_wr_operations: The number of failed write operations 9907ee12dafSAlberto Garcia# performed by the device (Since 2.5) 9917ee12dafSAlberto Garcia# 9929e272073SMarkus Armbruster# @failed_zone_append_operations: The number of failed zone append 9939e272073SMarkus Armbruster# write operations performed by the zoned devices (since 8.1) 99452eb76f4SSam Li# 9957ee12dafSAlberto Garcia# @failed_flush_operations: The number of failed flush operations 9967ee12dafSAlberto Garcia# performed by the device (Since 2.5) 9977ee12dafSAlberto Garcia# 998a937b6aaSMarkus Armbruster# @failed_unmap_operations: The number of failed unmap operations 999a937b6aaSMarkus Armbruster# performed by the device (Since 4.2) 1000159f85ddSAnton Nefedov# 10017ee12dafSAlberto Garcia# @invalid_rd_operations: The number of invalid read operations 10027ee12dafSAlberto Garcia# performed by the device (Since 2.5) 10037ee12dafSAlberto Garcia# 10047ee12dafSAlberto Garcia# @invalid_wr_operations: The number of invalid write operations 10057ee12dafSAlberto Garcia# performed by the device (Since 2.5) 10067ee12dafSAlberto Garcia# 10079e272073SMarkus Armbruster# @invalid_zone_append_operations: The number of invalid zone append 10089e272073SMarkus Armbruster# operations performed by the zoned device (since 8.1) 100952eb76f4SSam Li# 10107ee12dafSAlberto Garcia# @invalid_flush_operations: The number of invalid flush operations 10117ee12dafSAlberto Garcia# performed by the device (Since 2.5) 10127ee12dafSAlberto Garcia# 1013a937b6aaSMarkus Armbruster# @invalid_unmap_operations: The number of invalid unmap operations 1014a937b6aaSMarkus Armbruster# performed by the device (Since 4.2) 1015159f85ddSAnton Nefedov# 1016362e9299SAlberto Garcia# @account_invalid: Whether invalid operations are included in the 1017362e9299SAlberto Garcia# last access statistics (Since 2.5) 1018362e9299SAlberto Garcia# 1019362e9299SAlberto Garcia# @account_failed: Whether failed operations are included in the 1020362e9299SAlberto Garcia# latency and last access statistics (Since 2.5) 1021362e9299SAlberto Garcia# 1022979e9b03SAlberto Garcia# @timed_stats: Statistics specific to the set of previously defined 1023979e9b03SAlberto Garcia# intervals of time (Since 2.5) 1024979e9b03SAlberto Garcia# 1025cb8aac37SVladimir Sementsov-Ogievskiy# @rd_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0) 10267e5c776dSVladimir Sementsov-Ogievskiy# 1027cb8aac37SVladimir Sementsov-Ogievskiy# @wr_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0) 10287e5c776dSVladimir Sementsov-Ogievskiy# 10299e272073SMarkus Armbruster# @zone_append_latency_histogram: @BlockLatencyHistogramInfo. 10309e272073SMarkus Armbruster# (since 8.1) 103152eb76f4SSam Li# 1032cb8aac37SVladimir Sementsov-Ogievskiy# @flush_latency_histogram: @BlockLatencyHistogramInfo. (Since 4.0) 10337e5c776dSVladimir Sementsov-Ogievskiy# 10349bc6e893SMarkus Armbruster# Since: 0.14 10351ad166b6SBenoît Canet## 1036895a2a80SEric Blake{ 'struct': 'BlockDeviceStats', 103752eb76f4SSam Li 'data': {'rd_bytes': 'int', 'wr_bytes': 'int', 'zone_append_bytes': 'int', 103852eb76f4SSam Li 'unmap_bytes' : 'int', 'rd_operations': 'int', 103952eb76f4SSam Li 'wr_operations': 'int', 'zone_append_operations': 'int', 1040159f85ddSAnton Nefedov 'flush_operations': 'int', 'unmap_operations': 'int', 1041329d27e3SAnton Nefedov 'rd_total_time_ns': 'int', 'wr_total_time_ns': 'int', 104252eb76f4SSam Li 'zone_append_total_time_ns': 'int', 'flush_total_time_ns': 'int', 104352eb76f4SSam Li 'unmap_total_time_ns': 'int', 'wr_highest_offset': 'int', 104452eb76f4SSam Li 'rd_merged': 'int', 'wr_merged': 'int', 'zone_append_merged': 'int', 104552eb76f4SSam Li 'unmap_merged': 'int', '*idle_time_ns': 'int', 10467ee12dafSAlberto Garcia 'failed_rd_operations': 'int', 'failed_wr_operations': 'int', 104752eb76f4SSam Li 'failed_zone_append_operations': 'int', 104852eb76f4SSam Li 'failed_flush_operations': 'int', 104952eb76f4SSam Li 'failed_unmap_operations': 'int', 'invalid_rd_operations': 'int', 105052eb76f4SSam Li 'invalid_wr_operations': 'int', 105152eb76f4SSam Li 'invalid_zone_append_operations': 'int', 1052159f85ddSAnton Nefedov 'invalid_flush_operations': 'int', 'invalid_unmap_operations': 'int', 1053979e9b03SAlberto Garcia 'account_invalid': 'bool', 'account_failed': 'bool', 10547e5c776dSVladimir Sementsov-Ogievskiy 'timed_stats': ['BlockDeviceTimedStats'], 1055cb8aac37SVladimir Sementsov-Ogievskiy '*rd_latency_histogram': 'BlockLatencyHistogramInfo', 1056cb8aac37SVladimir Sementsov-Ogievskiy '*wr_latency_histogram': 'BlockLatencyHistogramInfo', 105752eb76f4SSam Li '*zone_append_latency_histogram': 'BlockLatencyHistogramInfo', 1058cb8aac37SVladimir Sementsov-Ogievskiy '*flush_latency_histogram': 'BlockLatencyHistogramInfo' } } 10591ad166b6SBenoît Canet 10601ad166b6SBenoît Canet## 1061d9245599SAnton Nefedov# @BlockStatsSpecificFile: 1062d9245599SAnton Nefedov# 1063d9245599SAnton Nefedov# File driver statistics 1064d9245599SAnton Nefedov# 1065a937b6aaSMarkus Armbruster# @discard-nb-ok: The number of successful discard operations 1066a937b6aaSMarkus Armbruster# performed by the driver. 1067d9245599SAnton Nefedov# 1068a937b6aaSMarkus Armbruster# @discard-nb-failed: The number of failed discard operations 1069a937b6aaSMarkus Armbruster# performed by the driver. 1070d9245599SAnton Nefedov# 1071d9245599SAnton Nefedov# @discard-bytes-ok: The number of bytes discarded by the driver. 1072d9245599SAnton Nefedov# 1073d9245599SAnton Nefedov# Since: 4.2 1074d9245599SAnton Nefedov## 1075d9245599SAnton Nefedov{ 'struct': 'BlockStatsSpecificFile', 1076d9245599SAnton Nefedov 'data': { 1077d9245599SAnton Nefedov 'discard-nb-ok': 'uint64', 1078d9245599SAnton Nefedov 'discard-nb-failed': 'uint64', 1079d9245599SAnton Nefedov 'discard-bytes-ok': 'uint64' } } 1080d9245599SAnton Nefedov 1081d9245599SAnton Nefedov## 1082f25e7ab2SPhilippe Mathieu-Daudé# @BlockStatsSpecificNvme: 1083f25e7ab2SPhilippe Mathieu-Daudé# 1084f25e7ab2SPhilippe Mathieu-Daudé# NVMe driver statistics 1085f25e7ab2SPhilippe Mathieu-Daudé# 1086f25e7ab2SPhilippe Mathieu-Daudé# @completion-errors: The number of completion errors. 1087f25e7ab2SPhilippe Mathieu-Daudé# 1088a937b6aaSMarkus Armbruster# @aligned-accesses: The number of aligned accesses performed by the 1089a937b6aaSMarkus Armbruster# driver. 1090f25e7ab2SPhilippe Mathieu-Daudé# 1091f25e7ab2SPhilippe Mathieu-Daudé# @unaligned-accesses: The number of unaligned accesses performed by 1092f25e7ab2SPhilippe Mathieu-Daudé# the driver. 1093f25e7ab2SPhilippe Mathieu-Daudé# 1094f25e7ab2SPhilippe Mathieu-Daudé# Since: 5.2 1095f25e7ab2SPhilippe Mathieu-Daudé## 1096f25e7ab2SPhilippe Mathieu-Daudé{ 'struct': 'BlockStatsSpecificNvme', 1097f25e7ab2SPhilippe Mathieu-Daudé 'data': { 1098f25e7ab2SPhilippe Mathieu-Daudé 'completion-errors': 'uint64', 1099f25e7ab2SPhilippe Mathieu-Daudé 'aligned-accesses': 'uint64', 1100f25e7ab2SPhilippe Mathieu-Daudé 'unaligned-accesses': 'uint64' } } 1101f25e7ab2SPhilippe Mathieu-Daudé 1102f25e7ab2SPhilippe Mathieu-Daudé## 1103d9245599SAnton Nefedov# @BlockStatsSpecific: 1104d9245599SAnton Nefedov# 1105d9245599SAnton Nefedov# Block driver specific statistics 1106d9245599SAnton Nefedov# 110789a2273bSMarkus Armbruster# @driver: block driver name 110889a2273bSMarkus Armbruster# 1109d9245599SAnton Nefedov# Since: 4.2 1110d9245599SAnton Nefedov## 1111d9245599SAnton Nefedov{ 'union': 'BlockStatsSpecific', 1112d9245599SAnton Nefedov 'base': { 'driver': 'BlockdevDriver' }, 1113d9245599SAnton Nefedov 'discriminator': 'driver', 1114d9245599SAnton Nefedov 'data': { 1115d9245599SAnton Nefedov 'file': 'BlockStatsSpecificFile', 111614176c8dSJoelle van Dyne 'host_device': { 'type': 'BlockStatsSpecificFile', 11178a9f1e1dSMarc-André Lureau 'if': 'HAVE_HOST_BLOCK_DEVICE' }, 1118f25e7ab2SPhilippe Mathieu-Daudé 'nvme': 'BlockStatsSpecificNvme' } } 1119d9245599SAnton Nefedov 1120d9245599SAnton Nefedov## 11211ad166b6SBenoît Canet# @BlockStats: 11221ad166b6SBenoît Canet# 11231ad166b6SBenoît Canet# Statistics of a virtual block device or a block backing device. 11241ad166b6SBenoît Canet# 11251d8bda12SMarkus Armbruster# @device: If the stats are for a virtual block device, the name 11261ad166b6SBenoît Canet# corresponding to the virtual block device. 11271ad166b6SBenoît Canet# 11281d8bda12SMarkus Armbruster# @node-name: The node name of the device. (Since 2.3) 11294875a779SFam Zheng# 1130a937b6aaSMarkus Armbruster# @qdev: The qdev ID, or if no ID is assigned, the QOM path of the 1131a937b6aaSMarkus Armbruster# block device. (since 3.0) 11325a9cb5a9SKevin Wolf# 11331ad166b6SBenoît Canet# @stats: A @BlockDeviceStats for the device. 11341ad166b6SBenoît Canet# 1135d9245599SAnton Nefedov# @driver-specific: Optional driver-specific stats. (Since 4.2) 1136d9245599SAnton Nefedov# 11371d8bda12SMarkus Armbruster# @parent: This describes the file block device if it has one. 1138a937b6aaSMarkus Armbruster# Contains recursively the statistics of the underlying protocol 1139a937b6aaSMarkus Armbruster# (e.g. the host file for a qcow2 image). If there is no 1140a937b6aaSMarkus Armbruster# underlying protocol, this field is omitted 11411ad166b6SBenoît Canet# 11421d8bda12SMarkus Armbruster# @backing: This describes the backing block device if it has one. 11431ad166b6SBenoît Canet# (Since 2.0) 11441ad166b6SBenoît Canet# 11459bc6e893SMarkus Armbruster# Since: 0.14 11461ad166b6SBenoît Canet## 1147895a2a80SEric Blake{ 'struct': 'BlockStats', 11485a9cb5a9SKevin Wolf 'data': {'*device': 'str', '*qdev': 'str', '*node-name': 'str', 11494875a779SFam Zheng 'stats': 'BlockDeviceStats', 1150d9245599SAnton Nefedov '*driver-specific': 'BlockStatsSpecific', 11511ad166b6SBenoît Canet '*parent': 'BlockStats', 11521ad166b6SBenoît Canet '*backing': 'BlockStats'} } 11531ad166b6SBenoît Canet 11541ad166b6SBenoît Canet## 11551ad166b6SBenoît Canet# @query-blockstats: 11561ad166b6SBenoît Canet# 11571ad166b6SBenoît Canet# Query the @BlockStats for all virtual block devices. 11581ad166b6SBenoît Canet# 11591d8bda12SMarkus Armbruster# @query-nodes: If true, the command will query all the block nodes 1160f71eaa74SFam Zheng# that have a node name, in a list which will include "parent" 1161a937b6aaSMarkus Armbruster# information, but not "backing". If false or omitted, the 1162a937b6aaSMarkus Armbruster# behavior is as before - query all the device backends, 116301bed0ffSMarkus Armbruster# recursively including their "parent" and "backing". Filter 116401bed0ffSMarkus Armbruster# nodes that were created implicitly are skipped over in this 116501bed0ffSMarkus Armbruster# mode. (Since 2.3) 1166f71eaa74SFam Zheng# 11671ad166b6SBenoît Canet# Returns: A list of @BlockStats for each virtual block devices. 11681ad166b6SBenoît Canet# 11699bc6e893SMarkus Armbruster# Since: 0.14 1170f2eaea18SMarc-André Lureau# 117114b48aaaSJohn Snow# .. qmp-example:: 1172f2eaea18SMarc-André Lureau# 1173f2eaea18SMarc-André Lureau# -> { "execute": "query-blockstats" } 1174f2eaea18SMarc-André Lureau# <- { 1175f2eaea18SMarc-André Lureau# "return":[ 1176f2eaea18SMarc-André Lureau# { 1177f2eaea18SMarc-André Lureau# "device":"ide0-hd0", 1178f2eaea18SMarc-André Lureau# "parent":{ 1179f2eaea18SMarc-André Lureau# "stats":{ 1180f2eaea18SMarc-André Lureau# "wr_highest_offset":3686448128, 1181f2eaea18SMarc-André Lureau# "wr_bytes":9786368, 1182f2eaea18SMarc-André Lureau# "wr_operations":751, 1183f2eaea18SMarc-André Lureau# "rd_bytes":122567168, 1184f2eaea18SMarc-André Lureau# "rd_operations":36772 1185f2eaea18SMarc-André Lureau# "wr_total_times_ns":313253456 1186f2eaea18SMarc-André Lureau# "rd_total_times_ns":3465673657 1187f2eaea18SMarc-André Lureau# "flush_total_times_ns":49653 1188f2eaea18SMarc-André Lureau# "flush_operations":61, 1189f2eaea18SMarc-André Lureau# "rd_merged":0, 1190f2eaea18SMarc-André Lureau# "wr_merged":0, 1191f2eaea18SMarc-André Lureau# "idle_time_ns":2953431879, 1192f2eaea18SMarc-André Lureau# "account_invalid":true, 1193f2eaea18SMarc-André Lureau# "account_failed":false 1194f2eaea18SMarc-André Lureau# } 1195f2eaea18SMarc-André Lureau# }, 1196f2eaea18SMarc-André Lureau# "stats":{ 1197f2eaea18SMarc-André Lureau# "wr_highest_offset":2821110784, 1198f2eaea18SMarc-André Lureau# "wr_bytes":9786368, 1199f2eaea18SMarc-André Lureau# "wr_operations":692, 1200f2eaea18SMarc-André Lureau# "rd_bytes":122739200, 1201f2eaea18SMarc-André Lureau# "rd_operations":36604 1202f2eaea18SMarc-André Lureau# "flush_operations":51, 1203f2eaea18SMarc-André Lureau# "wr_total_times_ns":313253456 1204f2eaea18SMarc-André Lureau# "rd_total_times_ns":3465673657 1205f2eaea18SMarc-André Lureau# "flush_total_times_ns":49653, 1206f2eaea18SMarc-André Lureau# "rd_merged":0, 1207f2eaea18SMarc-André Lureau# "wr_merged":0, 1208f2eaea18SMarc-André Lureau# "idle_time_ns":2953431879, 1209f2eaea18SMarc-André Lureau# "account_invalid":true, 1210f2eaea18SMarc-André Lureau# "account_failed":false 12115a9cb5a9SKevin Wolf# }, 12125a9cb5a9SKevin Wolf# "qdev": "/machine/unattached/device[23]" 1213f2eaea18SMarc-André Lureau# }, 1214f2eaea18SMarc-André Lureau# { 1215f2eaea18SMarc-André Lureau# "device":"ide1-cd0", 1216f2eaea18SMarc-André Lureau# "stats":{ 1217f2eaea18SMarc-André Lureau# "wr_highest_offset":0, 1218f2eaea18SMarc-André Lureau# "wr_bytes":0, 1219f2eaea18SMarc-André Lureau# "wr_operations":0, 1220f2eaea18SMarc-André Lureau# "rd_bytes":0, 1221f2eaea18SMarc-André Lureau# "rd_operations":0 1222f2eaea18SMarc-André Lureau# "flush_operations":0, 1223f2eaea18SMarc-André Lureau# "wr_total_times_ns":0 1224f2eaea18SMarc-André Lureau# "rd_total_times_ns":0 1225f2eaea18SMarc-André Lureau# "flush_total_times_ns":0, 1226f2eaea18SMarc-André Lureau# "rd_merged":0, 1227f2eaea18SMarc-André Lureau# "wr_merged":0, 1228f2eaea18SMarc-André Lureau# "account_invalid":false, 1229f2eaea18SMarc-André Lureau# "account_failed":false 12305a9cb5a9SKevin Wolf# }, 12315a9cb5a9SKevin Wolf# "qdev": "/machine/unattached/device[24]" 1232f2eaea18SMarc-André Lureau# }, 1233f2eaea18SMarc-André Lureau# { 1234f2eaea18SMarc-André Lureau# "device":"floppy0", 1235f2eaea18SMarc-André Lureau# "stats":{ 1236f2eaea18SMarc-André Lureau# "wr_highest_offset":0, 1237f2eaea18SMarc-André Lureau# "wr_bytes":0, 1238f2eaea18SMarc-André Lureau# "wr_operations":0, 1239f2eaea18SMarc-André Lureau# "rd_bytes":0, 1240f2eaea18SMarc-André Lureau# "rd_operations":0 1241f2eaea18SMarc-André Lureau# "flush_operations":0, 1242f2eaea18SMarc-André Lureau# "wr_total_times_ns":0 1243f2eaea18SMarc-André Lureau# "rd_total_times_ns":0 1244f2eaea18SMarc-André Lureau# "flush_total_times_ns":0, 1245f2eaea18SMarc-André Lureau# "rd_merged":0, 1246f2eaea18SMarc-André Lureau# "wr_merged":0, 1247f2eaea18SMarc-André Lureau# "account_invalid":false, 1248f2eaea18SMarc-André Lureau# "account_failed":false 12495a9cb5a9SKevin Wolf# }, 12505a9cb5a9SKevin Wolf# "qdev": "/machine/unattached/device[16]" 1251f2eaea18SMarc-André Lureau# }, 1252f2eaea18SMarc-André Lureau# { 1253f2eaea18SMarc-André Lureau# "device":"sd0", 1254f2eaea18SMarc-André Lureau# "stats":{ 1255f2eaea18SMarc-André Lureau# "wr_highest_offset":0, 1256f2eaea18SMarc-André Lureau# "wr_bytes":0, 1257f2eaea18SMarc-André Lureau# "wr_operations":0, 1258f2eaea18SMarc-André Lureau# "rd_bytes":0, 1259f2eaea18SMarc-André Lureau# "rd_operations":0 1260f2eaea18SMarc-André Lureau# "flush_operations":0, 1261f2eaea18SMarc-André Lureau# "wr_total_times_ns":0 1262f2eaea18SMarc-André Lureau# "rd_total_times_ns":0 1263f2eaea18SMarc-André Lureau# "flush_total_times_ns":0, 1264f2eaea18SMarc-André Lureau# "rd_merged":0, 1265f2eaea18SMarc-André Lureau# "wr_merged":0, 1266f2eaea18SMarc-André Lureau# "account_invalid":false, 1267f2eaea18SMarc-André Lureau# "account_failed":false 1268f2eaea18SMarc-André Lureau# } 1269f2eaea18SMarc-André Lureau# } 1270f2eaea18SMarc-André Lureau# ] 1271f2eaea18SMarc-André Lureau# } 12721ad166b6SBenoît Canet## 1273f71eaa74SFam Zheng{ 'command': 'query-blockstats', 1274f71eaa74SFam Zheng 'data': { '*query-nodes': 'bool' }, 1275f55ba801SPaolo Bonzini 'returns': ['BlockStats'], 1276f55ba801SPaolo Bonzini 'allow-preconfig': true } 12771ad166b6SBenoît Canet 12781ad166b6SBenoît Canet## 12791ad166b6SBenoît Canet# @BlockdevOnError: 12801ad166b6SBenoît Canet# 12811ad166b6SBenoît Canet# An enumeration of possible behaviors for errors on I/O operations. 1282a937b6aaSMarkus Armbruster# The exact meaning depends on whether the I/O was initiated by a 1283a937b6aaSMarkus Armbruster# guest or by a block job 12841ad166b6SBenoît Canet# 1285a937b6aaSMarkus Armbruster# @report: for guest operations, report the error to the guest; for 1286a937b6aaSMarkus Armbruster# jobs, cancel the job 12871ad166b6SBenoît Canet# 12881ad166b6SBenoît Canet# @ignore: ignore the error, only report a QMP event (BLOCK_IO_ERROR 1289a937b6aaSMarkus Armbruster# or BLOCK_JOB_ERROR). The backup, mirror and commit block jobs 1290a937b6aaSMarkus Armbruster# retry the failing request later and may still complete 1291a937b6aaSMarkus Armbruster# successfully. The stream block job continues to stream and will 1292a937b6aaSMarkus Armbruster# complete with an error. 12931ad166b6SBenoît Canet# 12941ad166b6SBenoît Canet# @enospc: same as @stop on ENOSPC, same as @report otherwise. 12951ad166b6SBenoît Canet# 1296a937b6aaSMarkus Armbruster# @stop: for guest operations, stop the virtual machine; for jobs, 1297a937b6aaSMarkus Armbruster# pause the job 12981ad166b6SBenoît Canet# 12998c398252SKevin Wolf# @auto: inherit the error handling policy of the backend (since: 2.7) 13008c398252SKevin Wolf# 13011ad166b6SBenoît Canet# Since: 1.3 13021ad166b6SBenoît Canet## 13031ad166b6SBenoît Canet{ 'enum': 'BlockdevOnError', 13048c398252SKevin Wolf 'data': ['report', 'ignore', 'enospc', 'stop', 'auto'] } 13051ad166b6SBenoît Canet 13061ad166b6SBenoît Canet## 13071ad166b6SBenoît Canet# @MirrorSyncMode: 13081ad166b6SBenoît Canet# 13091ad166b6SBenoît Canet# An enumeration of possible behaviors for the initial synchronization 13101ad166b6SBenoît Canet# phase of storage mirroring. 13111ad166b6SBenoît Canet# 13121ad166b6SBenoît Canet# @top: copies data in the topmost image to the destination 13131ad166b6SBenoît Canet# 13141ad166b6SBenoît Canet# @full: copies data from all images to the destination 13151ad166b6SBenoît Canet# 13161ad166b6SBenoît Canet# @none: only copy data written from now on 13171ad166b6SBenoît Canet# 1318a937b6aaSMarkus Armbruster# @incremental: only copy data described by the dirty bitmap. 1319a937b6aaSMarkus Armbruster# (since: 2.4) 1320c8b56501SJohn Snow# 1321c8b56501SJohn Snow# @bitmap: only copy data described by the dirty bitmap. (since: 4.2) 1322c8b56501SJohn Snow# Behavior on completion is determined by the BitmapSyncMode. 1323d58d8453SJohn Snow# 13241ad166b6SBenoît Canet# Since: 1.3 13251ad166b6SBenoît Canet## 13261ad166b6SBenoît Canet{ 'enum': 'MirrorSyncMode', 1327c8b56501SJohn Snow 'data': ['top', 'full', 'none', 'incremental', 'bitmap'] } 13281ad166b6SBenoît Canet 13291ad166b6SBenoît Canet## 133000a463b1SJohn Snow# @BitmapSyncMode: 133100a463b1SJohn Snow# 1332a937b6aaSMarkus Armbruster# An enumeration of possible behaviors for the synchronization of a 1333a937b6aaSMarkus Armbruster# bitmap when used for data copy operations. 133400a463b1SJohn Snow# 1335a937b6aaSMarkus Armbruster# @on-success: The bitmap is only synced when the operation is 1336a937b6aaSMarkus Armbruster# successful. This is the behavior always used for 'INCREMENTAL' 1337a937b6aaSMarkus Armbruster# backups. 133800a463b1SJohn Snow# 1339cf0cd293SJohn Snow# @never: The bitmap is never synchronized with the operation, and is 1340cf0cd293SJohn Snow# treated solely as a read-only manifest of blocks to copy. 1341cf0cd293SJohn Snow# 1342c23909e5SJohn Snow# @always: The bitmap is always synchronized with the operation, 1343c23909e5SJohn Snow# regardless of whether or not the operation was successful. 1344c23909e5SJohn Snow# 134500a463b1SJohn Snow# Since: 4.2 134600a463b1SJohn Snow## 134700a463b1SJohn Snow{ 'enum': 'BitmapSyncMode', 1348c23909e5SJohn Snow 'data': ['on-success', 'never', 'always'] } 134900a463b1SJohn Snow 135000a463b1SJohn Snow## 1351d06107adSMax Reitz# @MirrorCopyMode: 1352d06107adSMax Reitz# 1353d06107adSMax Reitz# An enumeration whose values tell the mirror block job when to 1354d06107adSMax Reitz# trigger writes to the target. 1355d06107adSMax Reitz# 1356d06107adSMax Reitz# @background: copy data in background only. 1357d06107adSMax Reitz# 1358d06107adSMax Reitz# @write-blocking: when data is written to the source, write it 1359a937b6aaSMarkus Armbruster# (synchronously) to the target as well. In addition, data is 1360a937b6aaSMarkus Armbruster# copied in background just like in @background mode. 1361d06107adSMax Reitz# 1362d06107adSMax Reitz# Since: 3.0 1363d06107adSMax Reitz## 1364d06107adSMax Reitz{ 'enum': 'MirrorCopyMode', 1365d06107adSMax Reitz 'data': ['background', 'write-blocking'] } 1366d06107adSMax Reitz 1367d06107adSMax Reitz## 136876cb2f24SFiona Ebner# @BlockJobInfoMirror: 136976cb2f24SFiona Ebner# 137076cb2f24SFiona Ebner# Information specific to mirror block jobs. 137176cb2f24SFiona Ebner# 137276cb2f24SFiona Ebner# @actively-synced: Whether the source is actively synced to the 137376cb2f24SFiona Ebner# target, i.e. same data and new writes are done synchronously to 137476cb2f24SFiona Ebner# both. 137576cb2f24SFiona Ebner# 137637507c14SMarkus Armbruster# Since: 8.2 137776cb2f24SFiona Ebner## 137876cb2f24SFiona Ebner{ 'struct': 'BlockJobInfoMirror', 137976cb2f24SFiona Ebner 'data': { 'actively-synced': 'bool' } } 138076cb2f24SFiona Ebner 138176cb2f24SFiona Ebner## 13821ad166b6SBenoît Canet# @BlockJobInfo: 13831ad166b6SBenoît Canet# 13841ad166b6SBenoît Canet# Information about a long-running block device operation. 13851ad166b6SBenoît Canet# 13861ad166b6SBenoît Canet# @type: the job type ('stream' for image streaming) 13871ad166b6SBenoît Canet# 13886aae5be6SAlberto Garcia# @device: The job identifier. Originally the device name but other 13896aae5be6SAlberto Garcia# values are allowed since QEMU 2.7 13901ad166b6SBenoît Canet# 1391a937b6aaSMarkus Armbruster# @len: Estimated @offset value at the completion of the job. This 1392a937b6aaSMarkus Armbruster# value can arbitrarily change while the job is running, in both 1393a937b6aaSMarkus Armbruster# directions. 1394a81e0a82SKevin Wolf# 1395a937b6aaSMarkus Armbruster# @offset: Progress made until now. The unit is arbitrary and the 1396a937b6aaSMarkus Armbruster# value can only meaningfully be used for the ratio of @offset to 1397a937b6aaSMarkus Armbruster# @len. The value is monotonically increasing. 13981ad166b6SBenoît Canet# 1399a937b6aaSMarkus Armbruster# @busy: false if the job is known to be in a quiescent state, with no 1400a937b6aaSMarkus Armbruster# pending I/O. (Since 1.3) 14011ad166b6SBenoît Canet# 1402a937b6aaSMarkus Armbruster# @paused: whether the job is paused or, if @busy is true, will pause 1403a937b6aaSMarkus Armbruster# itself as soon as possible. (Since 1.3) 14041ad166b6SBenoît Canet# 14051ad166b6SBenoît Canet# @speed: the rate limit, bytes per second 14061ad166b6SBenoît Canet# 14071ad166b6SBenoît Canet# @io-status: the status of the job (since 1.3) 14081ad166b6SBenoît Canet# 1409ef6dbf1eSMax Reitz# @ready: true if the job may be completed (since 2.2) 1410ef6dbf1eSMax Reitz# 141158b295baSJohn Snow# @status: Current job state/status (since 2.12) 141258b295baSJohn Snow# 1413a937b6aaSMarkus Armbruster# @auto-finalize: Job will finalize itself when PENDING, moving to the 1414a937b6aaSMarkus Armbruster# CONCLUDED state. (since 2.12) 1415b40dacdcSJohn Snow# 1416a937b6aaSMarkus Armbruster# @auto-dismiss: Job will dismiss itself when CONCLUDED, moving to the 1417a937b6aaSMarkus Armbruster# NULL state and disappearing from the query list. (since 2.12) 1418b40dacdcSJohn Snow# 1419ab9ba614SJohn Snow# @error: Error information if the job did not complete successfully. 1420ab9ba614SJohn Snow# Not set if the job completed successfully. (since 2.12.1) 1421ab9ba614SJohn Snow# 14221ad166b6SBenoît Canet# Since: 1.1 14231ad166b6SBenoît Canet## 1424701efc9fSFiona Ebner{ 'union': 'BlockJobInfo', 1425701efc9fSFiona Ebner 'base': {'type': 'JobType', 'device': 'str', 'len': 'int', 14261ad166b6SBenoît Canet 'offset': 'int', 'busy': 'bool', 'paused': 'bool', 'speed': 'int', 142758b295baSJohn Snow 'io-status': 'BlockDeviceIoStatus', 'ready': 'bool', 1428a50c2ab8SKevin Wolf 'status': 'JobStatus', 1429ab9ba614SJohn Snow 'auto-finalize': 'bool', 'auto-dismiss': 'bool', 1430701efc9fSFiona Ebner '*error': 'str' }, 1431701efc9fSFiona Ebner 'discriminator': 'type', 143276cb2f24SFiona Ebner 'data': { 'mirror': 'BlockJobInfoMirror' } } 14331ad166b6SBenoît Canet 14341ad166b6SBenoît Canet## 14351ad166b6SBenoît Canet# @query-block-jobs: 14361ad166b6SBenoît Canet# 14371ad166b6SBenoît Canet# Return information about long-running block device operations. 14381ad166b6SBenoît Canet# 14391ad166b6SBenoît Canet# Returns: a list of @BlockJobInfo for each active block job 14401ad166b6SBenoît Canet# 14411ad166b6SBenoît Canet# Since: 1.1 14421ad166b6SBenoît Canet## 1443f55ba801SPaolo Bonzini{ 'command': 'query-block-jobs', 'returns': ['BlockJobInfo'], 1444f55ba801SPaolo Bonzini 'allow-preconfig': true } 14451ad166b6SBenoît Canet 14461ad166b6SBenoît Canet## 14475072f7b3SMarc-André Lureau# @block_resize: 14481ad166b6SBenoît Canet# 14491ad166b6SBenoît Canet# Resize a block image while a guest is running. 14501ad166b6SBenoît Canet# 14511ad166b6SBenoît Canet# Either @device or @node-name must be set but not both. 14521ad166b6SBenoît Canet# 14531d8bda12SMarkus Armbruster# @device: the name of the device to get the image resized 14541ad166b6SBenoît Canet# 14551d8bda12SMarkus Armbruster# @node-name: graph node name to get the image resized (Since 2.0) 14561ad166b6SBenoît Canet# 14571ad166b6SBenoît Canet# @size: new image size in bytes 14581ad166b6SBenoît Canet# 14592746f060SMarkus Armbruster# Errors: 1460e050e426SPeter Maydell# - If @device is not a valid block device, DeviceNotFound 14611ad166b6SBenoît Canet# 14629bc6e893SMarkus Armbruster# Since: 0.14 14630dc869cfSMarc-André Lureau# 146414b48aaaSJohn Snow# .. qmp-example:: 14650dc869cfSMarc-André Lureau# 14660dc869cfSMarc-André Lureau# -> { "execute": "block_resize", 14670dc869cfSMarc-André Lureau# "arguments": { "device": "scratch", "size": 1073741824 } } 14680dc869cfSMarc-André Lureau# <- { "return": {} } 14691ad166b6SBenoît Canet## 1470b0ddeba2SMarc-André Lureau{ 'command': 'block_resize', 1471b0ddeba2SMarc-André Lureau 'data': { '*device': 'str', 14721ad166b6SBenoît Canet '*node-name': 'str', 1473eb94b81aSKevin Wolf 'size': 'int' }, 1474f55ba801SPaolo Bonzini 'coroutine': true, 1475f55ba801SPaolo Bonzini 'allow-preconfig': true } 14761ad166b6SBenoît Canet 14771ad166b6SBenoît Canet## 14785072f7b3SMarc-André Lureau# @NewImageMode: 14791ad166b6SBenoît Canet# 1480a937b6aaSMarkus Armbruster# An enumeration that tells QEMU how to set the backing file path in a 1481a937b6aaSMarkus Armbruster# new image file. 14821ad166b6SBenoît Canet# 14831ad166b6SBenoît Canet# @existing: QEMU should look for an existing image file. 14841ad166b6SBenoît Canet# 14851ad166b6SBenoît Canet# @absolute-paths: QEMU should create a new image with absolute paths 1486a937b6aaSMarkus Armbruster# for the backing file. If there is no backing file available, 1487a937b6aaSMarkus Armbruster# the new image will not be backed either. 14881ad166b6SBenoît Canet# 14891ad166b6SBenoît Canet# Since: 1.1 14901ad166b6SBenoît Canet## 14911ad166b6SBenoît Canet{ 'enum': 'NewImageMode', 14921ad166b6SBenoît Canet 'data': [ 'existing', 'absolute-paths' ] } 14931ad166b6SBenoît Canet 14941ad166b6SBenoît Canet## 14955072f7b3SMarc-André Lureau# @BlockdevSnapshotSync: 14961ad166b6SBenoît Canet# 14971ad166b6SBenoît Canet# Either @device or @node-name must be set but not both. 14981ad166b6SBenoît Canet# 1499681b86acSMax Reitz# @device: the name of the device to take a snapshot of. 15001ad166b6SBenoît Canet# 1501a937b6aaSMarkus Armbruster# @node-name: graph node name to generate the snapshot from (Since 1502a937b6aaSMarkus Armbruster# 2.0) 15031ad166b6SBenoît Canet# 1504681b86acSMax Reitz# @snapshot-file: the target of the new overlay image. If the file 1505681b86acSMax Reitz# exists, or if it is a device, the overlay will be created in the 1506681b86acSMax Reitz# existing file/device. Otherwise, a new file will be created. 15071ad166b6SBenoît Canet# 1508a937b6aaSMarkus Armbruster# @snapshot-node-name: the graph node name of the new image (Since 1509a937b6aaSMarkus Armbruster# 2.0) 15101ad166b6SBenoît Canet# 1511681b86acSMax Reitz# @format: the format of the overlay image, default is 'qcow2'. 15121ad166b6SBenoît Canet# 15131d8bda12SMarkus Armbruster# @mode: whether and how QEMU should create a new image, default is 15141ad166b6SBenoît Canet# 'absolute-paths'. 15151ad166b6SBenoît Canet## 1516a911e6aeSAlberto Garcia{ 'struct': 'BlockdevSnapshotSync', 15171ad166b6SBenoît Canet 'data': { '*device': 'str', '*node-name': 'str', 15181ad166b6SBenoît Canet 'snapshot-file': 'str', '*snapshot-node-name': 'str', 15191ad166b6SBenoît Canet '*format': 'str', '*mode': 'NewImageMode' } } 15201ad166b6SBenoît Canet 15211ad166b6SBenoît Canet## 15225072f7b3SMarc-André Lureau# @BlockdevSnapshot: 152343de7e2dSAlberto Garcia# 1524681b86acSMax Reitz# @node: device or node name that will have a snapshot taken. 152543de7e2dSAlberto Garcia# 152643de7e2dSAlberto Garcia# @overlay: reference to the existing block device that will become 1527a937b6aaSMarkus Armbruster# the overlay of @node, as part of taking the snapshot. It must 1528a937b6aaSMarkus Armbruster# not have a current backing file (this can be achieved by passing 1529a937b6aaSMarkus Armbruster# "backing": null to blockdev-add). 153043de7e2dSAlberto Garcia# 15315072f7b3SMarc-André Lureau# Since: 2.5 153243de7e2dSAlberto Garcia## 153343de7e2dSAlberto Garcia{ 'struct': 'BlockdevSnapshot', 153443de7e2dSAlberto Garcia 'data': { 'node': 'str', 'overlay': 'str' } } 153543de7e2dSAlberto Garcia 153643de7e2dSAlberto Garcia## 153786c6a3b6SVladimir Sementsov-Ogievskiy# @BackupPerf: 153886c6a3b6SVladimir Sementsov-Ogievskiy# 153986c6a3b6SVladimir Sementsov-Ogievskiy# Optional parameters for backup. These parameters don't affect 154086c6a3b6SVladimir Sementsov-Ogievskiy# functionality, but may significantly affect performance. 154186c6a3b6SVladimir Sementsov-Ogievskiy# 15426a30f663SVladimir Sementsov-Ogievskiy# @use-copy-range: Use copy offloading. Default false. 154386c6a3b6SVladimir Sementsov-Ogievskiy# 1544a937b6aaSMarkus Armbruster# @max-workers: Maximum number of parallel requests for the sustained 1545a937b6aaSMarkus Armbruster# background copying process. Doesn't influence copy-before-write 1546a937b6aaSMarkus Armbruster# operations. Default 64. 15472c59fd83SVladimir Sementsov-Ogievskiy# 1548a937b6aaSMarkus Armbruster# @max-chunk: Maximum request length for the sustained background 1549a937b6aaSMarkus Armbruster# copying process. Doesn't influence copy-before-write 1550a937b6aaSMarkus Armbruster# operations. 0 means unlimited. If max-chunk is non-zero then 1551a937b6aaSMarkus Armbruster# it should not be less than job cluster size which is calculated 1552a937b6aaSMarkus Armbruster# as maximum of target image cluster size and 64k. Default 0. 15532c59fd83SVladimir Sementsov-Ogievskiy# 15546252deb2SFiona Ebner# @min-cluster-size: Minimum size of blocks used by copy-before-write 15556252deb2SFiona Ebner# and background copy operations. Has to be a power of 2. No 15566252deb2SFiona Ebner# effect if smaller than the maximum of the target's cluster size 15576252deb2SFiona Ebner# and 64 KiB. Default 0. (Since 9.2) 15586252deb2SFiona Ebner# 155986c6a3b6SVladimir Sementsov-Ogievskiy# Since: 6.0 156086c6a3b6SVladimir Sementsov-Ogievskiy## 156186c6a3b6SVladimir Sementsov-Ogievskiy{ 'struct': 'BackupPerf', 15626252deb2SFiona Ebner 'data': { '*use-copy-range': 'bool', '*max-workers': 'int', 15636252deb2SFiona Ebner '*max-chunk': 'int64', '*min-cluster-size': 'size' } } 156486c6a3b6SVladimir Sementsov-Ogievskiy 156586c6a3b6SVladimir Sementsov-Ogievskiy## 15663c95037aSJohn Snow# @BackupCommon: 15671ad166b6SBenoît Canet# 1568a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job. If omitted, 1569a937b6aaSMarkus Armbruster# the device name will be used. (Since 2.7) 157070559d49SAlberto Garcia# 1571a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node which should be 1572a937b6aaSMarkus Armbruster# copied. 15731ad166b6SBenoît Canet# 1574a937b6aaSMarkus Armbruster# @sync: what parts of the disk image should be copied to the 1575a937b6aaSMarkus Armbruster# destination (all the disk, only the sectors allocated in the 1576a937b6aaSMarkus Armbruster# topmost image, from a dirty bitmap, or only new I/O). 15773c95037aSJohn Snow# 15783c95037aSJohn Snow# @speed: the maximum speed, in bytes per second. The default is 0, 15793c95037aSJohn Snow# for unlimited. 15803c95037aSJohn Snow# 1581a937b6aaSMarkus Armbruster# @bitmap: The name of a dirty bitmap to use. Must be present if sync 1582a937b6aaSMarkus Armbruster# is "bitmap" or "incremental". Can be present if sync is "full" 1583a937b6aaSMarkus Armbruster# or "top". Must not be present otherwise. 1584c8b56501SJohn Snow# (Since 2.4 (drive-backup), 3.1 (blockdev-backup)) 1585c8b56501SJohn Snow# 1586a937b6aaSMarkus Armbruster# @bitmap-mode: Specifies the type of data the bitmap should contain 1587a937b6aaSMarkus Armbruster# after the operation concludes. Must be present if a bitmap was 1588a937b6aaSMarkus Armbruster# provided, Must NOT be present otherwise. (Since 4.2) 15893c95037aSJohn Snow# 15903c95037aSJohn Snow# @compress: true to compress data, if the target format supports it. 15913c95037aSJohn Snow# (default: false) (since 2.8) 15923c95037aSJohn Snow# 15933c95037aSJohn Snow# @on-source-error: the action to take on an error on the source, 1594a937b6aaSMarkus Armbruster# default 'report'. 'stop' and 'enospc' can only be used if the 1595a937b6aaSMarkus Armbruster# block device supports io-status (see BlockInfo). 15963c95037aSJohn Snow# 15973c95037aSJohn Snow# @on-target-error: the action to take on an error on the target, 1598a937b6aaSMarkus Armbruster# default 'report' (no limitations, since this applies to a 1599a937b6aaSMarkus Armbruster# different block device than @device). 16003c95037aSJohn Snow# 1601a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state 1602a937b6aaSMarkus Armbruster# after it has finished its work, waiting for @block-job-finalize 1603a937b6aaSMarkus Armbruster# before making any block graph changes. When true, this job will 1604a937b6aaSMarkus Armbruster# automatically perform its abort or commit actions. Defaults to 1605a937b6aaSMarkus Armbruster# true. (Since 2.12) 16063c95037aSJohn Snow# 1607a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state 1608a937b6aaSMarkus Armbruster# after it has completely ceased all work, and awaits 1609a937b6aaSMarkus Armbruster# @block-job-dismiss. When true, this job will automatically 1610a937b6aaSMarkus Armbruster# disappear from the query list without user intervention. 16113c95037aSJohn Snow# Defaults to true. (Since 2.12) 16123c95037aSJohn Snow# 161300e30f05SVladimir Sementsov-Ogievskiy# @filter-node-name: the node name that should be assigned to the 1614a937b6aaSMarkus Armbruster# filter driver that the backup job inserts into the graph above 1615a937b6aaSMarkus Armbruster# node specified by @drive. If this option is not given, a node 1616a937b6aaSMarkus Armbruster# name is autogenerated. (Since: 4.2) 161700e30f05SVladimir Sementsov-Ogievskiy# 16180fd05c8dSVladimir Sementsov-Ogievskiy# @discard-source: Discard blocks on source which have already been 16190fd05c8dSVladimir Sementsov-Ogievskiy# copied to the target. (Since 9.1) 16200fd05c8dSVladimir Sementsov-Ogievskiy# 162186c6a3b6SVladimir Sementsov-Ogievskiy# @x-perf: Performance options. (Since 6.0) 162286c6a3b6SVladimir Sementsov-Ogievskiy# 16239fb49daaSMarkus Armbruster# Features: 1624a937b6aaSMarkus Armbruster# 16259fb49daaSMarkus Armbruster# @unstable: Member @x-perf is experimental. 16269fb49daaSMarkus Armbruster# 162701bed0ffSMarkus Armbruster# .. note:: @on-source-error and @on-target-error only affect 162801bed0ffSMarkus Armbruster# background I/O. If an error occurs during a guest write request, 162901bed0ffSMarkus Armbruster# the device's rerror/werror actions will be used. 16303c95037aSJohn Snow# 16313c95037aSJohn Snow# Since: 4.2 16323c95037aSJohn Snow## 16333c95037aSJohn Snow{ 'struct': 'BackupCommon', 16343c95037aSJohn Snow 'data': { '*job-id': 'str', 'device': 'str', 16353c95037aSJohn Snow 'sync': 'MirrorSyncMode', '*speed': 'int', 1636c8b56501SJohn Snow '*bitmap': 'str', '*bitmap-mode': 'BitmapSyncMode', 1637c8b56501SJohn Snow '*compress': 'bool', 16383c95037aSJohn Snow '*on-source-error': 'BlockdevOnError', 16393c95037aSJohn Snow '*on-target-error': 'BlockdevOnError', 164000e30f05SVladimir Sementsov-Ogievskiy '*auto-finalize': 'bool', '*auto-dismiss': 'bool', 16419fb49daaSMarkus Armbruster '*filter-node-name': 'str', 16420fd05c8dSVladimir Sementsov-Ogievskiy '*discard-source': 'bool', 16439fb49daaSMarkus Armbruster '*x-perf': { 'type': 'BackupPerf', 16449fb49daaSMarkus Armbruster 'features': [ 'unstable' ] } } } 16453c95037aSJohn Snow 16463c95037aSJohn Snow## 16473c95037aSJohn Snow# @DriveBackup: 16483c95037aSJohn Snow# 16491ad166b6SBenoît Canet# @target: the target of the new image. If the file exists, or if it 16501ad166b6SBenoît Canet# is a device, the existing file/device will be used as the new 16511ad166b6SBenoît Canet# destination. If it does not exist, a new file will be created. 16521ad166b6SBenoît Canet# 1653a937b6aaSMarkus Armbruster# @format: the format of the new destination, default is to probe if 1654a937b6aaSMarkus Armbruster# @mode is 'existing', else the format of the source 16551ad166b6SBenoît Canet# 16561d8bda12SMarkus Armbruster# @mode: whether and how QEMU should create a new image, default is 16571ad166b6SBenoît Canet# 'absolute-paths'. 16581ad166b6SBenoît Canet# 16591ad166b6SBenoît Canet# Since: 1.6 16601ad166b6SBenoît Canet## 1661895a2a80SEric Blake{ 'struct': 'DriveBackup', 16623c95037aSJohn Snow 'base': 'BackupCommon', 16633c95037aSJohn Snow 'data': { 'target': 'str', 16643c95037aSJohn Snow '*format': 'str', 16653c95037aSJohn Snow '*mode': 'NewImageMode' } } 16661ad166b6SBenoît Canet 16671ad166b6SBenoît Canet## 16685072f7b3SMarc-André Lureau# @BlockdevBackup: 1669c29c1dd3SFam Zheng# 167039d990acSKevin Wolf# @target: the device name or node-name of the backup target node. 1671c29c1dd3SFam Zheng# 1672c29c1dd3SFam Zheng# Since: 2.3 1673c29c1dd3SFam Zheng## 1674895a2a80SEric Blake{ 'struct': 'BlockdevBackup', 16753c95037aSJohn Snow 'base': 'BackupCommon', 16763c95037aSJohn Snow 'data': { 'target': 'str' } } 1677c29c1dd3SFam Zheng 1678c29c1dd3SFam Zheng## 16795072f7b3SMarc-André Lureau# @blockdev-snapshot-sync: 16801ad166b6SBenoît Canet# 1681681b86acSMax Reitz# Takes a synchronous snapshot of a block device. 16821ad166b6SBenoît Canet# 16832746f060SMarkus Armbruster# Errors: 1684e050e426SPeter Maydell# - If @device is not a valid block device, DeviceNotFound 16851ad166b6SBenoît Canet# 16869bc6e893SMarkus Armbruster# Since: 0.14 1687b4039d8dSMarc-André Lureau# 168814b48aaaSJohn Snow# .. qmp-example:: 1689b4039d8dSMarc-André Lureau# 1690b4039d8dSMarc-André Lureau# -> { "execute": "blockdev-snapshot-sync", 1691b4039d8dSMarc-André Lureau# "arguments": { "device": "ide-hd0", 1692b4039d8dSMarc-André Lureau# "snapshot-file": 1693b4039d8dSMarc-André Lureau# "/some/place/my-image", 1694b4039d8dSMarc-André Lureau# "format": "qcow2" } } 1695b4039d8dSMarc-André Lureau# <- { "return": {} } 16961ad166b6SBenoît Canet## 16971ad166b6SBenoît Canet{ 'command': 'blockdev-snapshot-sync', 1698f55ba801SPaolo Bonzini 'data': 'BlockdevSnapshotSync', 1699f55ba801SPaolo Bonzini 'allow-preconfig': true } 17001ad166b6SBenoît Canet 170143de7e2dSAlberto Garcia## 17025072f7b3SMarc-André Lureau# @blockdev-snapshot: 170343de7e2dSAlberto Garcia# 1704681b86acSMax Reitz# Takes a snapshot of a block device. 170543de7e2dSAlberto Garcia# 1706681b86acSMax Reitz# Take a snapshot, by installing 'node' as the backing image of 17073282eca4SMarc-André Lureau# 'overlay'. Additionally, if 'node' is associated with a block 1708a937b6aaSMarkus Armbruster# device, the block device changes to using 'overlay' as its new 1709a937b6aaSMarkus Armbruster# active image. 17103282eca4SMarc-André Lureau# 1711c6bdc312SPeter Krempa# Features: 1712a937b6aaSMarkus Armbruster# 1713a937b6aaSMarkus Armbruster# @allow-write-only-overlay: If present, the check whether this 1714a937b6aaSMarkus Armbruster# operation is safe was relaxed so that it can be used to change 1715a937b6aaSMarkus Armbruster# backing file of a destination of a blockdev-mirror. (since 5.0) 1716c6bdc312SPeter Krempa# 17175072f7b3SMarc-André Lureau# Since: 2.5 17183282eca4SMarc-André Lureau# 171914b48aaaSJohn Snow# .. qmp-example:: 17203282eca4SMarc-André Lureau# 17213282eca4SMarc-André Lureau# -> { "execute": "blockdev-add", 1722244d04dbSEric Blake# "arguments": { "driver": "qcow2", 17233282eca4SMarc-André Lureau# "node-name": "node1534", 172434f58df5SMarkus Armbruster# "file": { "driver": "file", 17253282eca4SMarc-André Lureau# "filename": "hd1.qcow2" }, 17264f7be280SMax Reitz# "backing": null } } 17273282eca4SMarc-André Lureau# 17283282eca4SMarc-André Lureau# <- { "return": {} } 17293282eca4SMarc-André Lureau# 17303282eca4SMarc-André Lureau# -> { "execute": "blockdev-snapshot", 17313282eca4SMarc-André Lureau# "arguments": { "node": "ide-hd0", 17323282eca4SMarc-André Lureau# "overlay": "node1534" } } 17333282eca4SMarc-André Lureau# <- { "return": {} } 173443de7e2dSAlberto Garcia## 173543de7e2dSAlberto Garcia{ 'command': 'blockdev-snapshot', 1736c6bdc312SPeter Krempa 'data': 'BlockdevSnapshot', 1737f55ba801SPaolo Bonzini 'features': [ 'allow-write-only-overlay' ], 1738f55ba801SPaolo Bonzini 'allow-preconfig': true } 173943de7e2dSAlberto Garcia 17401ad166b6SBenoît Canet## 17415072f7b3SMarc-André Lureau# @change-backing-file: 1742fa40e656SJeff Cody# 1743fa40e656SJeff Cody# Change the backing file in the image file metadata. This does not 1744fa40e656SJeff Cody# cause QEMU to reopen the image file to reparse the backing filename 1745a937b6aaSMarkus Armbruster# (it may, however, perform a reopen to change permissions from r/o -> 1746a937b6aaSMarkus Armbruster# r/w -> r/o, if needed). The new backing file string is written into 1747a937b6aaSMarkus Armbruster# the image file metadata, and the QEMU internal strings are updated. 1748fa40e656SJeff Cody# 1749fa40e656SJeff Cody# @image-node-name: The name of the block driver state node of the 1750a937b6aaSMarkus Armbruster# image to modify. The "device" argument is used to verify 1751a937b6aaSMarkus Armbruster# "image-node-name" is in the chain described by "device". 1752fa40e656SJeff Cody# 17537b5dca3fSKevin Wolf# @device: The device name or node-name of the root node that owns 17547b5dca3fSKevin Wolf# image-node-name. 1755fa40e656SJeff Cody# 1756a937b6aaSMarkus Armbruster# @backing-file: The string to write as the backing file. This string 1757a937b6aaSMarkus Armbruster# is not validated, so care should be taken when specifying the 1758a937b6aaSMarkus Armbruster# string or the image chain may not be able to be reopened again. 1759fa40e656SJeff Cody# 17602746f060SMarkus Armbruster# Errors: 1761a937b6aaSMarkus Armbruster# - If "device" does not exist or cannot be determined, 1762a937b6aaSMarkus Armbruster# DeviceNotFound 1763280c4b3cSMarc-André Lureau# 1764fa40e656SJeff Cody# Since: 2.1 1765fa40e656SJeff Cody## 1766fa40e656SJeff Cody{ 'command': 'change-backing-file', 1767fa40e656SJeff Cody 'data': { 'device': 'str', 'image-node-name': 'str', 1768f55ba801SPaolo Bonzini 'backing-file': 'str' }, 1769f55ba801SPaolo Bonzini 'allow-preconfig': true } 1770fa40e656SJeff Cody 1771fa40e656SJeff Cody## 17725072f7b3SMarc-André Lureau# @block-commit: 17731ad166b6SBenoît Canet# 1774a937b6aaSMarkus Armbruster# Live commit of data from overlay image nodes into backing nodes - 1775a937b6aaSMarkus Armbruster# i.e., writes data between 'top' and 'base' into 'base'. 17761ad166b6SBenoît Canet# 1777a937b6aaSMarkus Armbruster# If top == base, that is an error. If top has no overlays on top of 1778a937b6aaSMarkus Armbruster# it, or if it is in use by a writer, the job will not be completed by 1779a937b6aaSMarkus Armbruster# itself. The user needs to complete the job with the 1780a937b6aaSMarkus Armbruster# block-job-complete command after getting the ready event. (Since 1781a937b6aaSMarkus Armbruster# 2.0) 178205ea385aSMax Reitz# 178305ea385aSMax Reitz# If the base image is smaller than top, then the base image will be 178405ea385aSMax Reitz# resized to be the same size as top. If top is smaller than the base 178505ea385aSMax Reitz# image, the base will not be truncated. If you want the base image 178605ea385aSMax Reitz# size to match the size of the smaller top, you can safely truncate 178705ea385aSMax Reitz# it yourself once the commit operation successfully completes. 178805ea385aSMax Reitz# 1789a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job. If omitted, 1790a937b6aaSMarkus Armbruster# the device name will be used. (Since 2.7) 1791fd62c609SAlberto Garcia# 17921d13b167SKevin Wolf# @device: the device name or node-name of a root node 17931ad166b6SBenoît Canet# 17943c605f40SKevin Wolf# @base-node: The node name of the backing image to write data into. 1795f44fb58fSMarc-André Lureau# If not specified, this is the deepest backing image. 17963c605f40SKevin Wolf# (since: 3.1) 17971ad166b6SBenoît Canet# 1798a937b6aaSMarkus Armbruster# @base: Same as @base-node, except that it is a file name rather than 1799a937b6aaSMarkus Armbruster# a node name. This must be the exact filename string that was 1800a937b6aaSMarkus Armbruster# used to open the node; other strings, even if addressing the 1801a937b6aaSMarkus Armbruster# same file, are not accepted 18023c605f40SKevin Wolf# 18033c605f40SKevin Wolf# @top-node: The node name of the backing image within the image chain 1804a937b6aaSMarkus Armbruster# which contains the topmost data to be committed down. If not 1805a937b6aaSMarkus Armbruster# specified, this is the active layer. (since: 3.1) 18063c605f40SKevin Wolf# 1807a937b6aaSMarkus Armbruster# @top: Same as @top-node, except that it is a file name rather than a 1808a937b6aaSMarkus Armbruster# node name. This must be the exact filename string that was used 1809a937b6aaSMarkus Armbruster# to open the node; other strings, even if addressing the same 1810a937b6aaSMarkus Armbruster# file, are not accepted 18111ad166b6SBenoît Canet# 18121d8bda12SMarkus Armbruster# @backing-file: The backing file string to write into the overlay 1813a937b6aaSMarkus Armbruster# image of 'top'. If 'top' does not have an overlay image, or if 1814a937b6aaSMarkus Armbruster# 'top' is in use by a writer, specifying a backing file string is 1815a937b6aaSMarkus Armbruster# an error. 181654e26900SJeff Cody# 1817a937b6aaSMarkus Armbruster# This filename is not validated. If a pathname string is such 1818a937b6aaSMarkus Armbruster# that it cannot be resolved by QEMU, that means that subsequent 1819a937b6aaSMarkus Armbruster# QMP or HMP commands must use node-names for the image in 1820a937b6aaSMarkus Armbruster# question, as filename lookup methods will fail. 182154e26900SJeff Cody# 1822a937b6aaSMarkus Armbruster# If not specified, QEMU will automatically determine the backing 1823a937b6aaSMarkus Armbruster# file string to use, or error out if there is no obvious choice. 1824a937b6aaSMarkus Armbruster# Care should be taken when specifying the string, to specify a 1825a937b6aaSMarkus Armbruster# valid filename or protocol. (Since 2.1) 182654e26900SJeff Cody# 1827209e64d9SMarkus Armbruster# @backing-mask-protocol: If true, replace any protocol mentioned in 1828209e64d9SMarkus Armbruster# the 'backing file format' with 'raw', rather than storing the 1829209e64d9SMarkus Armbruster# protocol name as the backing format. Can be used even when no 1830209e64d9SMarkus Armbruster# image header will be updated (default false; since 9.0). 18314b028cbeSPeter Krempa# 18321d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second 18331ad166b6SBenoît Canet# 1834a937b6aaSMarkus Armbruster# @on-error: the action to take on an error. 'ignore' means that the 1835a937b6aaSMarkus Armbruster# request should be retried. (default: report; Since: 5.0) 18368faad1c7SKevin Wolf# 18371d8bda12SMarkus Armbruster# @filter-node-name: the node name that should be assigned to the 1838a937b6aaSMarkus Armbruster# filter driver that the commit job inserts into the graph above 1839a937b6aaSMarkus Armbruster# @top. If this option is not given, a node name is 18400db832f4SKevin Wolf# autogenerated. (Since: 2.9) 18410db832f4SKevin Wolf# 1842a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state 1843a937b6aaSMarkus Armbruster# after it has finished its work, waiting for @block-job-finalize 1844a937b6aaSMarkus Armbruster# before making any block graph changes. When true, this job will 1845a937b6aaSMarkus Armbruster# automatically perform its abort or commit actions. Defaults to 1846a937b6aaSMarkus Armbruster# true. (Since 3.1) 184796fbf534SJohn Snow# 1848a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state 1849a937b6aaSMarkus Armbruster# after it has completely ceased all work, and awaits 1850a937b6aaSMarkus Armbruster# @block-job-dismiss. When true, this job will automatically 1851a937b6aaSMarkus Armbruster# disappear from the query list without user intervention. 185296fbf534SJohn Snow# Defaults to true. (Since 3.1) 185396fbf534SJohn Snow# 1854df4097aeSMarkus Armbruster# Features: 1855a937b6aaSMarkus Armbruster# 1856df4097aeSMarkus Armbruster# @deprecated: Members @base and @top are deprecated. Use @base-node 1857df4097aeSMarkus Armbruster# and @top-node instead. 1858df4097aeSMarkus Armbruster# 18592746f060SMarkus Armbruster# Errors: 1860e050e426SPeter Maydell# - If @device does not exist, DeviceNotFound 18611ad166b6SBenoît Canet# 18621ad166b6SBenoît Canet# Since: 1.3 18631ad166b6SBenoît Canet# 186414b48aaaSJohn Snow# .. qmp-example:: 1865f44fb58fSMarc-André Lureau# 1866f44fb58fSMarc-André Lureau# -> { "execute": "block-commit", 1867f44fb58fSMarc-André Lureau# "arguments": { "device": "virtio0", 1868f44fb58fSMarc-André Lureau# "top": "/tmp/snap1.qcow2" } } 1869f44fb58fSMarc-André Lureau# <- { "return": {} } 18701ad166b6SBenoît Canet## 18711ad166b6SBenoît Canet{ 'command': 'block-commit', 18723c605f40SKevin Wolf 'data': { '*job-id': 'str', 'device': 'str', '*base-node': 'str', 1873df4097aeSMarkus Armbruster '*base': { 'type': 'str', 'features': [ 'deprecated' ] }, 1874df4097aeSMarkus Armbruster '*top-node': 'str', 1875df4097aeSMarkus Armbruster '*top': { 'type': 'str', 'features': [ 'deprecated' ] }, 18764b028cbeSPeter Krempa '*backing-file': 'str', '*backing-mask-protocol': 'bool', 18774b028cbeSPeter Krempa '*speed': 'int', 18788faad1c7SKevin Wolf '*on-error': 'BlockdevOnError', 187996fbf534SJohn Snow '*filter-node-name': 'str', 1880f55ba801SPaolo Bonzini '*auto-finalize': 'bool', '*auto-dismiss': 'bool' }, 1881f55ba801SPaolo Bonzini 'allow-preconfig': true } 18821ad166b6SBenoît Canet 18831ad166b6SBenoît Canet## 18845072f7b3SMarc-André Lureau# @drive-backup: 18851ad166b6SBenoît Canet# 1886a937b6aaSMarkus Armbruster# Start a point-in-time copy of a block device to a new destination. 1887a937b6aaSMarkus Armbruster# The status of ongoing drive-backup operations can be checked with 1888a937b6aaSMarkus Armbruster# query-block-jobs where the BlockJobInfo.type field has the value 188901bed0ffSMarkus Armbruster# 'backup'. The operation can be stopped before it has completed 189001bed0ffSMarkus Armbruster# using the block-job-cancel command. 18911ad166b6SBenoît Canet# 18921084159bSVladimir Sementsov-Ogievskiy# Features: 18931084159bSVladimir Sementsov-Ogievskiy# 1894a937b6aaSMarkus Armbruster# @deprecated: This command is deprecated. Use @blockdev-backup 1895a937b6aaSMarkus Armbruster# instead. 1896a937b6aaSMarkus Armbruster# 18972746f060SMarkus Armbruster# Errors: 1898e050e426SPeter Maydell# - If @device is not a valid block device, GenericError 18991ad166b6SBenoît Canet# 19005072f7b3SMarc-André Lureau# Since: 1.6 1901b0336412SMarc-André Lureau# 190214b48aaaSJohn Snow# .. qmp-example:: 1903b0336412SMarc-André Lureau# 1904b0336412SMarc-André Lureau# -> { "execute": "drive-backup", 1905b0336412SMarc-André Lureau# "arguments": { "device": "drive0", 1906b0336412SMarc-André Lureau# "sync": "full", 1907b0336412SMarc-André Lureau# "target": "backup.img" } } 1908b0336412SMarc-André Lureau# <- { "return": {} } 19091ad166b6SBenoît Canet## 191081206a89SPavel Butsykin{ 'command': 'drive-backup', 'boxed': true, 1911f55ba801SPaolo Bonzini 'data': 'DriveBackup', 'features': ['deprecated'], 1912f55ba801SPaolo Bonzini 'allow-preconfig': true } 19131ad166b6SBenoît Canet 19141ad166b6SBenoît Canet## 19155072f7b3SMarc-André Lureau# @blockdev-backup: 1916c29c1dd3SFam Zheng# 1917a937b6aaSMarkus Armbruster# Start a point-in-time copy of a block device to a new destination. 1918a937b6aaSMarkus Armbruster# The status of ongoing blockdev-backup operations can be checked with 1919a937b6aaSMarkus Armbruster# query-block-jobs where the BlockJobInfo.type field has the value 192001bed0ffSMarkus Armbruster# 'backup'. The operation can be stopped before it has completed 192101bed0ffSMarkus Armbruster# using the block-job-cancel command. 1922c29c1dd3SFam Zheng# 19232746f060SMarkus Armbruster# Errors: 1924e050e426SPeter Maydell# - If @device is not a valid block device, DeviceNotFound 1925dc7a4a9eSPavel Butsykin# 19265072f7b3SMarc-André Lureau# Since: 2.3 19271cf75113SMarc-André Lureau# 192814b48aaaSJohn Snow# .. qmp-example:: 19294ae65a52SAndrea Bolognani# 19301cf75113SMarc-André Lureau# -> { "execute": "blockdev-backup", 19311cf75113SMarc-André Lureau# "arguments": { "device": "src-id", 19321cf75113SMarc-André Lureau# "sync": "full", 19331cf75113SMarc-André Lureau# "target": "tgt-id" } } 19341cf75113SMarc-André Lureau# <- { "return": {} } 1935c29c1dd3SFam Zheng## 1936dc7a4a9eSPavel Butsykin{ 'command': 'blockdev-backup', 'boxed': true, 1937f55ba801SPaolo Bonzini 'data': 'BlockdevBackup', 1938f55ba801SPaolo Bonzini 'allow-preconfig': true } 1939c29c1dd3SFam Zheng 1940c29c1dd3SFam Zheng## 19415072f7b3SMarc-André Lureau# @query-named-block-nodes: 19421ad166b6SBenoît Canet# 19431ad166b6SBenoît Canet# Get the named block driver list 19441ad166b6SBenoît Canet# 1945a937b6aaSMarkus Armbruster# @flat: Omit the nested data about backing image ("backing-image" 1946a937b6aaSMarkus Armbruster# key) if true. Default is false (Since 5.0) 1947facda544SPeter Krempa# 19481ad166b6SBenoît Canet# Returns: the list of BlockDeviceInfo 19491ad166b6SBenoît Canet# 19505072f7b3SMarc-André Lureau# Since: 2.0 1951e1f34cb2SMarc-André Lureau# 195214b48aaaSJohn Snow# .. qmp-example:: 1953e1f34cb2SMarc-André Lureau# 1954e1f34cb2SMarc-André Lureau# -> { "execute": "query-named-block-nodes" } 1955e1f34cb2SMarc-André Lureau# <- { "return": [ { "ro":false, 1956e1f34cb2SMarc-André Lureau# "drv":"qcow2", 1957e1f34cb2SMarc-André Lureau# "encrypted":false, 1958e1f34cb2SMarc-André Lureau# "file":"disks/test.qcow2", 1959e1f34cb2SMarc-André Lureau# "node-name": "my-node", 1960e1f34cb2SMarc-André Lureau# "backing_file_depth":1, 1961016b8359SVictor Toso# "detect_zeroes":"off", 1962e1f34cb2SMarc-André Lureau# "bps":1000000, 1963e1f34cb2SMarc-André Lureau# "bps_rd":0, 1964e1f34cb2SMarc-André Lureau# "bps_wr":0, 1965e1f34cb2SMarc-André Lureau# "iops":1000000, 1966e1f34cb2SMarc-André Lureau# "iops_rd":0, 1967e1f34cb2SMarc-André Lureau# "iops_wr":0, 1968e1f34cb2SMarc-André Lureau# "bps_max": 8000000, 1969e1f34cb2SMarc-André Lureau# "bps_rd_max": 0, 1970e1f34cb2SMarc-André Lureau# "bps_wr_max": 0, 1971e1f34cb2SMarc-André Lureau# "iops_max": 0, 1972e1f34cb2SMarc-André Lureau# "iops_rd_max": 0, 1973e1f34cb2SMarc-André Lureau# "iops_wr_max": 0, 1974e1f34cb2SMarc-André Lureau# "iops_size": 0, 1975e1f34cb2SMarc-André Lureau# "write_threshold": 0, 1976e1f34cb2SMarc-André Lureau# "image":{ 1977e1f34cb2SMarc-André Lureau# "filename":"disks/test.qcow2", 1978e1f34cb2SMarc-André Lureau# "format":"qcow2", 1979e1f34cb2SMarc-André Lureau# "virtual-size":2048000, 1980e1f34cb2SMarc-André Lureau# "backing_file":"base.qcow2", 1981e1f34cb2SMarc-André Lureau# "full-backing-filename":"disks/base.qcow2", 1982e1f34cb2SMarc-André Lureau# "backing-filename-format":"qcow2", 1983e1f34cb2SMarc-André Lureau# "snapshots":[ 1984e1f34cb2SMarc-André Lureau# { 1985e1f34cb2SMarc-André Lureau# "id": "1", 1986e1f34cb2SMarc-André Lureau# "name": "snapshot1", 1987e1f34cb2SMarc-André Lureau# "vm-state-size": 0, 1988e1f34cb2SMarc-André Lureau# "date-sec": 10000200, 1989e1f34cb2SMarc-André Lureau# "date-nsec": 12, 1990e1f34cb2SMarc-André Lureau# "vm-clock-sec": 206, 1991e1f34cb2SMarc-André Lureau# "vm-clock-nsec": 30 1992e1f34cb2SMarc-André Lureau# } 1993e1f34cb2SMarc-André Lureau# ], 1994e1f34cb2SMarc-André Lureau# "backing-image":{ 1995e1f34cb2SMarc-André Lureau# "filename":"disks/base.qcow2", 1996e1f34cb2SMarc-André Lureau# "format":"qcow2", 1997e1f34cb2SMarc-André Lureau# "virtual-size":2048000 1998e1f34cb2SMarc-André Lureau# } 1999e1f34cb2SMarc-André Lureau# } } ] } 20001ad166b6SBenoît Canet## 2001facda544SPeter Krempa{ 'command': 'query-named-block-nodes', 2002facda544SPeter Krempa 'returns': [ 'BlockDeviceInfo' ], 2003f55ba801SPaolo Bonzini 'data': { '*flat': 'bool' }, 2004f55ba801SPaolo Bonzini 'allow-preconfig': true } 20051ad166b6SBenoît Canet 20061ad166b6SBenoît Canet## 20075d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraphNodeType: 20085d3b4e99SVladimir Sementsov-Ogievskiy# 20095d3b4e99SVladimir Sementsov-Ogievskiy# @block-backend: corresponds to BlockBackend 20105d3b4e99SVladimir Sementsov-Ogievskiy# 20112400e50cSzhaolichang# @block-job: corresponds to BlockJob 20125d3b4e99SVladimir Sementsov-Ogievskiy# 20135d3b4e99SVladimir Sementsov-Ogievskiy# @block-driver: corresponds to BlockDriverState 20145d3b4e99SVladimir Sementsov-Ogievskiy# 20155d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0 20165d3b4e99SVladimir Sementsov-Ogievskiy## 20175d3b4e99SVladimir Sementsov-Ogievskiy{ 'enum': 'XDbgBlockGraphNodeType', 20185d3b4e99SVladimir Sementsov-Ogievskiy 'data': [ 'block-backend', 'block-job', 'block-driver' ] } 20195d3b4e99SVladimir Sementsov-Ogievskiy 20205d3b4e99SVladimir Sementsov-Ogievskiy## 20215d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraphNode: 20225d3b4e99SVladimir Sementsov-Ogievskiy# 20235d3b4e99SVladimir Sementsov-Ogievskiy# @id: Block graph node identifier. This @id is generated only for 2024a937b6aaSMarkus Armbruster# x-debug-query-block-graph and does not relate to any other 2025a937b6aaSMarkus Armbruster# identifiers in Qemu. 20265d3b4e99SVladimir Sementsov-Ogievskiy# 2027a937b6aaSMarkus Armbruster# @type: Type of graph node. Can be one of block-backend, block-job 2028a937b6aaSMarkus Armbruster# or block-driver-state. 20295d3b4e99SVladimir Sementsov-Ogievskiy# 2030a937b6aaSMarkus Armbruster# @name: Human readable name of the node. Corresponds to node-name 2031a937b6aaSMarkus Armbruster# for block-driver-state nodes; is not guaranteed to be unique in 2032a937b6aaSMarkus Armbruster# the whole graph (with block-jobs and block-backends). 20335d3b4e99SVladimir Sementsov-Ogievskiy# 20345d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0 20355d3b4e99SVladimir Sementsov-Ogievskiy## 20365d3b4e99SVladimir Sementsov-Ogievskiy{ 'struct': 'XDbgBlockGraphNode', 20375d3b4e99SVladimir Sementsov-Ogievskiy 'data': { 'id': 'uint64', 'type': 'XDbgBlockGraphNodeType', 'name': 'str' } } 20385d3b4e99SVladimir Sementsov-Ogievskiy 20395d3b4e99SVladimir Sementsov-Ogievskiy## 20405d3b4e99SVladimir Sementsov-Ogievskiy# @BlockPermission: 20415d3b4e99SVladimir Sementsov-Ogievskiy# 20425d3b4e99SVladimir Sementsov-Ogievskiy# Enum of base block permissions. 20435d3b4e99SVladimir Sementsov-Ogievskiy# 2044a937b6aaSMarkus Armbruster# @consistent-read: A user that has the "permission" of consistent 2045a937b6aaSMarkus Armbruster# reads is guaranteed that their view of the contents of the block 20465d3b4e99SVladimir Sementsov-Ogievskiy# device is complete and self-consistent, representing the 2047a937b6aaSMarkus Armbruster# contents of a disk at a specific point. For most block devices 2048a937b6aaSMarkus Armbruster# (including their backing files) this is true, but the property 2049a937b6aaSMarkus Armbruster# cannot be maintained in a few situations like for intermediate 2050a937b6aaSMarkus Armbruster# nodes of a commit block job. 20515d3b4e99SVladimir Sementsov-Ogievskiy# 2052a937b6aaSMarkus Armbruster# @write: This permission is required to change the visible disk 2053a937b6aaSMarkus Armbruster# contents. 20545d3b4e99SVladimir Sementsov-Ogievskiy# 2055a937b6aaSMarkus Armbruster# @write-unchanged: This permission (which is weaker than 2056a937b6aaSMarkus Armbruster# BLK_PERM_WRITE) is both enough and required for writes to the 2057a937b6aaSMarkus Armbruster# block node when the caller promises that the visible disk 2058a937b6aaSMarkus Armbruster# content doesn't change. As the BLK_PERM_WRITE permission is 2059a937b6aaSMarkus Armbruster# strictly stronger, either is sufficient to perform an unchanging 2060a937b6aaSMarkus Armbruster# write. 20615d3b4e99SVladimir Sementsov-Ogievskiy# 2062a937b6aaSMarkus Armbruster# @resize: This permission is required to change the size of a block 2063a937b6aaSMarkus Armbruster# node. 20645d3b4e99SVladimir Sementsov-Ogievskiy# 20655d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0 20665d3b4e99SVladimir Sementsov-Ogievskiy## 20675d3b4e99SVladimir Sementsov-Ogievskiy{ 'enum': 'BlockPermission', 206864631f36SVladimir Sementsov-Ogievskiy 'data': [ 'consistent-read', 'write', 'write-unchanged', 'resize' ] } 206964631f36SVladimir Sementsov-Ogievskiy 20705d3b4e99SVladimir Sementsov-Ogievskiy## 20715d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraphEdge: 20725d3b4e99SVladimir Sementsov-Ogievskiy# 20735d3b4e99SVladimir Sementsov-Ogievskiy# Block Graph edge description for x-debug-query-block-graph. 20745d3b4e99SVladimir Sementsov-Ogievskiy# 20755d3b4e99SVladimir Sementsov-Ogievskiy# @parent: parent id 20765d3b4e99SVladimir Sementsov-Ogievskiy# 20775d3b4e99SVladimir Sementsov-Ogievskiy# @child: child id 20785d3b4e99SVladimir Sementsov-Ogievskiy# 20795d3b4e99SVladimir Sementsov-Ogievskiy# @name: name of the relation (examples are 'file' and 'backing') 20805d3b4e99SVladimir Sementsov-Ogievskiy# 20815d3b4e99SVladimir Sementsov-Ogievskiy# @perm: granted permissions for the parent operating on the child 20825d3b4e99SVladimir Sementsov-Ogievskiy# 2083a937b6aaSMarkus Armbruster# @shared-perm: permissions that can still be granted to other users 2084a937b6aaSMarkus Armbruster# of the child while it is still attached to this parent 20855d3b4e99SVladimir Sementsov-Ogievskiy# 20865d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0 20875d3b4e99SVladimir Sementsov-Ogievskiy## 20885d3b4e99SVladimir Sementsov-Ogievskiy{ 'struct': 'XDbgBlockGraphEdge', 20895d3b4e99SVladimir Sementsov-Ogievskiy 'data': { 'parent': 'uint64', 'child': 'uint64', 20905d3b4e99SVladimir Sementsov-Ogievskiy 'name': 'str', 'perm': [ 'BlockPermission' ], 20915d3b4e99SVladimir Sementsov-Ogievskiy 'shared-perm': [ 'BlockPermission' ] } } 20925d3b4e99SVladimir Sementsov-Ogievskiy 20935d3b4e99SVladimir Sementsov-Ogievskiy## 20945d3b4e99SVladimir Sementsov-Ogievskiy# @XDbgBlockGraph: 20955d3b4e99SVladimir Sementsov-Ogievskiy# 20965d3b4e99SVladimir Sementsov-Ogievskiy# Block Graph - list of nodes and list of edges. 20975d3b4e99SVladimir Sementsov-Ogievskiy# 20985d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0 20995d3b4e99SVladimir Sementsov-Ogievskiy## 21005d3b4e99SVladimir Sementsov-Ogievskiy{ 'struct': 'XDbgBlockGraph', 21015d3b4e99SVladimir Sementsov-Ogievskiy 'data': { 'nodes': ['XDbgBlockGraphNode'], 'edges': ['XDbgBlockGraphEdge'] } } 21025d3b4e99SVladimir Sementsov-Ogievskiy 21035d3b4e99SVladimir Sementsov-Ogievskiy## 21045d3b4e99SVladimir Sementsov-Ogievskiy# @x-debug-query-block-graph: 21055d3b4e99SVladimir Sementsov-Ogievskiy# 21065d3b4e99SVladimir Sementsov-Ogievskiy# Get the block graph. 21075d3b4e99SVladimir Sementsov-Ogievskiy# 21089fb49daaSMarkus Armbruster# Features: 2109a937b6aaSMarkus Armbruster# 21109fb49daaSMarkus Armbruster# @unstable: This command is meant for debugging. 21119fb49daaSMarkus Armbruster# 21125d3b4e99SVladimir Sementsov-Ogievskiy# Since: 4.0 21135d3b4e99SVladimir Sementsov-Ogievskiy## 21149fb49daaSMarkus Armbruster{ 'command': 'x-debug-query-block-graph', 'returns': 'XDbgBlockGraph', 2115f55ba801SPaolo Bonzini 'features': [ 'unstable' ], 2116f55ba801SPaolo Bonzini 'allow-preconfig': true } 21175d3b4e99SVladimir Sementsov-Ogievskiy 21185d3b4e99SVladimir Sementsov-Ogievskiy## 21195072f7b3SMarc-André Lureau# @drive-mirror: 21201ad166b6SBenoît Canet# 2121a937b6aaSMarkus Armbruster# Start mirroring a block device's writes to a new destination. 2122a937b6aaSMarkus Armbruster# target specifies the target of the new image. If the file exists, 2123a937b6aaSMarkus Armbruster# or if it is a device, it will be used as the new destination for 2124aa03e163SMarkus Armbruster# writes. If it does not exist, a new file will be created. @format 2125a937b6aaSMarkus Armbruster# specifies the format of the mirror image, default is to probe if 2126a937b6aaSMarkus Armbruster# mode='existing', else the format of the source. 21271ad166b6SBenoît Canet# 21282746f060SMarkus Armbruster# Errors: 2129e050e426SPeter Maydell# - If @device is not a valid block device, GenericError 2130faecd40aSEric Blake# 21315072f7b3SMarc-André Lureau# Since: 1.3 213212a21b73SMarc-André Lureau# 213314b48aaaSJohn Snow# .. qmp-example:: 213412a21b73SMarc-André Lureau# 213512a21b73SMarc-André Lureau# -> { "execute": "drive-mirror", 213612a21b73SMarc-André Lureau# "arguments": { "device": "ide-hd0", 213712a21b73SMarc-André Lureau# "target": "/some/place/my-image", 213812a21b73SMarc-André Lureau# "sync": "full", 213912a21b73SMarc-André Lureau# "format": "qcow2" } } 214012a21b73SMarc-André Lureau# <- { "return": {} } 2141faecd40aSEric Blake## 2142faecd40aSEric Blake{ 'command': 'drive-mirror', 'boxed': true, 2143f55ba801SPaolo Bonzini 'data': 'DriveMirror', 2144f55ba801SPaolo Bonzini 'allow-preconfig': true } 2145faecd40aSEric Blake 2146faecd40aSEric Blake## 21475072f7b3SMarc-André Lureau# @DriveMirror: 2148faecd40aSEric Blake# 2149faecd40aSEric Blake# A set of parameters describing drive mirror setup. 2150faecd40aSEric Blake# 2151a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job. If omitted, 2152a937b6aaSMarkus Armbruster# the device name will be used. (Since 2.7) 215371aa9867SAlberto Garcia# 2154a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node whose writes 2155a937b6aaSMarkus Armbruster# should be mirrored. 21561ad166b6SBenoît Canet# 21571ad166b6SBenoît Canet# @target: the target of the new image. If the file exists, or if it 21581ad166b6SBenoît Canet# is a device, the existing file/device will be used as the new 21591ad166b6SBenoît Canet# destination. If it does not exist, a new file will be created. 21601ad166b6SBenoît Canet# 2161a937b6aaSMarkus Armbruster# @format: the format of the new destination, default is to probe if 2162a937b6aaSMarkus Armbruster# @mode is 'existing', else the format of the source 21631ad166b6SBenoît Canet# 2164a937b6aaSMarkus Armbruster# @node-name: the new block driver state node name in the graph (Since 2165a937b6aaSMarkus Armbruster# 2.1) 21664c828dc6SBenoît Canet# 21671d8bda12SMarkus Armbruster# @replaces: with sync=full graph node name to be replaced by the new 2168a937b6aaSMarkus Armbruster# image when a whole image copy is done. This can be used to 2169a937b6aaSMarkus Armbruster# repair broken Quorum files. By default, @device is replaced, 2170a937b6aaSMarkus Armbruster# although implicitly created filters on it are kept. (Since 2.1) 217109158f00SBenoît Canet# 21721d8bda12SMarkus Armbruster# @mode: whether and how QEMU should create a new image, default is 21731ad166b6SBenoît Canet# 'absolute-paths'. 21741ad166b6SBenoît Canet# 21751d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second 21761ad166b6SBenoît Canet# 2177a937b6aaSMarkus Armbruster# @sync: what parts of the disk image should be copied to the 2178a937b6aaSMarkus Armbruster# destination (all the disk, only the sectors allocated in the 2179a937b6aaSMarkus Armbruster# topmost image, or only new I/O). 21801ad166b6SBenoît Canet# 2181a937b6aaSMarkus Armbruster# @granularity: granularity of the dirty bitmap, default is 64K if the 2182a937b6aaSMarkus Armbruster# image format doesn't have clusters, 4K if the clusters are 2183a937b6aaSMarkus Armbruster# smaller than that, else the cluster size. Must be a power of 2 2184a937b6aaSMarkus Armbruster# between 512 and 64M (since 1.4). 21851ad166b6SBenoît Canet# 2186a937b6aaSMarkus Armbruster# @buf-size: maximum amount of data in flight from source to target 2187a937b6aaSMarkus Armbruster# (since 1.4). 21881ad166b6SBenoît Canet# 21891d8bda12SMarkus Armbruster# @on-source-error: the action to take on an error on the source, 2190a937b6aaSMarkus Armbruster# default 'report'. 'stop' and 'enospc' can only be used if the 2191a937b6aaSMarkus Armbruster# block device supports io-status (see BlockInfo). 21921ad166b6SBenoît Canet# 21931d8bda12SMarkus Armbruster# @on-target-error: the action to take on an error on the target, 2194a937b6aaSMarkus Armbruster# default 'report' (no limitations, since this applies to a 2195a937b6aaSMarkus Armbruster# different block device than @device). 21964ae65a52SAndrea Bolognani# 2197a937b6aaSMarkus Armbruster# @unmap: Whether to try to unmap target sectors where source has only 2198a937b6aaSMarkus Armbruster# zero. If true, and target unallocated sectors will read as 2199a937b6aaSMarkus Armbruster# zero, target image sectors will be unmapped; otherwise, zeroes 2200a937b6aaSMarkus Armbruster# will be written. Both will result in identical contents. 22010fc9f8eaSFam Zheng# Default is true. (Since 2.4) 22021ad166b6SBenoît Canet# 2203a937b6aaSMarkus Armbruster# @copy-mode: when to copy data to the destination; defaults to 2204a937b6aaSMarkus Armbruster# 'background' (Since: 3.0) 2205481debaaSMax Reitz# 2206a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state 2207a937b6aaSMarkus Armbruster# after it has finished its work, waiting for @block-job-finalize 2208a937b6aaSMarkus Armbruster# before making any block graph changes. When true, this job will 2209a937b6aaSMarkus Armbruster# automatically perform its abort or commit actions. Defaults to 2210a937b6aaSMarkus Armbruster# true. (Since 3.1) 2211a6b58adeSJohn Snow# 2212a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state 2213a937b6aaSMarkus Armbruster# after it has completely ceased all work, and awaits 2214a937b6aaSMarkus Armbruster# @block-job-dismiss. When true, this job will automatically 2215a937b6aaSMarkus Armbruster# disappear from the query list without user intervention. 2216a6b58adeSJohn Snow# Defaults to true. (Since 3.1) 22174ae65a52SAndrea Bolognani# 22185072f7b3SMarc-André Lureau# Since: 1.3 22191ad166b6SBenoît Canet## 2220faecd40aSEric Blake{ 'struct': 'DriveMirror', 222171aa9867SAlberto Garcia 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', 222271aa9867SAlberto Garcia '*format': 'str', '*node-name': 'str', '*replaces': 'str', 22231ad166b6SBenoît Canet 'sync': 'MirrorSyncMode', '*mode': 'NewImageMode', 22241ad166b6SBenoît Canet '*speed': 'int', '*granularity': 'uint32', 22251ad166b6SBenoît Canet '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', 22260fc9f8eaSFam Zheng '*on-target-error': 'BlockdevOnError', 2227a6b58adeSJohn Snow '*unmap': 'bool', '*copy-mode': 'MirrorCopyMode', 2228a6b58adeSJohn Snow '*auto-finalize': 'bool', '*auto-dismiss': 'bool' } } 22291ad166b6SBenoît Canet 22301ad166b6SBenoît Canet## 22315072f7b3SMarc-André Lureau# @BlockDirtyBitmap: 2232341ebc2fSJohn Snow# 2233341ebc2fSJohn Snow# @node: name of device/node which the bitmap is tracking 2234341ebc2fSJohn Snow# 2235341ebc2fSJohn Snow# @name: name of the dirty bitmap 2236341ebc2fSJohn Snow# 22375072f7b3SMarc-André Lureau# Since: 2.4 2238341ebc2fSJohn Snow## 2239895a2a80SEric Blake{ 'struct': 'BlockDirtyBitmap', 2240341ebc2fSJohn Snow 'data': { 'node': 'str', 'name': 'str' } } 2241341ebc2fSJohn Snow 2242341ebc2fSJohn Snow## 22435072f7b3SMarc-André Lureau# @BlockDirtyBitmapAdd: 2244341ebc2fSJohn Snow# 2245341ebc2fSJohn Snow# @node: name of device/node which the bitmap is tracking 2246341ebc2fSJohn Snow# 2247cf7c49cfSEric Blake# @name: name of the dirty bitmap (must be less than 1024 bytes) 2248341ebc2fSJohn Snow# 22491d8bda12SMarkus Armbruster# @granularity: the bitmap granularity, default is 64k for 2250341ebc2fSJohn Snow# block-dirty-bitmap-add 2251341ebc2fSJohn Snow# 2252fd5ae4ccSVladimir Sementsov-Ogievskiy# @persistent: the bitmap is persistent, i.e. it will be saved to the 2253a937b6aaSMarkus Armbruster# corresponding block device image file on its close. For now 2254a937b6aaSMarkus Armbruster# only Qcow2 disks support persistent bitmaps. Default is false 2255a937b6aaSMarkus Armbruster# for block-dirty-bitmap-add. (Since: 2.10) 2256fd5ae4ccSVladimir Sementsov-Ogievskiy# 2257a937b6aaSMarkus Armbruster# @disabled: the bitmap is created in the disabled state, which means 2258a937b6aaSMarkus Armbruster# that it will not track drive changes. The bitmap may be enabled 2259a937b6aaSMarkus Armbruster# with block-dirty-bitmap-enable. Default is false. (Since: 4.0) 2260a6e2ca5fSVladimir Sementsov-Ogievskiy# 22615072f7b3SMarc-André Lureau# Since: 2.4 2262341ebc2fSJohn Snow## 2263895a2a80SEric Blake{ 'struct': 'BlockDirtyBitmapAdd', 2264fd5ae4ccSVladimir Sementsov-Ogievskiy 'data': { 'node': 'str', 'name': 'str', '*granularity': 'uint32', 22653264ffceSJohn Snow '*persistent': 'bool', '*disabled': 'bool' } } 2266341ebc2fSJohn Snow 2267341ebc2fSJohn Snow## 22681466ef6cSVladimir Sementsov-Ogievskiy# @BlockDirtyBitmapOrStr: 2269eff0829bSVladimir Sementsov-Ogievskiy# 2270a937b6aaSMarkus Armbruster# @local: name of the bitmap, attached to the same node as target 2271a937b6aaSMarkus Armbruster# bitmap. 2272eff0829bSVladimir Sementsov-Ogievskiy# 2273eff0829bSVladimir Sementsov-Ogievskiy# @external: bitmap with specified node 2274eff0829bSVladimir Sementsov-Ogievskiy# 2275eff0829bSVladimir Sementsov-Ogievskiy# Since: 4.1 2276eff0829bSVladimir Sementsov-Ogievskiy## 22771466ef6cSVladimir Sementsov-Ogievskiy{ 'alternate': 'BlockDirtyBitmapOrStr', 2278eff0829bSVladimir Sementsov-Ogievskiy 'data': { 'local': 'str', 2279eff0829bSVladimir Sementsov-Ogievskiy 'external': 'BlockDirtyBitmap' } } 2280eff0829bSVladimir Sementsov-Ogievskiy 2281eff0829bSVladimir Sementsov-Ogievskiy## 2282b598e531SVladimir Sementsov-Ogievskiy# @BlockDirtyBitmapMerge: 2283b598e531SVladimir Sementsov-Ogievskiy# 2284eff0829bSVladimir Sementsov-Ogievskiy# @node: name of device/node which the @target bitmap is tracking 2285b598e531SVladimir Sementsov-Ogievskiy# 2286360d4e4eSJohn Snow# @target: name of the destination dirty bitmap 2287b598e531SVladimir Sementsov-Ogievskiy# 2288a937b6aaSMarkus Armbruster# @bitmaps: name(s) of the source dirty bitmap(s) at @node and/or 2289a937b6aaSMarkus Armbruster# fully specified BlockDirtyBitmap elements. The latter are 2290a937b6aaSMarkus Armbruster# supported since 4.1. 2291b598e531SVladimir Sementsov-Ogievskiy# 22920e2b7f09SJohn Snow# Since: 4.0 2293b598e531SVladimir Sementsov-Ogievskiy## 2294b598e531SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockDirtyBitmapMerge', 2295eff0829bSVladimir Sementsov-Ogievskiy 'data': { 'node': 'str', 'target': 'str', 22961466ef6cSVladimir Sementsov-Ogievskiy 'bitmaps': ['BlockDirtyBitmapOrStr'] } } 2297b598e531SVladimir Sementsov-Ogievskiy 2298b598e531SVladimir Sementsov-Ogievskiy## 22995072f7b3SMarc-André Lureau# @block-dirty-bitmap-add: 2300341ebc2fSJohn Snow# 2301a937b6aaSMarkus Armbruster# Create a dirty bitmap with a name on the node, and start tracking 2302a937b6aaSMarkus Armbruster# the writes. 2303341ebc2fSJohn Snow# 23042746f060SMarkus Armbruster# Errors: 2305e050e426SPeter Maydell# - If @node is not a valid block device or node, DeviceNotFound 23060d5b2062SMarkus Armbruster# - If @name is already taken, GenericError 2307341ebc2fSJohn Snow# 23085072f7b3SMarc-André Lureau# Since: 2.4 23092258a5dbSMarc-André Lureau# 231014b48aaaSJohn Snow# .. qmp-example:: 23112258a5dbSMarc-André Lureau# 23122258a5dbSMarc-André Lureau# -> { "execute": "block-dirty-bitmap-add", 23132258a5dbSMarc-André Lureau# "arguments": { "node": "drive0", "name": "bitmap0" } } 23142258a5dbSMarc-André Lureau# <- { "return": {} } 2315341ebc2fSJohn Snow## 2316341ebc2fSJohn Snow{ 'command': 'block-dirty-bitmap-add', 2317f55ba801SPaolo Bonzini 'data': 'BlockDirtyBitmapAdd', 2318f55ba801SPaolo Bonzini 'allow-preconfig': true } 2319341ebc2fSJohn Snow 2320341ebc2fSJohn Snow## 23215072f7b3SMarc-André Lureau# @block-dirty-bitmap-remove: 2322341ebc2fSJohn Snow# 23234bbca422SMarc-André Lureau# Stop write tracking and remove the dirty bitmap that was created 2324a937b6aaSMarkus Armbruster# with block-dirty-bitmap-add. If the bitmap is persistent, remove it 2325a937b6aaSMarkus Armbruster# from its storage too. 2326341ebc2fSJohn Snow# 23272746f060SMarkus Armbruster# Errors: 2328e050e426SPeter Maydell# - If @node is not a valid block device or node, DeviceNotFound 23290d5b2062SMarkus Armbruster# - If @name is not found, GenericError 2330e050e426SPeter Maydell# - if @name is frozen by an operation, GenericError 2331341ebc2fSJohn Snow# 23325072f7b3SMarc-André Lureau# Since: 2.4 23334bbca422SMarc-André Lureau# 233414b48aaaSJohn Snow# .. qmp-example:: 23354bbca422SMarc-André Lureau# 23364bbca422SMarc-André Lureau# -> { "execute": "block-dirty-bitmap-remove", 23374bbca422SMarc-André Lureau# "arguments": { "node": "drive0", "name": "bitmap0" } } 23384bbca422SMarc-André Lureau# <- { "return": {} } 2339341ebc2fSJohn Snow## 2340341ebc2fSJohn Snow{ 'command': 'block-dirty-bitmap-remove', 2341f55ba801SPaolo Bonzini 'data': 'BlockDirtyBitmap', 2342f55ba801SPaolo Bonzini 'allow-preconfig': true } 2343341ebc2fSJohn Snow 2344341ebc2fSJohn Snow## 23455072f7b3SMarc-André Lureau# @block-dirty-bitmap-clear: 2346e74e6b78SJohn Snow# 234773dffdc8SMarc-André Lureau# Clear (reset) a dirty bitmap on the device, so that an incremental 234873dffdc8SMarc-André Lureau# backup from this point in time forward will only backup clusters 234973dffdc8SMarc-André Lureau# modified after this clear operation. 2350e74e6b78SJohn Snow# 23512746f060SMarkus Armbruster# Errors: 2352e050e426SPeter Maydell# - If @node is not a valid block device, DeviceNotFound 23530d5b2062SMarkus Armbruster# - If @name is not found, GenericError 2354e74e6b78SJohn Snow# 23555072f7b3SMarc-André Lureau# Since: 2.4 235673dffdc8SMarc-André Lureau# 235714b48aaaSJohn Snow# .. qmp-example:: 235873dffdc8SMarc-André Lureau# 235973dffdc8SMarc-André Lureau# -> { "execute": "block-dirty-bitmap-clear", 236073dffdc8SMarc-André Lureau# "arguments": { "node": "drive0", "name": "bitmap0" } } 236173dffdc8SMarc-André Lureau# <- { "return": {} } 2362e74e6b78SJohn Snow## 2363e74e6b78SJohn Snow{ 'command': 'block-dirty-bitmap-clear', 2364f55ba801SPaolo Bonzini 'data': 'BlockDirtyBitmap', 2365f55ba801SPaolo Bonzini 'allow-preconfig': true } 2366e74e6b78SJohn Snow 2367e74e6b78SJohn Snow## 23680e2b7f09SJohn Snow# @block-dirty-bitmap-enable: 23695c5d2e50SVladimir Sementsov-Ogievskiy# 23705c5d2e50SVladimir Sementsov-Ogievskiy# Enables a dirty bitmap so that it will begin tracking disk changes. 23715c5d2e50SVladimir Sementsov-Ogievskiy# 23722746f060SMarkus Armbruster# Errors: 2373e050e426SPeter Maydell# - If @node is not a valid block device, DeviceNotFound 23740d5b2062SMarkus Armbruster# - If @name is not found, GenericError 23755c5d2e50SVladimir Sementsov-Ogievskiy# 23760e2b7f09SJohn Snow# Since: 4.0 23775c5d2e50SVladimir Sementsov-Ogievskiy# 237814b48aaaSJohn Snow# .. qmp-example:: 23795c5d2e50SVladimir Sementsov-Ogievskiy# 23800e2b7f09SJohn Snow# -> { "execute": "block-dirty-bitmap-enable", 23815c5d2e50SVladimir Sementsov-Ogievskiy# "arguments": { "node": "drive0", "name": "bitmap0" } } 23825c5d2e50SVladimir Sementsov-Ogievskiy# <- { "return": {} } 23835c5d2e50SVladimir Sementsov-Ogievskiy## 23840e2b7f09SJohn Snow{ 'command': 'block-dirty-bitmap-enable', 2385f55ba801SPaolo Bonzini 'data': 'BlockDirtyBitmap', 2386f55ba801SPaolo Bonzini 'allow-preconfig': true } 23875c5d2e50SVladimir Sementsov-Ogievskiy 23885c5d2e50SVladimir Sementsov-Ogievskiy## 23890e2b7f09SJohn Snow# @block-dirty-bitmap-disable: 23905c5d2e50SVladimir Sementsov-Ogievskiy# 23915c5d2e50SVladimir Sementsov-Ogievskiy# Disables a dirty bitmap so that it will stop tracking disk changes. 23925c5d2e50SVladimir Sementsov-Ogievskiy# 23932746f060SMarkus Armbruster# Errors: 2394e050e426SPeter Maydell# - If @node is not a valid block device, DeviceNotFound 23950d5b2062SMarkus Armbruster# - If @name is not found, GenericError 23965c5d2e50SVladimir Sementsov-Ogievskiy# 23970e2b7f09SJohn Snow# Since: 4.0 23985c5d2e50SVladimir Sementsov-Ogievskiy# 239914b48aaaSJohn Snow# .. qmp-example:: 24005c5d2e50SVladimir Sementsov-Ogievskiy# 24010e2b7f09SJohn Snow# -> { "execute": "block-dirty-bitmap-disable", 24025c5d2e50SVladimir Sementsov-Ogievskiy# "arguments": { "node": "drive0", "name": "bitmap0" } } 24035c5d2e50SVladimir Sementsov-Ogievskiy# <- { "return": {} } 24045c5d2e50SVladimir Sementsov-Ogievskiy## 24050e2b7f09SJohn Snow{ 'command': 'block-dirty-bitmap-disable', 2406f55ba801SPaolo Bonzini 'data': 'BlockDirtyBitmap', 2407f55ba801SPaolo Bonzini 'allow-preconfig': true } 24085c5d2e50SVladimir Sementsov-Ogievskiy 24095c5d2e50SVladimir Sementsov-Ogievskiy## 24100e2b7f09SJohn Snow# @block-dirty-bitmap-merge: 2411b598e531SVladimir Sementsov-Ogievskiy# 2412360d4e4eSJohn Snow# Merge dirty bitmaps listed in @bitmaps to the @target dirty bitmap. 2413a937b6aaSMarkus Armbruster# Dirty bitmaps in @bitmaps will be unchanged, except if it also 2414a937b6aaSMarkus Armbruster# appears as the @target bitmap. Any bits already set in @target will 2415a937b6aaSMarkus Armbruster# still be set after the merge, i.e., this operation does not clear 2416a937b6aaSMarkus Armbruster# the target. On error, @target is unchanged. 2417b598e531SVladimir Sementsov-Ogievskiy# 2418a937b6aaSMarkus Armbruster# The resulting bitmap will count as dirty any clusters that were 2419a937b6aaSMarkus Armbruster# dirty in any of the source bitmaps. This can be used to achieve 2420a937b6aaSMarkus Armbruster# backup checkpoints, or in simpler usages, to copy bitmaps. 242173ab5d60SJohn Snow# 24222746f060SMarkus Armbruster# Errors: 2423e050e426SPeter Maydell# - If @node is not a valid block device, DeviceNotFound 2424a937b6aaSMarkus Armbruster# - If any bitmap in @bitmaps or @target is not found, 2425a937b6aaSMarkus Armbruster# GenericError 2426e050e426SPeter Maydell# - If any of the bitmaps have different sizes or granularities, 2427360d4e4eSJohn Snow# GenericError 2428b598e531SVladimir Sementsov-Ogievskiy# 24290e2b7f09SJohn Snow# Since: 4.0 2430b598e531SVladimir Sementsov-Ogievskiy# 243114b48aaaSJohn Snow# .. qmp-example:: 2432b598e531SVladimir Sementsov-Ogievskiy# 24330e2b7f09SJohn Snow# -> { "execute": "block-dirty-bitmap-merge", 2434360d4e4eSJohn Snow# "arguments": { "node": "drive0", "target": "bitmap0", 2435360d4e4eSJohn Snow# "bitmaps": ["bitmap1"] } } 2436b598e531SVladimir Sementsov-Ogievskiy# <- { "return": {} } 2437b598e531SVladimir Sementsov-Ogievskiy## 24380e2b7f09SJohn Snow{ 'command': 'block-dirty-bitmap-merge', 2439f55ba801SPaolo Bonzini 'data': 'BlockDirtyBitmapMerge', 2440f55ba801SPaolo Bonzini 'allow-preconfig': true } 2441b598e531SVladimir Sementsov-Ogievskiy 2442b598e531SVladimir Sementsov-Ogievskiy## 2443a3b52535SVladimir Sementsov-Ogievskiy# @BlockDirtyBitmapSha256: 2444a3b52535SVladimir Sementsov-Ogievskiy# 2445a3b52535SVladimir Sementsov-Ogievskiy# SHA256 hash of dirty bitmap data 2446a3b52535SVladimir Sementsov-Ogievskiy# 2447a3b52535SVladimir Sementsov-Ogievskiy# @sha256: ASCII representation of SHA256 bitmap hash 2448a3b52535SVladimir Sementsov-Ogievskiy# 2449a3b52535SVladimir Sementsov-Ogievskiy# Since: 2.10 2450a3b52535SVladimir Sementsov-Ogievskiy## 2451a3b52535SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockDirtyBitmapSha256', 2452a3b52535SVladimir Sementsov-Ogievskiy 'data': {'sha256': 'str'} } 2453a3b52535SVladimir Sementsov-Ogievskiy 2454a3b52535SVladimir Sementsov-Ogievskiy## 2455a3b52535SVladimir Sementsov-Ogievskiy# @x-debug-block-dirty-bitmap-sha256: 2456a3b52535SVladimir Sementsov-Ogievskiy# 245773ab5d60SJohn Snow# Get bitmap SHA256. 2458a3b52535SVladimir Sementsov-Ogievskiy# 24599fb49daaSMarkus Armbruster# Features: 2460a937b6aaSMarkus Armbruster# 24619fb49daaSMarkus Armbruster# @unstable: This command is meant for debugging. 24629fb49daaSMarkus Armbruster# 2463a937b6aaSMarkus Armbruster# Returns: 2464e2c1dcbcSMarkus Armbruster# BlockDirtyBitmapSha256 24652746f060SMarkus Armbruster# 24662746f060SMarkus Armbruster# Errors: 2467e050e426SPeter Maydell# - If @node is not a valid block device, DeviceNotFound 2468a937b6aaSMarkus Armbruster# - If @name is not found or if hashing has failed, GenericError 2469a3b52535SVladimir Sementsov-Ogievskiy# 2470a3b52535SVladimir Sementsov-Ogievskiy# Since: 2.10 2471a3b52535SVladimir Sementsov-Ogievskiy## 2472a3b52535SVladimir Sementsov-Ogievskiy{ 'command': 'x-debug-block-dirty-bitmap-sha256', 24739fb49daaSMarkus Armbruster 'data': 'BlockDirtyBitmap', 'returns': 'BlockDirtyBitmapSha256', 2474f55ba801SPaolo Bonzini 'features': [ 'unstable' ], 2475f55ba801SPaolo Bonzini 'allow-preconfig': true } 2476a3b52535SVladimir Sementsov-Ogievskiy 2477a3b52535SVladimir Sementsov-Ogievskiy## 24785072f7b3SMarc-André Lureau# @blockdev-mirror: 2479df92562eSFam Zheng# 2480df92562eSFam Zheng# Start mirroring a block device's writes to a new destination. 2481df92562eSFam Zheng# 2482a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job. If omitted, 2483a937b6aaSMarkus Armbruster# the device name will be used. (Since 2.7) 248471aa9867SAlberto Garcia# 2485a937b6aaSMarkus Armbruster# @device: The device name or node-name of a root node whose writes 2486a937b6aaSMarkus Armbruster# should be mirrored. 2487df92562eSFam Zheng# 2488a937b6aaSMarkus Armbruster# @target: the id or node-name of the block device to mirror to. This 2489a937b6aaSMarkus Armbruster# mustn't be attached to guest. 2490df92562eSFam Zheng# 24911d8bda12SMarkus Armbruster# @replaces: with sync=full graph node name to be replaced by the new 2492a937b6aaSMarkus Armbruster# image when a whole image copy is done. This can be used to 2493a937b6aaSMarkus Armbruster# repair broken Quorum files. By default, @device is replaced, 2494a937b6aaSMarkus Armbruster# although implicitly created filters on it are kept. 2495df92562eSFam Zheng# 24961d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second 2497df92562eSFam Zheng# 2498a937b6aaSMarkus Armbruster# @sync: what parts of the disk image should be copied to the 2499a937b6aaSMarkus Armbruster# destination (all the disk, only the sectors allocated in the 2500a937b6aaSMarkus Armbruster# topmost image, or only new I/O). 2501df92562eSFam Zheng# 2502a937b6aaSMarkus Armbruster# @granularity: granularity of the dirty bitmap, default is 64K if the 2503a937b6aaSMarkus Armbruster# image format doesn't have clusters, 4K if the clusters are 2504a937b6aaSMarkus Armbruster# smaller than that, else the cluster size. Must be a power of 2 2505a937b6aaSMarkus Armbruster# between 512 and 64M 2506df92562eSFam Zheng# 2507a937b6aaSMarkus Armbruster# @buf-size: maximum amount of data in flight from source to target 2508df92562eSFam Zheng# 25091d8bda12SMarkus Armbruster# @on-source-error: the action to take on an error on the source, 2510a937b6aaSMarkus Armbruster# default 'report'. 'stop' and 'enospc' can only be used if the 2511a937b6aaSMarkus Armbruster# block device supports io-status (see BlockInfo). 2512df92562eSFam Zheng# 25131d8bda12SMarkus Armbruster# @on-target-error: the action to take on an error on the target, 2514a937b6aaSMarkus Armbruster# default 'report' (no limitations, since this applies to a 2515a937b6aaSMarkus Armbruster# different block device than @device). 2516df92562eSFam Zheng# 25171d8bda12SMarkus Armbruster# @filter-node-name: the node name that should be assigned to the 2518a937b6aaSMarkus Armbruster# filter driver that the mirror job inserts into the graph above 2519a937b6aaSMarkus Armbruster# @device. If this option is not given, a node name is 25206cdbceb1SKevin Wolf# autogenerated. (Since: 2.9) 25216cdbceb1SKevin Wolf# 2522a937b6aaSMarkus Armbruster# @copy-mode: when to copy data to the destination; defaults to 2523a937b6aaSMarkus Armbruster# 'background' (Since: 3.0) 2524481debaaSMax Reitz# 2525a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state 2526a937b6aaSMarkus Armbruster# after it has finished its work, waiting for @block-job-finalize 2527a937b6aaSMarkus Armbruster# before making any block graph changes. When true, this job will 2528a937b6aaSMarkus Armbruster# automatically perform its abort or commit actions. Defaults to 2529a937b6aaSMarkus Armbruster# true. (Since 3.1) 2530a6b58adeSJohn Snow# 2531a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state 2532a937b6aaSMarkus Armbruster# after it has completely ceased all work, and awaits 2533a937b6aaSMarkus Armbruster# @block-job-dismiss. When true, this job will automatically 2534a937b6aaSMarkus Armbruster# disappear from the query list without user intervention. 2535a6b58adeSJohn Snow# Defaults to true. (Since 3.1) 25364ae65a52SAndrea Bolognani# 25375072f7b3SMarc-André Lureau# Since: 2.6 2538f6235a25SMarc-André Lureau# 253914b48aaaSJohn Snow# .. qmp-example:: 2540f6235a25SMarc-André Lureau# 2541f6235a25SMarc-André Lureau# -> { "execute": "blockdev-mirror", 2542f6235a25SMarc-André Lureau# "arguments": { "device": "ide-hd0", 2543f6235a25SMarc-André Lureau# "target": "target0", 2544f6235a25SMarc-André Lureau# "sync": "full" } } 2545f6235a25SMarc-André Lureau# <- { "return": {} } 2546df92562eSFam Zheng## 2547df92562eSFam Zheng{ 'command': 'blockdev-mirror', 254871aa9867SAlberto Garcia 'data': { '*job-id': 'str', 'device': 'str', 'target': 'str', 2549df92562eSFam Zheng '*replaces': 'str', 2550df92562eSFam Zheng 'sync': 'MirrorSyncMode', 2551df92562eSFam Zheng '*speed': 'int', '*granularity': 'uint32', 2552df92562eSFam Zheng '*buf-size': 'int', '*on-source-error': 'BlockdevOnError', 25536cdbceb1SKevin Wolf '*on-target-error': 'BlockdevOnError', 2554481debaaSMax Reitz '*filter-node-name': 'str', 2555a6b58adeSJohn Snow '*copy-mode': 'MirrorCopyMode', 2556f55ba801SPaolo Bonzini '*auto-finalize': 'bool', '*auto-dismiss': 'bool' }, 2557f55ba801SPaolo Bonzini 'allow-preconfig': true } 2558df92562eSFam Zheng 2559df92562eSFam Zheng## 25605072f7b3SMarc-André Lureau# @BlockIOThrottle: 25614dc9397bSEric Blake# 25624dc9397bSEric Blake# A set of parameters describing block throttling. 25634dc9397bSEric Blake# 2564df4097aeSMarkus Armbruster# @device: Block device name 25657a9877a0SKevin Wolf# 25661d8bda12SMarkus Armbruster# @id: The name or QOM path of the guest device (since: 2.8) 25671ad166b6SBenoît Canet# 25681ad166b6SBenoît Canet# @bps: total throughput limit in bytes per second 25691ad166b6SBenoît Canet# 25701ad166b6SBenoît Canet# @bps_rd: read throughput limit in bytes per second 25711ad166b6SBenoît Canet# 25721ad166b6SBenoît Canet# @bps_wr: write throughput limit in bytes per second 25731ad166b6SBenoît Canet# 25741ad166b6SBenoît Canet# @iops: total I/O operations per second 25751ad166b6SBenoît Canet# 2576f5a845fdSAlberto Garcia# @iops_rd: read I/O operations per second 25771ad166b6SBenoît Canet# 25781ad166b6SBenoît Canet# @iops_wr: write I/O operations per second 25791ad166b6SBenoît Canet# 2580a937b6aaSMarkus Armbruster# @bps_max: total throughput limit during bursts, in bytes (Since 1.7) 25811ad166b6SBenoît Canet# 2582a937b6aaSMarkus Armbruster# @bps_rd_max: read throughput limit during bursts, in bytes (Since 2583a937b6aaSMarkus Armbruster# 1.7) 25841ad166b6SBenoît Canet# 2585a937b6aaSMarkus Armbruster# @bps_wr_max: write throughput limit during bursts, in bytes (Since 2586a937b6aaSMarkus Armbruster# 1.7) 25871ad166b6SBenoît Canet# 2588a937b6aaSMarkus Armbruster# @iops_max: total I/O operations per second during bursts, in bytes 2589a937b6aaSMarkus Armbruster# (Since 1.7) 25901ad166b6SBenoît Canet# 2591a937b6aaSMarkus Armbruster# @iops_rd_max: read I/O operations per second during bursts, in bytes 2592a937b6aaSMarkus Armbruster# (Since 1.7) 25931ad166b6SBenoît Canet# 2594a937b6aaSMarkus Armbruster# @iops_wr_max: write I/O operations per second during bursts, in 2595a937b6aaSMarkus Armbruster# bytes (Since 1.7) 2596dce13204SAlberto Garcia# 2597a937b6aaSMarkus Armbruster# @bps_max_length: maximum length of the @bps_max burst period, in 2598a937b6aaSMarkus Armbruster# seconds. It must only be set if @bps_max is set as well. 2599dce13204SAlberto Garcia# Defaults to 1. (Since 2.6) 2600dce13204SAlberto Garcia# 2601a937b6aaSMarkus Armbruster# @bps_rd_max_length: maximum length of the @bps_rd_max burst period, 2602a937b6aaSMarkus Armbruster# in seconds. It must only be set if @bps_rd_max is set as well. 2603dce13204SAlberto Garcia# Defaults to 1. (Since 2.6) 2604dce13204SAlberto Garcia# 2605a937b6aaSMarkus Armbruster# @bps_wr_max_length: maximum length of the @bps_wr_max burst period, 2606a937b6aaSMarkus Armbruster# in seconds. It must only be set if @bps_wr_max is set as well. 2607dce13204SAlberto Garcia# Defaults to 1. (Since 2.6) 2608dce13204SAlberto Garcia# 2609a937b6aaSMarkus Armbruster# @iops_max_length: maximum length of the @iops burst period, in 2610a937b6aaSMarkus Armbruster# seconds. It must only be set if @iops_max is set as well. 2611dce13204SAlberto Garcia# Defaults to 1. (Since 2.6) 2612dce13204SAlberto Garcia# 2613a937b6aaSMarkus Armbruster# @iops_rd_max_length: maximum length of the @iops_rd_max burst 2614a937b6aaSMarkus Armbruster# period, in seconds. It must only be set if @iops_rd_max is set 2615a937b6aaSMarkus Armbruster# as well. Defaults to 1. (Since 2.6) 2616dce13204SAlberto Garcia# 2617a937b6aaSMarkus Armbruster# @iops_wr_max_length: maximum length of the @iops_wr_max burst 2618a937b6aaSMarkus Armbruster# period, in seconds. It must only be set if @iops_wr_max is set 2619a937b6aaSMarkus Armbruster# as well. Defaults to 1. (Since 2.6) 26201ad166b6SBenoît Canet# 26211d8bda12SMarkus Armbruster# @iops_size: an I/O size in bytes (Since 1.7) 26221ad166b6SBenoît Canet# 26231d8bda12SMarkus Armbruster# @group: throttle group name (Since 2.4) 262476f4afb4SAlberto Garcia# 2625df4097aeSMarkus Armbruster# Features: 2626a937b6aaSMarkus Armbruster# 2627df4097aeSMarkus Armbruster# @deprecated: Member @device is deprecated. Use @id instead. 2628df4097aeSMarkus Armbruster# 26291ad166b6SBenoît Canet# Since: 1.1 26301ad166b6SBenoît Canet## 26314dc9397bSEric Blake{ 'struct': 'BlockIOThrottle', 2632df4097aeSMarkus Armbruster 'data': { '*device': { 'type': 'str', 'features': [ 'deprecated' ] }, 2633df4097aeSMarkus Armbruster '*id': 'str', 'bps': 'int', 'bps_rd': 'int', 26347a9877a0SKevin Wolf 'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int', 26351ad166b6SBenoît Canet '*bps_max': 'int', '*bps_rd_max': 'int', 26361ad166b6SBenoît Canet '*bps_wr_max': 'int', '*iops_max': 'int', 26371ad166b6SBenoît Canet '*iops_rd_max': 'int', '*iops_wr_max': 'int', 2638dce13204SAlberto Garcia '*bps_max_length': 'int', '*bps_rd_max_length': 'int', 2639dce13204SAlberto Garcia '*bps_wr_max_length': 'int', '*iops_max_length': 'int', 2640dce13204SAlberto Garcia '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int', 264176f4afb4SAlberto Garcia '*iops_size': 'int', '*group': 'str' } } 26421ad166b6SBenoît Canet 26431ad166b6SBenoît Canet## 2644432d889eSManos Pitsidianakis# @ThrottleLimits: 2645432d889eSManos Pitsidianakis# 2646a937b6aaSMarkus Armbruster# Limit parameters for throttling. Since some limit combinations are 2647a937b6aaSMarkus Armbruster# illegal, limits should always be set in one transaction. All fields 2648a937b6aaSMarkus Armbruster# are optional. When setting limits, if a field is missing the 2649a937b6aaSMarkus Armbruster# current value is not changed. 2650432d889eSManos Pitsidianakis# 2651432d889eSManos Pitsidianakis# @iops-total: limit total I/O operations per second 2652a937b6aaSMarkus Armbruster# 2653432d889eSManos Pitsidianakis# @iops-total-max: I/O operations burst 2654a937b6aaSMarkus Armbruster# 2655a937b6aaSMarkus Armbruster# @iops-total-max-length: length of the iops-total-max burst period, 2656a937b6aaSMarkus Armbruster# in seconds It must only be set if @iops-total-max is set as 2657a937b6aaSMarkus Armbruster# well. 2658a937b6aaSMarkus Armbruster# 2659432d889eSManos Pitsidianakis# @iops-read: limit read operations per second 2660a937b6aaSMarkus Armbruster# 2661432d889eSManos Pitsidianakis# @iops-read-max: I/O operations read burst 2662a937b6aaSMarkus Armbruster# 2663a937b6aaSMarkus Armbruster# @iops-read-max-length: length of the iops-read-max burst period, in 2664a937b6aaSMarkus Armbruster# seconds It must only be set if @iops-read-max is set as well. 2665a937b6aaSMarkus Armbruster# 2666432d889eSManos Pitsidianakis# @iops-write: limit write operations per second 2667a937b6aaSMarkus Armbruster# 2668432d889eSManos Pitsidianakis# @iops-write-max: I/O operations write burst 2669a937b6aaSMarkus Armbruster# 2670a937b6aaSMarkus Armbruster# @iops-write-max-length: length of the iops-write-max burst period, 2671a937b6aaSMarkus Armbruster# in seconds It must only be set if @iops-write-max is set as 2672a937b6aaSMarkus Armbruster# well. 2673a937b6aaSMarkus Armbruster# 2674432d889eSManos Pitsidianakis# @bps-total: limit total bytes per second 2675a937b6aaSMarkus Armbruster# 2676432d889eSManos Pitsidianakis# @bps-total-max: total bytes burst 2677a937b6aaSMarkus Armbruster# 2678a937b6aaSMarkus Armbruster# @bps-total-max-length: length of the bps-total-max burst period, in 2679a937b6aaSMarkus Armbruster# seconds. It must only be set if @bps-total-max is set as well. 2680a937b6aaSMarkus Armbruster# 2681432d889eSManos Pitsidianakis# @bps-read: limit read bytes per second 2682a937b6aaSMarkus Armbruster# 2683432d889eSManos Pitsidianakis# @bps-read-max: total bytes read burst 2684a937b6aaSMarkus Armbruster# 2685a937b6aaSMarkus Armbruster# @bps-read-max-length: length of the bps-read-max burst period, in 2686a937b6aaSMarkus Armbruster# seconds It must only be set if @bps-read-max is set as well. 2687a937b6aaSMarkus Armbruster# 2688432d889eSManos Pitsidianakis# @bps-write: limit write bytes per second 2689a937b6aaSMarkus Armbruster# 2690432d889eSManos Pitsidianakis# @bps-write-max: total bytes write burst 2691a937b6aaSMarkus Armbruster# 2692a937b6aaSMarkus Armbruster# @bps-write-max-length: length of the bps-write-max burst period, in 2693a937b6aaSMarkus Armbruster# seconds It must only be set if @bps-write-max is set as well. 2694a937b6aaSMarkus Armbruster# 2695432d889eSManos Pitsidianakis# @iops-size: when limiting by iops max size of an I/O in bytes 2696432d889eSManos Pitsidianakis# 2697432d889eSManos Pitsidianakis# Since: 2.11 2698432d889eSManos Pitsidianakis## 2699432d889eSManos Pitsidianakis{ 'struct': 'ThrottleLimits', 2700432d889eSManos Pitsidianakis 'data': { '*iops-total' : 'int', '*iops-total-max' : 'int', 2701432d889eSManos Pitsidianakis '*iops-total-max-length' : 'int', '*iops-read' : 'int', 2702432d889eSManos Pitsidianakis '*iops-read-max' : 'int', '*iops-read-max-length' : 'int', 2703432d889eSManos Pitsidianakis '*iops-write' : 'int', '*iops-write-max' : 'int', 2704432d889eSManos Pitsidianakis '*iops-write-max-length' : 'int', '*bps-total' : 'int', 2705432d889eSManos Pitsidianakis '*bps-total-max' : 'int', '*bps-total-max-length' : 'int', 2706432d889eSManos Pitsidianakis '*bps-read' : 'int', '*bps-read-max' : 'int', 2707432d889eSManos Pitsidianakis '*bps-read-max-length' : 'int', '*bps-write' : 'int', 2708432d889eSManos Pitsidianakis '*bps-write-max' : 'int', '*bps-write-max-length' : 'int', 2709432d889eSManos Pitsidianakis '*iops-size' : 'int' } } 2710432d889eSManos Pitsidianakis 2711432d889eSManos Pitsidianakis## 2712381bd744SKevin Wolf# @ThrottleGroupProperties: 2713381bd744SKevin Wolf# 2714381bd744SKevin Wolf# Properties for throttle-group objects. 2715381bd744SKevin Wolf# 2716381bd744SKevin Wolf# @limits: limits to apply for this throttle group 2717381bd744SKevin Wolf# 27189fb49daaSMarkus Armbruster# Features: 2719a937b6aaSMarkus Armbruster# 27209fb49daaSMarkus Armbruster# @unstable: All members starting with x- are aliases for the same key 27219fb49daaSMarkus Armbruster# without x- in the @limits object. This is not a stable 2722a937b6aaSMarkus Armbruster# interface and may be removed or changed incompatibly in the 2723a937b6aaSMarkus Armbruster# future. Use @limits for a supported stable interface. 27249fb49daaSMarkus Armbruster# 2725381bd744SKevin Wolf# Since: 2.11 2726381bd744SKevin Wolf## 2727381bd744SKevin Wolf{ 'struct': 'ThrottleGroupProperties', 2728381bd744SKevin Wolf 'data': { '*limits': 'ThrottleLimits', 27299fb49daaSMarkus Armbruster '*x-iops-total': { 'type': 'int', 27309fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27319fb49daaSMarkus Armbruster '*x-iops-total-max': { 'type': 'int', 27329fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27339fb49daaSMarkus Armbruster '*x-iops-total-max-length': { 'type': 'int', 27349fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27359fb49daaSMarkus Armbruster '*x-iops-read': { 'type': 'int', 27369fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27379fb49daaSMarkus Armbruster '*x-iops-read-max': { 'type': 'int', 27389fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27399fb49daaSMarkus Armbruster '*x-iops-read-max-length': { 'type': 'int', 27409fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27419fb49daaSMarkus Armbruster '*x-iops-write': { 'type': 'int', 27429fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27439fb49daaSMarkus Armbruster '*x-iops-write-max': { 'type': 'int', 27449fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27459fb49daaSMarkus Armbruster '*x-iops-write-max-length': { 'type': 'int', 27469fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27479fb49daaSMarkus Armbruster '*x-bps-total': { 'type': 'int', 27489fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27499fb49daaSMarkus Armbruster '*x-bps-total-max': { 'type': 'int', 27509fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27519fb49daaSMarkus Armbruster '*x-bps-total-max-length': { 'type': 'int', 27529fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27539fb49daaSMarkus Armbruster '*x-bps-read': { 'type': 'int', 27549fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27559fb49daaSMarkus Armbruster '*x-bps-read-max': { 'type': 'int', 27569fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27579fb49daaSMarkus Armbruster '*x-bps-read-max-length': { 'type': 'int', 27589fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27599fb49daaSMarkus Armbruster '*x-bps-write': { 'type': 'int', 27609fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27619fb49daaSMarkus Armbruster '*x-bps-write-max': { 'type': 'int', 27629fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27639fb49daaSMarkus Armbruster '*x-bps-write-max-length': { 'type': 'int', 27649fb49daaSMarkus Armbruster 'features': [ 'unstable' ] }, 27659fb49daaSMarkus Armbruster '*x-iops-size': { 'type': 'int', 27669fb49daaSMarkus Armbruster 'features': [ 'unstable' ] } } } 2767381bd744SKevin Wolf 2768381bd744SKevin Wolf## 27691ad166b6SBenoît Canet# @block-stream: 27701ad166b6SBenoît Canet# 27711ad166b6SBenoît Canet# Copy data from a backing file into a block device. 27721ad166b6SBenoît Canet# 2773a937b6aaSMarkus Armbruster# The block streaming operation is performed in the background until 2774a937b6aaSMarkus Armbruster# the entire backing file has been copied. This command returns 2775a937b6aaSMarkus Armbruster# immediately once streaming has started. The status of ongoing block 2776a937b6aaSMarkus Armbruster# streaming operations can be checked with query-block-jobs. The 2777a937b6aaSMarkus Armbruster# operation can be stopped before it has completed using the 2778a937b6aaSMarkus Armbruster# block-job-cancel command. 27791ad166b6SBenoît Canet# 2780a937b6aaSMarkus Armbruster# The node that receives the data is called the top image, can be 2781a937b6aaSMarkus Armbruster# located in any part of the chain (but always above the base image; 2782a937b6aaSMarkus Armbruster# see below) and can be specified using its device or node name. 2783a937b6aaSMarkus Armbruster# Earlier qemu versions only allowed 'device' to name the top level 2784a937b6aaSMarkus Armbruster# node; presence of the 'base-node' parameter during introspection can 2785a937b6aaSMarkus Armbruster# be used as a witness of the enhanced semantics of 'device'. 2786554b6147SAlberto Garcia# 2787a937b6aaSMarkus Armbruster# If a base file is specified then sectors are not copied from that 2788a937b6aaSMarkus Armbruster# base file and its backing chain. This can be used to stream a 2789a937b6aaSMarkus Armbruster# subset of the backing file chain instead of flattening the entire 2790a937b6aaSMarkus Armbruster# image. When streaming completes the image file will have the base 2791a937b6aaSMarkus Armbruster# file as its backing file, unless that node was changed while the job 2792a937b6aaSMarkus Armbruster# was running. In that case, base's parent's backing (or filtered, 2793a937b6aaSMarkus Armbruster# whichever exists) child (i.e., base at the beginning of the job) 2794a937b6aaSMarkus Armbruster# will be the new backing file. 27951ad166b6SBenoît Canet# 2796a937b6aaSMarkus Armbruster# On successful completion the image file is updated to drop the 2797a937b6aaSMarkus Armbruster# backing file and the BLOCK_JOB_COMPLETED event is emitted. 27981ad166b6SBenoît Canet# 2799a937b6aaSMarkus Armbruster# In case @device is a filter node, block-stream modifies the first 2800a937b6aaSMarkus Armbruster# non-filter overlay node below it to point to the new backing node 2801a937b6aaSMarkus Armbruster# instead of modifying @device itself. 280267acfd21SMax Reitz# 2803a937b6aaSMarkus Armbruster# @job-id: identifier for the newly-created block job. If omitted, 2804a937b6aaSMarkus Armbruster# the device name will be used. (Since 2.7) 28052323322eSAlberto Garcia# 2806554b6147SAlberto Garcia# @device: the device or node name of the top image 28071ad166b6SBenoît Canet# 2808a937b6aaSMarkus Armbruster# @base: the common backing file name. It cannot be set if @base-node 2809a937b6aaSMarkus Armbruster# or @bottom is also set. 2810312fe09cSAlberto Garcia# 2811a937b6aaSMarkus Armbruster# @base-node: the node name of the backing file. It cannot be set if 2812a937b6aaSMarkus Armbruster# @base or @bottom is also set. (Since 2.8) 28137f4a396dSVladimir Sementsov-Ogievskiy# 28147f4a396dSVladimir Sementsov-Ogievskiy# @bottom: the last node in the chain that should be streamed into 2815a937b6aaSMarkus Armbruster# top. It cannot be set if @base or @base-node is also set. It 2816a937b6aaSMarkus Armbruster# cannot be filter node. (Since 6.0) 28171ad166b6SBenoît Canet# 2818a937b6aaSMarkus Armbruster# @backing-file: The backing file string to write into the top image. 2819a937b6aaSMarkus Armbruster# This filename is not validated. 282013d8cc51SJeff Cody# 2821a937b6aaSMarkus Armbruster# If a pathname string is such that it cannot be resolved by QEMU, 2822a937b6aaSMarkus Armbruster# that means that subsequent QMP or HMP commands must use 2823a937b6aaSMarkus Armbruster# node-names for the image in question, as filename lookup methods 2824a937b6aaSMarkus Armbruster# will fail. 282513d8cc51SJeff Cody# 2826a937b6aaSMarkus Armbruster# If not specified, QEMU will automatically determine the backing 2827a937b6aaSMarkus Armbruster# file string to use, or error out if there is no obvious choice. 2828a937b6aaSMarkus Armbruster# Care should be taken when specifying the string, to specify a 2829a937b6aaSMarkus Armbruster# valid filename or protocol. (Since 2.1) 283013d8cc51SJeff Cody# 2831209e64d9SMarkus Armbruster# @backing-mask-protocol: If true, replace any protocol mentioned in 2832209e64d9SMarkus Armbruster# the 'backing file format' with 'raw', rather than storing the 2833209e64d9SMarkus Armbruster# protocol name as the backing format. Can be used even when no 2834209e64d9SMarkus Armbruster# image header will be updated (default false; since 9.0). 283572098a3aSPeter Krempa# 28361d8bda12SMarkus Armbruster# @speed: the maximum speed, in bytes per second 28371ad166b6SBenoît Canet# 2838a937b6aaSMarkus Armbruster# @on-error: the action to take on an error (default report). 'stop' 2839a937b6aaSMarkus Armbruster# and 'enospc' can only be used if the block device supports 2840a937b6aaSMarkus Armbruster# io-status (see BlockInfo). (Since 1.3) 28411ad166b6SBenoît Canet# 2842880747a8SAndrey Shinkevich# @filter-node-name: the node name that should be assigned to the 2843a937b6aaSMarkus Armbruster# filter driver that the stream job inserts into the graph above 2844a937b6aaSMarkus Armbruster# @device. If this option is not given, a node name is 2845880747a8SAndrey Shinkevich# autogenerated. (Since: 6.0) 2846880747a8SAndrey Shinkevich# 2847a937b6aaSMarkus Armbruster# @auto-finalize: When false, this job will wait in a PENDING state 2848a937b6aaSMarkus Armbruster# after it has finished its work, waiting for @block-job-finalize 2849a937b6aaSMarkus Armbruster# before making any block graph changes. When true, this job will 2850a937b6aaSMarkus Armbruster# automatically perform its abort or commit actions. Defaults to 2851a937b6aaSMarkus Armbruster# true. (Since 3.1) 2852a937b6aaSMarkus Armbruster# 2853a937b6aaSMarkus Armbruster# @auto-dismiss: When false, this job will wait in a CONCLUDED state 2854a937b6aaSMarkus Armbruster# after it has completely ceased all work, and awaits 2855a937b6aaSMarkus Armbruster# @block-job-dismiss. When true, this job will automatically 2856a937b6aaSMarkus Armbruster# disappear from the query list without user intervention. 2857241ca1abSJohn Snow# Defaults to true. (Since 3.1) 2858241ca1abSJohn Snow# 28592746f060SMarkus Armbruster# Errors: 2860e050e426SPeter Maydell# - If @device does not exist, DeviceNotFound. 286149b37c23SMarc-André Lureau# 28621ad166b6SBenoît Canet# Since: 1.1 286349b37c23SMarc-André Lureau# 286414b48aaaSJohn Snow# .. qmp-example:: 286549b37c23SMarc-André Lureau# 286649b37c23SMarc-André Lureau# -> { "execute": "block-stream", 286749b37c23SMarc-André Lureau# "arguments": { "device": "virtio0", 286849b37c23SMarc-André Lureau# "base": "/tmp/master.qcow2" } } 286949b37c23SMarc-André Lureau# <- { "return": {} } 28701ad166b6SBenoît Canet## 28711ad166b6SBenoît Canet{ 'command': 'block-stream', 28722323322eSAlberto Garcia 'data': { '*job-id': 'str', 'device': 'str', '*base': 'str', 287372098a3aSPeter Krempa '*base-node': 'str', '*backing-file': 'str', 287472098a3aSPeter Krempa '*backing-mask-protocol': 'bool', 287572098a3aSPeter Krempa '*bottom': 'str', 28767f4a396dSVladimir Sementsov-Ogievskiy '*speed': 'int', '*on-error': 'BlockdevOnError', 2877880747a8SAndrey Shinkevich '*filter-node-name': 'str', 2878f55ba801SPaolo Bonzini '*auto-finalize': 'bool', '*auto-dismiss': 'bool' }, 2879f55ba801SPaolo Bonzini 'allow-preconfig': true } 28801ad166b6SBenoît Canet 28811ad166b6SBenoît Canet## 28821ad166b6SBenoît Canet# @block-job-set-speed: 28831ad166b6SBenoît Canet# 28841ad166b6SBenoît Canet# Set maximum speed for a background block operation. 28851ad166b6SBenoît Canet# 28861ad166b6SBenoît Canet# This command can only be issued when there is an active block job. 28871ad166b6SBenoît Canet# 28881ad166b6SBenoît Canet# Throttling can be disabled by setting the speed to 0. 28891ad166b6SBenoît Canet# 28906aae5be6SAlberto Garcia# @device: The job identifier. This used to be a device name (hence 2891a937b6aaSMarkus Armbruster# the name of the parameter), but since QEMU 2.7 it can have other 2892a937b6aaSMarkus Armbruster# values. 28931ad166b6SBenoît Canet# 28941ad166b6SBenoît Canet# @speed: the maximum speed, in bytes per second, or 0 for unlimited. 28951ad166b6SBenoît Canet# Defaults to 0. 28961ad166b6SBenoît Canet# 28972746f060SMarkus Armbruster# Errors: 2898a937b6aaSMarkus Armbruster# - If no background operation is active on this device, 2899a937b6aaSMarkus Armbruster# DeviceNotActive 29001ad166b6SBenoît Canet# 29011ad166b6SBenoît Canet# Since: 1.1 29021ad166b6SBenoît Canet## 29031ad166b6SBenoît Canet{ 'command': 'block-job-set-speed', 2904f55ba801SPaolo Bonzini 'data': { 'device': 'str', 'speed': 'int' }, 2905f55ba801SPaolo Bonzini 'allow-preconfig': true } 29061ad166b6SBenoît Canet 29071ad166b6SBenoît Canet## 29081ad166b6SBenoît Canet# @block-job-cancel: 29091ad166b6SBenoît Canet# 29101ad166b6SBenoît Canet# Stop an active background block operation. 29111ad166b6SBenoît Canet# 2912a937b6aaSMarkus Armbruster# This command returns immediately after marking the active background 2913a937b6aaSMarkus Armbruster# block operation for cancellation. It is an error to call this 2914a937b6aaSMarkus Armbruster# command if no operation is in progress. 29151ad166b6SBenoît Canet# 29161ad166b6SBenoît Canet# The operation will cancel as soon as possible and then emit the 2917a937b6aaSMarkus Armbruster# BLOCK_JOB_CANCELLED event. Before that happens the job is still 2918a937b6aaSMarkus Armbruster# visible when enumerated using query-block-jobs. 29191ad166b6SBenoît Canet# 2920a937b6aaSMarkus Armbruster# Note that if you issue 'block-job-cancel' after 'drive-mirror' has 2921a937b6aaSMarkus Armbruster# indicated (via the event BLOCK_JOB_READY) that the source and 2922a937b6aaSMarkus Armbruster# destination are synchronized, then the event triggered by this 2923a937b6aaSMarkus Armbruster# command changes to BLOCK_JOB_COMPLETED, to indicate that the 2924a937b6aaSMarkus Armbruster# mirroring has ended and the destination now has a point-in-time copy 2925a937b6aaSMarkus Armbruster# tied to the time of the cancellation. 2926c117bb14SKashyap Chamarthy# 2927a937b6aaSMarkus Armbruster# For streaming, the image file retains its backing file unless the 2928a937b6aaSMarkus Armbruster# streaming operation happens to complete just as it is being 2929a937b6aaSMarkus Armbruster# cancelled. A new streaming operation can be started at a later time 2930a937b6aaSMarkus Armbruster# to finish copying all data from the backing file. 29311ad166b6SBenoît Canet# 29326aae5be6SAlberto Garcia# @device: The job identifier. This used to be a device name (hence 2933a937b6aaSMarkus Armbruster# the name of the parameter), but since QEMU 2.7 it can have other 2934a937b6aaSMarkus Armbruster# values. 29351ad166b6SBenoît Canet# 2936a937b6aaSMarkus Armbruster# @force: If true, and the job has already emitted the event 2937a937b6aaSMarkus Armbruster# BLOCK_JOB_READY, abandon the job immediately (even if it is 2938a937b6aaSMarkus Armbruster# paused) instead of waiting for the destination to complete its 2939a937b6aaSMarkus Armbruster# final synchronization (since 1.3) 29401ad166b6SBenoît Canet# 29412746f060SMarkus Armbruster# Errors: 2942a937b6aaSMarkus Armbruster# - If no background operation is active on this device, 2943a937b6aaSMarkus Armbruster# DeviceNotActive 29441ad166b6SBenoît Canet# 29451ad166b6SBenoît Canet# Since: 1.1 29461ad166b6SBenoît Canet## 2947f55ba801SPaolo Bonzini{ 'command': 'block-job-cancel', 'data': { 'device': 'str', '*force': 'bool' }, 2948f55ba801SPaolo Bonzini 'allow-preconfig': true } 29491ad166b6SBenoît Canet 29501ad166b6SBenoît Canet## 29511ad166b6SBenoît Canet# @block-job-pause: 29521ad166b6SBenoît Canet# 29531ad166b6SBenoît Canet# Pause an active background block operation. 29541ad166b6SBenoît Canet# 2955a937b6aaSMarkus Armbruster# This command returns immediately after marking the active background 2956a937b6aaSMarkus Armbruster# block operation for pausing. It is an error to call this command if 2957a937b6aaSMarkus Armbruster# no operation is in progress or if the job is already paused. 29581ad166b6SBenoît Canet# 2959a937b6aaSMarkus Armbruster# The operation will pause as soon as possible. No event is emitted 2960a937b6aaSMarkus Armbruster# when the operation is actually paused. Cancelling a paused job 2961a937b6aaSMarkus Armbruster# automatically resumes it. 29621ad166b6SBenoît Canet# 29636aae5be6SAlberto Garcia# @device: The job identifier. This used to be a device name (hence 2964a937b6aaSMarkus Armbruster# the name of the parameter), but since QEMU 2.7 it can have other 2965a937b6aaSMarkus Armbruster# values. 29661ad166b6SBenoît Canet# 29672746f060SMarkus Armbruster# Errors: 2968a937b6aaSMarkus Armbruster# - If no background operation is active on this device, 2969a937b6aaSMarkus Armbruster# DeviceNotActive 29701ad166b6SBenoît Canet# 29711ad166b6SBenoît Canet# Since: 1.3 29721ad166b6SBenoît Canet## 2973f55ba801SPaolo Bonzini{ 'command': 'block-job-pause', 'data': { 'device': 'str' }, 2974f55ba801SPaolo Bonzini 'allow-preconfig': true } 29751ad166b6SBenoît Canet 29761ad166b6SBenoît Canet## 29771ad166b6SBenoît Canet# @block-job-resume: 29781ad166b6SBenoît Canet# 29791ad166b6SBenoît Canet# Resume an active background block operation. 29801ad166b6SBenoît Canet# 2981a937b6aaSMarkus Armbruster# This command returns immediately after resuming a paused background 2982a937b6aaSMarkus Armbruster# block operation. It is an error to call this command if no 2983a937b6aaSMarkus Armbruster# operation is in progress or if the job is not paused. 29841ad166b6SBenoît Canet# 29851ad166b6SBenoît Canet# This command also clears the error status of the job. 29861ad166b6SBenoît Canet# 29876aae5be6SAlberto Garcia# @device: The job identifier. This used to be a device name (hence 2988a937b6aaSMarkus Armbruster# the name of the parameter), but since QEMU 2.7 it can have other 2989a937b6aaSMarkus Armbruster# values. 29901ad166b6SBenoît Canet# 29912746f060SMarkus Armbruster# Errors: 2992a937b6aaSMarkus Armbruster# - If no background operation is active on this device, 2993a937b6aaSMarkus Armbruster# DeviceNotActive 29941ad166b6SBenoît Canet# 29951ad166b6SBenoît Canet# Since: 1.3 29961ad166b6SBenoît Canet## 2997f55ba801SPaolo Bonzini{ 'command': 'block-job-resume', 'data': { 'device': 'str' }, 2998f55ba801SPaolo Bonzini 'allow-preconfig': true } 29991ad166b6SBenoît Canet 30001ad166b6SBenoît Canet## 30011ad166b6SBenoît Canet# @block-job-complete: 30021ad166b6SBenoît Canet# 3003a937b6aaSMarkus Armbruster# Manually trigger completion of an active background block operation. 3004a937b6aaSMarkus Armbruster# This is supported for drive mirroring, where it also switches the 3005a937b6aaSMarkus Armbruster# device to write to the target path only. The ability to complete is 3006a937b6aaSMarkus Armbruster# signaled with a BLOCK_JOB_READY event. 30071ad166b6SBenoît Canet# 3008a937b6aaSMarkus Armbruster# This command completes an active background block operation 3009a937b6aaSMarkus Armbruster# synchronously. The ordering of this command's return with the 3010a937b6aaSMarkus Armbruster# BLOCK_JOB_COMPLETED event is not defined. Note that if an I/O error 3011a937b6aaSMarkus Armbruster# occurs during the processing of this command: 1) the command itself 3012a937b6aaSMarkus Armbruster# will fail; 2) the error will be processed according to the 3013a937b6aaSMarkus Armbruster# rerror/werror arguments that were specified when starting the 3014a937b6aaSMarkus Armbruster# operation. 30151ad166b6SBenoît Canet# 30161ad166b6SBenoît Canet# A cancelled or paused job cannot be completed. 30171ad166b6SBenoît Canet# 30186aae5be6SAlberto Garcia# @device: The job identifier. This used to be a device name (hence 3019a937b6aaSMarkus Armbruster# the name of the parameter), but since QEMU 2.7 it can have other 3020a937b6aaSMarkus Armbruster# values. 30211ad166b6SBenoît Canet# 30222746f060SMarkus Armbruster# Errors: 3023a937b6aaSMarkus Armbruster# - If no background operation is active on this device, 3024a937b6aaSMarkus Armbruster# DeviceNotActive 30251ad166b6SBenoît Canet# 30261ad166b6SBenoît Canet# Since: 1.3 30271ad166b6SBenoît Canet## 3028f55ba801SPaolo Bonzini{ 'command': 'block-job-complete', 'data': { 'device': 'str' }, 3029f55ba801SPaolo Bonzini 'allow-preconfig': true } 30301ad166b6SBenoît Canet 30311ad166b6SBenoît Canet## 303275f71059SJohn Snow# @block-job-dismiss: 303375f71059SJohn Snow# 3034a937b6aaSMarkus Armbruster# For jobs that have already concluded, remove them from the 3035a937b6aaSMarkus Armbruster# block-job-query list. This command only needs to be run for jobs 3036a937b6aaSMarkus Armbruster# which were started with QEMU 2.12+ job lifetime management 3037a937b6aaSMarkus Armbruster# semantics. 303875f71059SJohn Snow# 3039a937b6aaSMarkus Armbruster# This command will refuse to operate on any job that has not yet 304001bed0ffSMarkus Armbruster# reached its terminal state, JOB_STATUS_CONCLUDED. For jobs that 304101bed0ffSMarkus Armbruster# make use of the BLOCK_JOB_READY event, block-job-cancel or 3042a937b6aaSMarkus Armbruster# block-job-complete will still need to be used as appropriate. 304375f71059SJohn Snow# 304475f71059SJohn Snow# @id: The job identifier. 304575f71059SJohn Snow# 304675f71059SJohn Snow# Since: 2.12 304775f71059SJohn Snow## 3048f55ba801SPaolo Bonzini{ 'command': 'block-job-dismiss', 'data': { 'id': 'str' }, 3049f55ba801SPaolo Bonzini 'allow-preconfig': true } 305075f71059SJohn Snow 305175f71059SJohn Snow## 305211b61fbcSJohn Snow# @block-job-finalize: 305311b61fbcSJohn Snow# 305411b61fbcSJohn Snow# Once a job that has manual=true reaches the pending state, it can be 3055a937b6aaSMarkus Armbruster# instructed to finalize any graph changes and do any necessary 3056a937b6aaSMarkus Armbruster# cleanup via this command. For jobs in a transaction, instructing 3057a937b6aaSMarkus Armbruster# one job to finalize will force ALL jobs in the transaction to 3058a937b6aaSMarkus Armbruster# finalize, so it is only necessary to instruct a single member job to 3059a937b6aaSMarkus Armbruster# finalize. 306011b61fbcSJohn Snow# 306111b61fbcSJohn Snow# @id: The job identifier. 306211b61fbcSJohn Snow# 306311b61fbcSJohn Snow# Since: 2.12 306411b61fbcSJohn Snow## 3065f55ba801SPaolo Bonzini{ 'command': 'block-job-finalize', 'data': { 'id': 'str' }, 3066f55ba801SPaolo Bonzini 'allow-preconfig': true } 306711b61fbcSJohn Snow 306811b61fbcSJohn Snow## 30692d400d15SFiona Ebner# @BlockJobChangeOptionsMirror: 30702d400d15SFiona Ebner# 30712d400d15SFiona Ebner# @copy-mode: Switch to this copy mode. Currently, only the switch 30722d400d15SFiona Ebner# from 'background' to 'write-blocking' is implemented. 30732d400d15SFiona Ebner# 30742d400d15SFiona Ebner# Since: 8.2 30752d400d15SFiona Ebner## 30762d400d15SFiona Ebner{ 'struct': 'BlockJobChangeOptionsMirror', 30772d400d15SFiona Ebner 'data': { 'copy-mode' : 'MirrorCopyMode' } } 30782d400d15SFiona Ebner 30792d400d15SFiona Ebner## 308061a3a5a7SFiona Ebner# @BlockJobChangeOptions: 308161a3a5a7SFiona Ebner# 308261a3a5a7SFiona Ebner# Block job options that can be changed after job creation. 308361a3a5a7SFiona Ebner# 308461a3a5a7SFiona Ebner# @id: The job identifier 308561a3a5a7SFiona Ebner# 308661a3a5a7SFiona Ebner# @type: The job type 308761a3a5a7SFiona Ebner# 308837507c14SMarkus Armbruster# Since: 8.2 308961a3a5a7SFiona Ebner## 309061a3a5a7SFiona Ebner{ 'union': 'BlockJobChangeOptions', 309161a3a5a7SFiona Ebner 'base': { 'id': 'str', 'type': 'JobType' }, 309261a3a5a7SFiona Ebner 'discriminator': 'type', 30932d400d15SFiona Ebner 'data': { 'mirror': 'BlockJobChangeOptionsMirror' } } 309461a3a5a7SFiona Ebner 309561a3a5a7SFiona Ebner## 309661a3a5a7SFiona Ebner# @block-job-change: 309761a3a5a7SFiona Ebner# 309861a3a5a7SFiona Ebner# Change the block job's options. 309961a3a5a7SFiona Ebner# 310061a3a5a7SFiona Ebner# Since: 8.2 310161a3a5a7SFiona Ebner## 310261a3a5a7SFiona Ebner{ 'command': 'block-job-change', 310361a3a5a7SFiona Ebner 'data': 'BlockJobChangeOptions', 'boxed': true } 310461a3a5a7SFiona Ebner 310561a3a5a7SFiona Ebner## 31065072f7b3SMarc-André Lureau# @BlockdevDiscardOptions: 31071ad166b6SBenoît Canet# 31081ad166b6SBenoît Canet# Determines how to handle discard requests. 31091ad166b6SBenoît Canet# 31101ad166b6SBenoît Canet# @ignore: Ignore the request 3111a937b6aaSMarkus Armbruster# 31121ad166b6SBenoît Canet# @unmap: Forward as an unmap request 31131ad166b6SBenoît Canet# 311479b7a77eSMarkus Armbruster# Since: 2.9 31151ad166b6SBenoît Canet## 31161ad166b6SBenoît Canet{ 'enum': 'BlockdevDiscardOptions', 31171ad166b6SBenoît Canet 'data': [ 'ignore', 'unmap' ] } 31181ad166b6SBenoît Canet 31191ad166b6SBenoît Canet## 31205072f7b3SMarc-André Lureau# @BlockdevDetectZeroesOptions: 31211ad166b6SBenoît Canet# 31221ad166b6SBenoît Canet# Describes the operation mode for the automatic conversion of plain 3123a937b6aaSMarkus Armbruster# zero writes by the OS to driver specific optimized zero write 3124a937b6aaSMarkus Armbruster# commands. 31251ad166b6SBenoît Canet# 31261ad166b6SBenoît Canet# @off: Disabled (default) 3127a937b6aaSMarkus Armbruster# 31281ad166b6SBenoît Canet# @on: Enabled 3129a937b6aaSMarkus Armbruster# 3130a937b6aaSMarkus Armbruster# @unmap: Enabled and even try to unmap blocks if possible. This 3131a937b6aaSMarkus Armbruster# requires also that @BlockdevDiscardOptions is set to unmap for 3132a937b6aaSMarkus Armbruster# this device. 31331ad166b6SBenoît Canet# 31341ad166b6SBenoît Canet# Since: 2.1 31351ad166b6SBenoît Canet## 31361ad166b6SBenoît Canet{ 'enum': 'BlockdevDetectZeroesOptions', 31371ad166b6SBenoît Canet 'data': [ 'off', 'on', 'unmap' ] } 31381ad166b6SBenoît Canet 31391ad166b6SBenoît Canet## 31405072f7b3SMarc-André Lureau# @BlockdevAioOptions: 31411ad166b6SBenoît Canet# 31421ad166b6SBenoît Canet# Selects the AIO backend to handle I/O requests 31431ad166b6SBenoît Canet# 31441ad166b6SBenoît Canet# @threads: Use qemu's thread pool 3145a937b6aaSMarkus Armbruster# 31461ad166b6SBenoît Canet# @native: Use native AIO backend (only Linux and Windows) 3147a937b6aaSMarkus Armbruster# 3148f14beaecSAarushi Mehta# @io_uring: Use linux io_uring (since 5.0) 31491ad166b6SBenoît Canet# 315079b7a77eSMarkus Armbruster# Since: 2.9 31511ad166b6SBenoît Canet## 31521ad166b6SBenoît Canet{ 'enum': 'BlockdevAioOptions', 3153f14beaecSAarushi Mehta 'data': [ 'threads', 'native', 31548a9f1e1dSMarc-André Lureau { 'name': 'io_uring', 'if': 'CONFIG_LINUX_IO_URING' } ] } 31551ad166b6SBenoît Canet 31561ad166b6SBenoît Canet## 31575072f7b3SMarc-André Lureau# @BlockdevCacheOptions: 31581ad166b6SBenoît Canet# 31591ad166b6SBenoît Canet# Includes cache-related options for block devices 31601ad166b6SBenoît Canet# 31611d8bda12SMarkus Armbruster# @direct: enables use of O_DIRECT (bypass the host page cache; 31621ad166b6SBenoît Canet# default: false) 3163a937b6aaSMarkus Armbruster# 3164a937b6aaSMarkus Armbruster# @no-flush: ignore any flush requests for the device (default: false) 31651ad166b6SBenoît Canet# 316679b7a77eSMarkus Armbruster# Since: 2.9 31671ad166b6SBenoît Canet## 3168895a2a80SEric Blake{ 'struct': 'BlockdevCacheOptions', 3169aaa436f9SKevin Wolf 'data': { '*direct': 'bool', 31701ad166b6SBenoît Canet '*no-flush': 'bool' } } 31711ad166b6SBenoît Canet 31721ad166b6SBenoît Canet## 31735072f7b3SMarc-André Lureau# @BlockdevDriver: 31741ad166b6SBenoît Canet# 31751ad166b6SBenoît Canet# Drivers that are supported in block device operations. 31761ad166b6SBenoît Canet# 3177d8e7d87eSManos Pitsidianakis# @throttle: Since 2.11 3178a937b6aaSMarkus Armbruster# 3179d87ee3d7SFam Zheng# @nvme: Since 2.12 3180a937b6aaSMarkus Armbruster# 318151f63ec7SPeter Maydell# @copy-on-read: Since 3.0 3182a937b6aaSMarkus Armbruster# 3183bfcc224eSAapo Vienamo# @blklogwrites: Since 3.0 3184a937b6aaSMarkus Armbruster# 318535e32d9eSPavel Dovgalyuk# @blkreplay: Since 4.2 3186a937b6aaSMarkus Armbruster# 3187f41388e0SAndrey Shinkevich# @compress: Since 5.0 3188a937b6aaSMarkus Armbruster# 3189783b2825SVladimir Sementsov-Ogievskiy# @copy-before-write: Since 6.2 3190a937b6aaSMarkus Armbruster# 31911c14eaabSVladimir Sementsov-Ogievskiy# @snapshot-access: Since 7.0 3192da92c3ffSAshish Mittal# 3193b8734638SThomas Huth# Features: 3194b8734638SThomas Huth# 3195b8734638SThomas Huth# @deprecated: Member @gluster is deprecated because GlusterFS 3196b8734638SThomas Huth# development ceased. 3197b8734638SThomas Huth# 319879b7a77eSMarkus Armbruster# Since: 2.9 31991ad166b6SBenoît Canet## 32001ad166b6SBenoît Canet{ 'enum': 'BlockdevDriver', 320135e32d9eSPavel Dovgalyuk 'data': [ 'blkdebug', 'blklogwrites', 'blkreplay', 'blkverify', 'bochs', 3202783b2825SVladimir Sementsov-Ogievskiy 'cloop', 'compress', 'copy-before-write', 'copy-on-read', 'dmg', 3203b8734638SThomas Huth 'file', 'snapshot-access', 'ftp', 'ftps', 3204b8734638SThomas Huth {'name': 'gluster', 'features': [ 'deprecated' ] }, 32058a9f1e1dSMarc-André Lureau {'name': 'host_cdrom', 'if': 'HAVE_HOST_BLOCK_DEVICE' }, 32068a9f1e1dSMarc-André Lureau {'name': 'host_device', 'if': 'HAVE_HOST_BLOCK_DEVICE' }, 3207fd66dbd4SStefan Hajnoczi 'http', 'https', 3208fd66dbd4SStefan Hajnoczi { 'name': 'io_uring', 'if': 'CONFIG_BLKIO' }, 3209fd66dbd4SStefan Hajnoczi 'iscsi', 3210fd66dbd4SStefan Hajnoczi 'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 3211fd66dbd4SStefan Hajnoczi { 'name': 'nvme-io_uring', 'if': 'CONFIG_BLKIO' }, 3212fd66dbd4SStefan Hajnoczi 'parallels', 'preallocate', 'qcow', 'qcow2', 'qed', 'quorum', 3213fd66dbd4SStefan Hajnoczi 'raw', 'rbd', 32148a9f1e1dSMarc-André Lureau { 'name': 'replication', 'if': 'CONFIG_REPLICATION' }, 3215fd66dbd4SStefan Hajnoczi 'ssh', 'throttle', 'vdi', 'vhdx', 321603d9e4c0SAlberto Faria { 'name': 'virtio-blk-vfio-pci', 'if': 'CONFIG_BLKIO' }, 3217fd66dbd4SStefan Hajnoczi { 'name': 'virtio-blk-vhost-user', 'if': 'CONFIG_BLKIO' }, 3218fd66dbd4SStefan Hajnoczi { 'name': 'virtio-blk-vhost-vdpa', 'if': 'CONFIG_BLKIO' }, 3219fd66dbd4SStefan Hajnoczi 'vmdk', 'vpc', 'vvfat' ] } 32201ad166b6SBenoît Canet 32211ad166b6SBenoît Canet## 32225072f7b3SMarc-André Lureau# @BlockdevOptionsFile: 32231ad166b6SBenoît Canet# 322468555285SKevin Wolf# Driver specific block device options for the file backend. 32251ad166b6SBenoît Canet# 32261ad166b6SBenoît Canet# @filename: path to the image file 3227a937b6aaSMarkus Armbruster# 3228a937b6aaSMarkus Armbruster# @pr-manager: the id for the object that will handle persistent 3229a937b6aaSMarkus Armbruster# reservations for this device (default: none, forward the 3230a937b6aaSMarkus Armbruster# commands via SG_IO; since 2.11) 3231a937b6aaSMarkus Armbruster# 32321d8bda12SMarkus Armbruster# @aio: AIO backend (default: threads) (since: 2.8) 3233a937b6aaSMarkus Armbruster# 3234a937b6aaSMarkus Armbruster# @aio-max-batch: maximum number of requests to batch together into a 3235a937b6aaSMarkus Armbruster# single submission in the AIO backend. The smallest value 3236a937b6aaSMarkus Armbruster# between this and the aio-max-batch value of the IOThread object 3237a937b6aaSMarkus Armbruster# is chosen. 0 means that the AIO backend will handle it 3238a937b6aaSMarkus Armbruster# automatically. (default: 0, since 6.2) 3239a937b6aaSMarkus Armbruster# 3240a937b6aaSMarkus Armbruster# @locking: whether to enable file locking. If set to 'auto', only 3241a937b6aaSMarkus Armbruster# enable when Open File Descriptor (OFD) locking API is available 324216b48d5dSFam Zheng# (default: auto, since 2.10) 3243a937b6aaSMarkus Armbruster# 3244a937b6aaSMarkus Armbruster# @drop-cache: invalidate page cache during live migration. This 3245a937b6aaSMarkus Armbruster# prevents stale data on the migration destination with 3246a937b6aaSMarkus Armbruster# cache.direct=off. Currently only supported on Linux hosts. 3247f357fcd8SStefan Hajnoczi# (default: on, since: 4.0) 3248a937b6aaSMarkus Armbruster# 3249a937b6aaSMarkus Armbruster# @x-check-cache-dropped: whether to check that page cache was dropped 3250a937b6aaSMarkus Armbruster# on live migration. May cause noticeable delays if the image 3251a937b6aaSMarkus Armbruster# file is large, do not use in production. (default: off) 3252a937b6aaSMarkus Armbruster# (since: 3.0) 32531ad166b6SBenoît Canet# 3254c9d40709SKevin Wolf# Features: 3255a937b6aaSMarkus Armbruster# 3256a937b6aaSMarkus Armbruster# @dynamic-auto-read-only: If present, enabled auto-read-only means 3257a937b6aaSMarkus Armbruster# that the driver will open the image read-only at first, 3258a937b6aaSMarkus Armbruster# dynamically reopen the image file read-write when the first 3259a937b6aaSMarkus Armbruster# writer is attached to the node and reopen read-only when the 3260a937b6aaSMarkus Armbruster# last writer is detached. This allows giving QEMU write 3261a937b6aaSMarkus Armbruster# permissions only on demand when an operation actually needs 3262a937b6aaSMarkus Armbruster# write access. 3263a937b6aaSMarkus Armbruster# 32649fb49daaSMarkus Armbruster# @unstable: Member x-check-cache-dropped is meant for debugging. 3265c9d40709SKevin Wolf# 326679b7a77eSMarkus Armbruster# Since: 2.9 32671ad166b6SBenoît Canet## 3268895a2a80SEric Blake{ 'struct': 'BlockdevOptionsFile', 32690a4279d9SKevin Wolf 'data': { 'filename': 'str', 32707c9e5276SPaolo Bonzini '*pr-manager': 'str', 327116b48d5dSFam Zheng '*locking': 'OnOffAuto', 327231be8a2aSStefan Hajnoczi '*aio': 'BlockdevAioOptions', 3273684960d4SStefano Garzarella '*aio-max-batch': 'int', 3274f357fcd8SStefan Hajnoczi '*drop-cache': {'type': 'bool', 32758a9f1e1dSMarc-André Lureau 'if': 'CONFIG_LINUX'}, 32769fb49daaSMarkus Armbruster '*x-check-cache-dropped': { 'type': 'bool', 32779fb49daaSMarkus Armbruster 'features': [ 'unstable' ] } }, 3278c9d40709SKevin Wolf 'features': [ { 'name': 'dynamic-auto-read-only', 32798a9f1e1dSMarc-André Lureau 'if': 'CONFIG_POSIX' } ] } 32801ad166b6SBenoît Canet 32811ad166b6SBenoît Canet## 32825072f7b3SMarc-André Lureau# @BlockdevOptionsNull: 3283e819ab22SFam Zheng# 3284e819ab22SFam Zheng# Driver specific block device options for the null backend. 3285e819ab22SFam Zheng# 32861d8bda12SMarkus Armbruster# @size: size of the device in bytes. 3287a937b6aaSMarkus Armbruster# 32881d8bda12SMarkus Armbruster# @latency-ns: emulated latency (in nanoseconds) in processing 3289e5e51dd3SFam Zheng# requests. Default to zero which completes requests immediately. 3290e5e51dd3SFam Zheng# (Since 2.4) 3291a937b6aaSMarkus Armbruster# 3292a937b6aaSMarkus Armbruster# @read-zeroes: if true, reads from the device produce zeroes; if 3293a937b6aaSMarkus Armbruster# false, the buffer is left unchanged. 3294a937b6aaSMarkus Armbruster# (default: false; since: 4.1) 3295e819ab22SFam Zheng# 329679b7a77eSMarkus Armbruster# Since: 2.9 3297e819ab22SFam Zheng## 3298895a2a80SEric Blake{ 'struct': 'BlockdevOptionsNull', 3299128b05f7SKevin Wolf 'data': { '*size': 'int', '*latency-ns': 'uint64', '*read-zeroes': 'bool' } } 3300e819ab22SFam Zheng 3301e819ab22SFam Zheng## 3302d87ee3d7SFam Zheng# @BlockdevOptionsNVMe: 3303d87ee3d7SFam Zheng# 3304d87ee3d7SFam Zheng# Driver specific block device options for the NVMe backend. 3305d87ee3d7SFam Zheng# 3306a937b6aaSMarkus Armbruster# @device: PCI controller address of the NVMe device in format 3307a937b6aaSMarkus Armbruster# hhhh:bb:ss.f (host:bus:slot.function) 3308a937b6aaSMarkus Armbruster# 3309d87ee3d7SFam Zheng# @namespace: namespace number of the device, starting from 1. 3310d87ee3d7SFam Zheng# 3311ecaf647fSDaniel P. Berrangé# Note that the PCI @device must have been unbound from any host 3312ecaf647fSDaniel P. Berrangé# kernel driver before instructing QEMU to add the blockdev. 3313ecaf647fSDaniel P. Berrangé# 3314d87ee3d7SFam Zheng# Since: 2.12 3315d87ee3d7SFam Zheng## 3316d87ee3d7SFam Zheng{ 'struct': 'BlockdevOptionsNVMe', 3317d87ee3d7SFam Zheng 'data': { 'device': 'str', 'namespace': 'int' } } 3318d87ee3d7SFam Zheng 3319d87ee3d7SFam Zheng## 33205072f7b3SMarc-André Lureau# @BlockdevOptionsVVFAT: 33211ad166b6SBenoît Canet# 33221ad166b6SBenoît Canet# Driver specific block device options for the vvfat protocol. 33231ad166b6SBenoît Canet# 33241ad166b6SBenoît Canet# @dir: directory to be exported as FAT image 3325a937b6aaSMarkus Armbruster# 33261d8bda12SMarkus Armbruster# @fat-type: FAT type: 12, 16 or 32 3327a937b6aaSMarkus Armbruster# 3328a937b6aaSMarkus Armbruster# @floppy: whether to export a floppy image (true) or partitioned hard 3329a937b6aaSMarkus Armbruster# disk (false; default) 3330a937b6aaSMarkus Armbruster# 3331a937b6aaSMarkus Armbruster# @label: set the volume label, limited to 11 bytes. FAT16 and FAT32 3332a937b6aaSMarkus Armbruster# traditionally have some restrictions on labels, which are 3333d5941ddaSWolfgang Bumiller# ignored by most operating systems. Defaults to "QEMU VVFAT". 3334d5941ddaSWolfgang Bumiller# (since 2.4) 3335a937b6aaSMarkus Armbruster# 33361d8bda12SMarkus Armbruster# @rw: whether to allow write operations (default: false) 33371ad166b6SBenoît Canet# 333879b7a77eSMarkus Armbruster# Since: 2.9 33391ad166b6SBenoît Canet## 3340895a2a80SEric Blake{ 'struct': 'BlockdevOptionsVVFAT', 33411ad166b6SBenoît Canet 'data': { 'dir': 'str', '*fat-type': 'int', '*floppy': 'bool', 3342d5941ddaSWolfgang Bumiller '*label': 'str', '*rw': 'bool' } } 33431ad166b6SBenoît Canet 33441ad166b6SBenoît Canet## 33455072f7b3SMarc-André Lureau# @BlockdevOptionsGenericFormat: 33461ad166b6SBenoît Canet# 3347a937b6aaSMarkus Armbruster# Driver specific block device options for image format that have no 3348a937b6aaSMarkus Armbruster# option besides their data source. 33491ad166b6SBenoît Canet# 33501ad166b6SBenoît Canet# @file: reference to or definition of the data source block device 33511ad166b6SBenoît Canet# 335279b7a77eSMarkus Armbruster# Since: 2.9 33531ad166b6SBenoît Canet## 3354895a2a80SEric Blake{ 'struct': 'BlockdevOptionsGenericFormat', 33551ad166b6SBenoît Canet 'data': { 'file': 'BlockdevRef' } } 33561ad166b6SBenoît Canet 33571ad166b6SBenoît Canet## 33585072f7b3SMarc-André Lureau# @BlockdevOptionsLUKS: 335978368575SDaniel P. Berrange# 336078368575SDaniel P. Berrange# Driver specific block device options for LUKS. 336178368575SDaniel P. Berrange# 3362a937b6aaSMarkus Armbruster# @key-secret: the ID of a QCryptoSecret object providing the 3363a937b6aaSMarkus Armbruster# decryption key (since 2.6). Mandatory except when doing a 3364a937b6aaSMarkus Armbruster# metadata-only probe of the image. 336578368575SDaniel P. Berrange# 33669ad5c4e7SHyman Huang# @header: block device holding a detached LUKS header. (since 9.0) 33679ad5c4e7SHyman Huang# 336879b7a77eSMarkus Armbruster# Since: 2.9 336978368575SDaniel P. Berrange## 337078368575SDaniel P. Berrange{ 'struct': 'BlockdevOptionsLUKS', 337178368575SDaniel P. Berrange 'base': 'BlockdevOptionsGenericFormat', 33729ad5c4e7SHyman Huang 'data': { '*key-secret': 'str', 33739ad5c4e7SHyman Huang '*header': 'BlockdevRef'} } 337478368575SDaniel P. Berrange 337578368575SDaniel P. Berrange## 33765072f7b3SMarc-André Lureau# @BlockdevOptionsGenericCOWFormat: 33771ad166b6SBenoît Canet# 3378a937b6aaSMarkus Armbruster# Driver specific block device options for image format that have no 3379a937b6aaSMarkus Armbruster# option besides their data source and an optional backing file. 33801ad166b6SBenoît Canet# 33811d8bda12SMarkus Armbruster# @backing: reference to or definition of the backing file block 3382a937b6aaSMarkus Armbruster# device, null disables the backing file entirely. Defaults to 3383a937b6aaSMarkus Armbruster# the backing file stored the image file. 33841ad166b6SBenoît Canet# 338579b7a77eSMarkus Armbruster# Since: 2.9 33861ad166b6SBenoît Canet## 3387895a2a80SEric Blake{ 'struct': 'BlockdevOptionsGenericCOWFormat', 33881ad166b6SBenoît Canet 'base': 'BlockdevOptionsGenericFormat', 3389c42e8742SMarkus Armbruster 'data': { '*backing': 'BlockdevRefOrNull' } } 33901ad166b6SBenoît Canet 33911ad166b6SBenoît Canet## 33925072f7b3SMarc-André Lureau# @Qcow2OverlapCheckMode: 3393f6585811SMax Reitz# 3394f6585811SMax Reitz# General overlap check modes. 3395f6585811SMax Reitz# 3396f6585811SMax Reitz# @none: Do not perform any checks 3397f6585811SMax Reitz# 3398a937b6aaSMarkus Armbruster# @constant: Perform only checks which can be done in constant time 3399a937b6aaSMarkus Armbruster# and without reading anything from disk 3400f6585811SMax Reitz# 3401a937b6aaSMarkus Armbruster# @cached: Perform only checks which can be done without reading 3402a937b6aaSMarkus Armbruster# anything from disk 3403f6585811SMax Reitz# 3404f6585811SMax Reitz# @all: Perform all available overlap checks 3405f6585811SMax Reitz# 340679b7a77eSMarkus Armbruster# Since: 2.9 3407f6585811SMax Reitz## 3408f6585811SMax Reitz{ 'enum': 'Qcow2OverlapCheckMode', 3409f6585811SMax Reitz 'data': [ 'none', 'constant', 'cached', 'all' ] } 3410f6585811SMax Reitz 3411f6585811SMax Reitz## 34125072f7b3SMarc-André Lureau# @Qcow2OverlapCheckFlags: 3413f6585811SMax Reitz# 3414a937b6aaSMarkus Armbruster# Structure of flags for each metadata structure. Setting a field to 3415125f973cSVladimir Sementsov-Ogievskiy# 'true' makes QEMU guard that Qcow2 format structure against 3416125f973cSVladimir Sementsov-Ogievskiy# unintended overwriting. See Qcow2 format specification for detailed 3417125f973cSVladimir Sementsov-Ogievskiy# information on these structures. The default value is chosen 3418125f973cSVladimir Sementsov-Ogievskiy# according to the template given. 3419f6585811SMax Reitz# 3420a937b6aaSMarkus Armbruster# @template: Specifies a template mode which can be adjusted using the 3421a937b6aaSMarkus Armbruster# other flags, defaults to 'cached' 3422f6585811SMax Reitz# 3423125f973cSVladimir Sementsov-Ogievskiy# @main-header: Qcow2 format header 3424125f973cSVladimir Sementsov-Ogievskiy# 3425125f973cSVladimir Sementsov-Ogievskiy# @active-l1: Qcow2 active L1 table 3426125f973cSVladimir Sementsov-Ogievskiy# 3427125f973cSVladimir Sementsov-Ogievskiy# @active-l2: Qcow2 active L2 table 3428125f973cSVladimir Sementsov-Ogievskiy# 3429125f973cSVladimir Sementsov-Ogievskiy# @refcount-table: Qcow2 refcount table 3430125f973cSVladimir Sementsov-Ogievskiy# 3431125f973cSVladimir Sementsov-Ogievskiy# @refcount-block: Qcow2 refcount blocks 3432125f973cSVladimir Sementsov-Ogievskiy# 3433125f973cSVladimir Sementsov-Ogievskiy# @snapshot-table: Qcow2 snapshot table 3434125f973cSVladimir Sementsov-Ogievskiy# 3435125f973cSVladimir Sementsov-Ogievskiy# @inactive-l1: Qcow2 inactive L1 tables 3436125f973cSVladimir Sementsov-Ogievskiy# 3437125f973cSVladimir Sementsov-Ogievskiy# @inactive-l2: Qcow2 inactive L2 tables 3438125f973cSVladimir Sementsov-Ogievskiy# 3439125f973cSVladimir Sementsov-Ogievskiy# @bitmap-directory: Qcow2 bitmap directory (since 3.0) 34400e4e4318SVladimir Sementsov-Ogievskiy# 344179b7a77eSMarkus Armbruster# Since: 2.9 3442f6585811SMax Reitz## 3443895a2a80SEric Blake{ 'struct': 'Qcow2OverlapCheckFlags', 3444f6585811SMax Reitz 'data': { '*template': 'Qcow2OverlapCheckMode', 3445f6585811SMax Reitz '*main-header': 'bool', 3446f6585811SMax Reitz '*active-l1': 'bool', 3447f6585811SMax Reitz '*active-l2': 'bool', 3448f6585811SMax Reitz '*refcount-table': 'bool', 3449f6585811SMax Reitz '*refcount-block': 'bool', 3450f6585811SMax Reitz '*snapshot-table': 'bool', 3451f6585811SMax Reitz '*inactive-l1': 'bool', 34520e4e4318SVladimir Sementsov-Ogievskiy '*inactive-l2': 'bool', 34530e4e4318SVladimir Sementsov-Ogievskiy '*bitmap-directory': 'bool' } } 3454f6585811SMax Reitz 3455f6585811SMax Reitz## 34565072f7b3SMarc-André Lureau# @Qcow2OverlapChecks: 3457f6585811SMax Reitz# 3458a937b6aaSMarkus Armbruster# Specifies which metadata structures should be guarded against 3459a937b6aaSMarkus Armbruster# unintended overwriting. 3460f6585811SMax Reitz# 3461a937b6aaSMarkus Armbruster# @flags: set of flags for separate specification of each metadata 3462a937b6aaSMarkus Armbruster# structure type 3463f6585811SMax Reitz# 3464f6585811SMax Reitz# @mode: named mode which chooses a specific set of flags 3465f6585811SMax Reitz# 346679b7a77eSMarkus Armbruster# Since: 2.9 3467f6585811SMax Reitz## 3468ab916fadSEric Blake{ 'alternate': 'Qcow2OverlapChecks', 3469f6585811SMax Reitz 'data': { 'flags': 'Qcow2OverlapCheckFlags', 3470f6585811SMax Reitz 'mode': 'Qcow2OverlapCheckMode' } } 3471f6585811SMax Reitz 3472f6585811SMax Reitz## 3473d85f4222SDaniel P. Berrange# @BlockdevQcowEncryptionFormat: 3474d85f4222SDaniel P. Berrange# 3475d85f4222SDaniel P. Berrange# @aes: AES-CBC with plain64 initialization vectors 3476d85f4222SDaniel P. Berrange# 3477d85f4222SDaniel P. Berrange# Since: 2.10 3478d85f4222SDaniel P. Berrange## 3479d85f4222SDaniel P. Berrange{ 'enum': 'BlockdevQcowEncryptionFormat', 3480d85f4222SDaniel P. Berrange 'data': [ 'aes' ] } 3481d85f4222SDaniel P. Berrange 3482d85f4222SDaniel P. Berrange## 3483d85f4222SDaniel P. Berrange# @BlockdevQcowEncryption: 3484d85f4222SDaniel P. Berrange# 348589a2273bSMarkus Armbruster# @format: encryption format 348689a2273bSMarkus Armbruster# 3487d85f4222SDaniel P. Berrange# Since: 2.10 3488d85f4222SDaniel P. Berrange## 3489d85f4222SDaniel P. Berrange{ 'union': 'BlockdevQcowEncryption', 3490d85f4222SDaniel P. Berrange 'base': { 'format': 'BlockdevQcowEncryptionFormat' }, 3491d85f4222SDaniel P. Berrange 'discriminator': 'format', 3492d85f4222SDaniel P. Berrange 'data': { 'aes': 'QCryptoBlockOptionsQCow' } } 3493d85f4222SDaniel P. Berrange 3494d85f4222SDaniel P. Berrange## 3495d85f4222SDaniel P. Berrange# @BlockdevOptionsQcow: 3496d85f4222SDaniel P. Berrange# 3497d85f4222SDaniel P. Berrange# Driver specific block device options for qcow. 3498d85f4222SDaniel P. Berrange# 3499a937b6aaSMarkus Armbruster# @encrypt: Image decryption options. Mandatory for encrypted images, 3500a937b6aaSMarkus Armbruster# except when doing a metadata-only probe of the image. 3501d85f4222SDaniel P. Berrange# 3502d85f4222SDaniel P. Berrange# Since: 2.10 3503d85f4222SDaniel P. Berrange## 3504d85f4222SDaniel P. Berrange{ 'struct': 'BlockdevOptionsQcow', 3505d85f4222SDaniel P. Berrange 'base': 'BlockdevOptionsGenericCOWFormat', 3506d85f4222SDaniel P. Berrange 'data': { '*encrypt': 'BlockdevQcowEncryption' } } 3507d85f4222SDaniel P. Berrange 3508b25b387fSDaniel P. Berrange## 3509b25b387fSDaniel P. Berrange# @BlockdevQcow2EncryptionFormat: 3510a9e2eb06SJohn Snow# 351158823a0bSEric Blake# @aes: AES-CBC with plain64 initialization vectors 3512b25b387fSDaniel P. Berrange# 3513b25b387fSDaniel P. Berrange# Since: 2.10 3514b25b387fSDaniel P. Berrange## 3515b25b387fSDaniel P. Berrange{ 'enum': 'BlockdevQcow2EncryptionFormat', 35164652b8f3SDaniel P. Berrange 'data': [ 'aes', 'luks' ] } 3517b25b387fSDaniel P. Berrange 3518b25b387fSDaniel P. Berrange## 3519b25b387fSDaniel P. Berrange# @BlockdevQcow2Encryption: 3520b25b387fSDaniel P. Berrange# 352189a2273bSMarkus Armbruster# @format: encryption format 352289a2273bSMarkus Armbruster# 3523b25b387fSDaniel P. Berrange# Since: 2.10 3524b25b387fSDaniel P. Berrange## 3525b25b387fSDaniel P. Berrange{ 'union': 'BlockdevQcow2Encryption', 3526b25b387fSDaniel P. Berrange 'base': { 'format': 'BlockdevQcow2EncryptionFormat' }, 3527b25b387fSDaniel P. Berrange 'discriminator': 'format', 35284652b8f3SDaniel P. Berrange 'data': { 'aes': 'QCryptoBlockOptionsQCow', 35294652b8f3SDaniel P. Berrange 'luks': 'QCryptoBlockOptionsLUKS'} } 3530b25b387fSDaniel P. Berrange 3531d85f4222SDaniel P. Berrange## 353233fa2222SVladimir Sementsov-Ogievskiy# @BlockdevOptionsPreallocate: 353333fa2222SVladimir Sementsov-Ogievskiy# 3534a937b6aaSMarkus Armbruster# Filter driver intended to be inserted between format and protocol 3535a937b6aaSMarkus Armbruster# node and do preallocation in protocol node on write. 353633fa2222SVladimir Sementsov-Ogievskiy# 353733fa2222SVladimir Sementsov-Ogievskiy# @prealloc-align: on preallocation, align file length to this number, 353833fa2222SVladimir Sementsov-Ogievskiy# default 1048576 (1M) 353933fa2222SVladimir Sementsov-Ogievskiy# 354033fa2222SVladimir Sementsov-Ogievskiy# @prealloc-size: how much to preallocate, default 134217728 (128M) 354133fa2222SVladimir Sementsov-Ogievskiy# 354233fa2222SVladimir Sementsov-Ogievskiy# Since: 6.0 354333fa2222SVladimir Sementsov-Ogievskiy## 354433fa2222SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockdevOptionsPreallocate', 354533fa2222SVladimir Sementsov-Ogievskiy 'base': 'BlockdevOptionsGenericFormat', 354633fa2222SVladimir Sementsov-Ogievskiy 'data': { '*prealloc-align': 'int', '*prealloc-size': 'int' } } 354733fa2222SVladimir Sementsov-Ogievskiy 354833fa2222SVladimir Sementsov-Ogievskiy## 35495072f7b3SMarc-André Lureau# @BlockdevOptionsQcow2: 35501ad166b6SBenoît Canet# 35511ad166b6SBenoît Canet# Driver specific block device options for qcow2. 35521ad166b6SBenoît Canet# 3553a937b6aaSMarkus Armbruster# @lazy-refcounts: whether to enable the lazy refcounts feature 3554a937b6aaSMarkus Armbruster# (default is taken from the image file) 35551ad166b6SBenoît Canet# 3556a937b6aaSMarkus Armbruster# @pass-discard-request: whether discard requests to the qcow2 device 3557a937b6aaSMarkus Armbruster# should be forwarded to the data source 35581ad166b6SBenoît Canet# 35591d8bda12SMarkus Armbruster# @pass-discard-snapshot: whether discard requests for the data source 3560a937b6aaSMarkus Armbruster# should be issued when a snapshot operation (e.g. deleting a 3561a937b6aaSMarkus Armbruster# snapshot) frees clusters in the qcow2 file 35621ad166b6SBenoît Canet# 35631d8bda12SMarkus Armbruster# @pass-discard-other: whether discard requests for the data source 3564a937b6aaSMarkus Armbruster# should be issued on other occasions where a cluster gets freed 35651ad166b6SBenoît Canet# 3566b2b10904SJean-Louis Dupond# @discard-no-unref: when enabled, data clusters will remain 3567b2b10904SJean-Louis Dupond# preallocated when they are no longer used, e.g. because they are 3568b2b10904SJean-Louis Dupond# discarded or converted to zero clusters. As usual, whether the 3569b2b10904SJean-Louis Dupond# old data is discarded or kept on the protocol level (i.e. in the 3570b2b10904SJean-Louis Dupond# image file) depends on the setting of the pass-discard-request 3571b2b10904SJean-Louis Dupond# option. Keeping the clusters preallocated prevents qcow2 3572b2b10904SJean-Louis Dupond# fragmentation that would otherwise be caused by freeing and 3573b2b10904SJean-Louis Dupond# re-allocating them later. Besides potential performance 3574b2b10904SJean-Louis Dupond# degradation, such fragmentation can lead to increased allocation 3575b2b10904SJean-Louis Dupond# of clusters past the end of the image file, resulting in image 3576209e64d9SMarkus Armbruster# files whose file length can grow much larger than their guest 3577209e64d9SMarkus Armbruster# disk size would suggest. If image file length is of concern 3578209e64d9SMarkus Armbruster# (e.g. when storing qcow2 images directly on block devices), you 3579209e64d9SMarkus Armbruster# should consider enabling this option. (since 8.1) 358042a2890aSJean-Louis Dupond# 3581a937b6aaSMarkus Armbruster# @overlap-check: which overlap checks to perform for writes to the 3582a937b6aaSMarkus Armbruster# image, defaults to 'cached' (since 2.2) 3583f6585811SMax Reitz# 3584a937b6aaSMarkus Armbruster# @cache-size: the maximum total size of the L2 table and refcount 3585a937b6aaSMarkus Armbruster# block caches in bytes (since 2.2) 3586f6585811SMax Reitz# 3587a937b6aaSMarkus Armbruster# @l2-cache-size: the maximum size of the L2 table cache in bytes 3588a937b6aaSMarkus Armbruster# (since 2.2) 3589f6585811SMax Reitz# 35901221fe6fSAlberto Garcia# @l2-cache-entry-size: the size of each entry in the L2 cache in 3591a937b6aaSMarkus Armbruster# bytes. It must be a power of two between 512 and the cluster 3592a937b6aaSMarkus Armbruster# size. The default value is the cluster size (since 2.12) 35931221fe6fSAlberto Garcia# 35941d8bda12SMarkus Armbruster# @refcount-cache-size: the maximum size of the refcount block cache 3595f6585811SMax Reitz# in bytes (since 2.2) 3596f6585811SMax Reitz# 35971d8bda12SMarkus Armbruster# @cache-clean-interval: clean unused entries in the L2 and refcount 3598a937b6aaSMarkus Armbruster# caches. The interval is in seconds. The default value is 600 3599a937b6aaSMarkus Armbruster# on supporting platforms, and 0 on other platforms. 0 disables 3600a937b6aaSMarkus Armbruster# this feature. (since 2.5) 3601e957b50bSLeonid Bloch# 3602a937b6aaSMarkus Armbruster# @encrypt: Image decryption options. Mandatory for encrypted images, 3603a937b6aaSMarkus Armbruster# except when doing a metadata-only probe of the image. (since 3604a937b6aaSMarkus Armbruster# 2.10) 3605279621c0SAlberto Garcia# 36060e8c08beSKevin Wolf# @data-file: reference to or definition of the external data file. 3607a937b6aaSMarkus Armbruster# This may only be specified for images that require an external 3608a937b6aaSMarkus Armbruster# data file. If it is not specified for such an image, the data 3609a937b6aaSMarkus Armbruster# file name is loaded from the image file. (since 4.0) 36100e8c08beSKevin Wolf# 361179b7a77eSMarkus Armbruster# Since: 2.9 36121ad166b6SBenoît Canet## 3613895a2a80SEric Blake{ 'struct': 'BlockdevOptionsQcow2', 36141ad166b6SBenoît Canet 'base': 'BlockdevOptionsGenericCOWFormat', 36151ad166b6SBenoît Canet 'data': { '*lazy-refcounts': 'bool', 36161ad166b6SBenoît Canet '*pass-discard-request': 'bool', 36171ad166b6SBenoît Canet '*pass-discard-snapshot': 'bool', 3618f6585811SMax Reitz '*pass-discard-other': 'bool', 361942a2890aSJean-Louis Dupond '*discard-no-unref': 'bool', 3620f6585811SMax Reitz '*overlap-check': 'Qcow2OverlapChecks', 3621f6585811SMax Reitz '*cache-size': 'int', 3622f6585811SMax Reitz '*l2-cache-size': 'int', 36231221fe6fSAlberto Garcia '*l2-cache-entry-size': 'int', 3624279621c0SAlberto Garcia '*refcount-cache-size': 'int', 3625b25b387fSDaniel P. Berrange '*cache-clean-interval': 'int', 36260e8c08beSKevin Wolf '*encrypt': 'BlockdevQcow2Encryption', 36270e8c08beSKevin Wolf '*data-file': 'BlockdevRef' } } 3628b1de5f43SChrysostomos Nanakos 3629b1de5f43SChrysostomos Nanakos## 3630ec2f5418SKevin Wolf# @SshHostKeyCheckMode: 3631ec2f5418SKevin Wolf# 3632f5627506SPeter Maydell# @none: Don't check the host key at all 3633a937b6aaSMarkus Armbruster# 3634f5627506SPeter Maydell# @hash: Compare the host key with a given hash 3635a937b6aaSMarkus Armbruster# 3636f5627506SPeter Maydell# @known_hosts: Check the host key against the known_hosts file 3637ec2f5418SKevin Wolf# 3638ec2f5418SKevin Wolf# Since: 2.12 3639ec2f5418SKevin Wolf## 3640ec2f5418SKevin Wolf{ 'enum': 'SshHostKeyCheckMode', 3641ec2f5418SKevin Wolf 'data': [ 'none', 'hash', 'known_hosts' ] } 3642ec2f5418SKevin Wolf 3643ec2f5418SKevin Wolf## 3644ec2f5418SKevin Wolf# @SshHostKeyCheckHashType: 3645ec2f5418SKevin Wolf# 3646f5627506SPeter Maydell# @md5: The given hash is an md5 hash 3647a937b6aaSMarkus Armbruster# 3648f5627506SPeter Maydell# @sha1: The given hash is an sha1 hash 3649a937b6aaSMarkus Armbruster# 3650bf783261SDaniel P. Berrangé# @sha256: The given hash is an sha256 hash 3651ec2f5418SKevin Wolf# 3652ec2f5418SKevin Wolf# Since: 2.12 3653ec2f5418SKevin Wolf## 3654ec2f5418SKevin Wolf{ 'enum': 'SshHostKeyCheckHashType', 3655bf783261SDaniel P. Berrangé 'data': [ 'md5', 'sha1', 'sha256' ] } 3656ec2f5418SKevin Wolf 3657ec2f5418SKevin Wolf## 3658ec2f5418SKevin Wolf# @SshHostKeyHash: 3659ec2f5418SKevin Wolf# 3660f5627506SPeter Maydell# @type: The hash algorithm used for the hash 3661a937b6aaSMarkus Armbruster# 3662f5627506SPeter Maydell# @hash: The expected hash value 3663ec2f5418SKevin Wolf# 3664ec2f5418SKevin Wolf# Since: 2.12 3665ec2f5418SKevin Wolf## 3666ec2f5418SKevin Wolf{ 'struct': 'SshHostKeyHash', 3667ec2f5418SKevin Wolf 'data': { 'type': 'SshHostKeyCheckHashType', 3668ec2f5418SKevin Wolf 'hash': 'str' }} 3669ec2f5418SKevin Wolf 3670ec2f5418SKevin Wolf## 3671ec2f5418SKevin Wolf# @SshHostKeyCheck: 3672ec2f5418SKevin Wolf# 367389a2273bSMarkus Armbruster# @mode: How to check the host key 367489a2273bSMarkus Armbruster# 3675ec2f5418SKevin Wolf# Since: 2.12 3676ec2f5418SKevin Wolf## 3677ec2f5418SKevin Wolf{ 'union': 'SshHostKeyCheck', 3678ec2f5418SKevin Wolf 'base': { 'mode': 'SshHostKeyCheckMode' }, 3679ec2f5418SKevin Wolf 'discriminator': 'mode', 368029cd0403SAnton Nefedov 'data': { 'hash': 'SshHostKeyHash' } } 3681ec2f5418SKevin Wolf 3682ec2f5418SKevin Wolf## 36835072f7b3SMarc-André Lureau# @BlockdevOptionsSsh: 3684ad0e90a6SAshijeet Acharya# 3685ad0e90a6SAshijeet Acharya# @server: host address 3686ad0e90a6SAshijeet Acharya# 3687ad0e90a6SAshijeet Acharya# @path: path to the image on the host 3688ad0e90a6SAshijeet Acharya# 3689c0ac533bSAndrea Bolognani# @user: user as which to connect, defaults to current local user name 3690ad0e90a6SAshijeet Acharya# 3691ec2f5418SKevin Wolf# @host-key-check: Defines how and what to check the host key against 3692ec2f5418SKevin Wolf# (default: known_hosts) 3693ad0e90a6SAshijeet Acharya# 369479b7a77eSMarkus Armbruster# Since: 2.9 3695ad0e90a6SAshijeet Acharya## 3696ad0e90a6SAshijeet Acharya{ 'struct': 'BlockdevOptionsSsh', 3697ad0e90a6SAshijeet Acharya 'data': { 'server': 'InetSocketAddress', 3698ad0e90a6SAshijeet Acharya 'path': 'str', 3699ec2f5418SKevin Wolf '*user': 'str', 3700ec2f5418SKevin Wolf '*host-key-check': 'SshHostKeyCheck' } } 3701ad0e90a6SAshijeet Acharya 37021ad166b6SBenoît Canet## 37035072f7b3SMarc-André Lureau# @BlkdebugEvent: 37041ad166b6SBenoît Canet# 37051ad166b6SBenoît Canet# Trigger events supported by blkdebug. 3706a31939e6SEric Blake# 370746b732cdSPavel Butsykin# @l1_shrink_write_table: write zeros to the l1 table to shrink image. 370846b732cdSPavel Butsykin# (since 2.11) 370946b732cdSPavel Butsykin# 371046b732cdSPavel Butsykin# @l1_shrink_free_l2_clusters: discard the l2 tables. (since 2.11) 371146b732cdSPavel Butsykin# 3712d855ebcdSEric Blake# @cor_write: a write due to copy-on-read (since 2.11) 3713d855ebcdSEric Blake# 3714a937b6aaSMarkus Armbruster# @cluster_alloc_space: an allocation of file space for a cluster 3715a937b6aaSMarkus Armbruster# (since 4.1) 3716c8bb23cbSAnton Nefedov# 3717f8cec157SMax Reitz# @none: triggers once at creation of the blkdebug node (since 4.1) 3718f8cec157SMax Reitz# 371979b7a77eSMarkus Armbruster# Since: 2.9 37201ad166b6SBenoît Canet## 3721a31939e6SEric Blake{ 'enum': 'BlkdebugEvent', 'prefix': 'BLKDBG', 37225be5b776SEric Blake 'data': [ 'l1_update', 'l1_grow_alloc_table', 'l1_grow_write_table', 37235be5b776SEric Blake 'l1_grow_activate_table', 'l2_load', 'l2_update', 37245be5b776SEric Blake 'l2_update_compressed', 'l2_alloc_cow_read', 'l2_alloc_write', 37251ad166b6SBenoît Canet 'read_aio', 'read_backing_aio', 'read_compressed', 'write_aio', 37261ad166b6SBenoît Canet 'write_compressed', 'vmstate_load', 'vmstate_save', 'cow_read', 37271ad166b6SBenoît Canet 'cow_write', 'reftable_load', 'reftable_grow', 'reftable_update', 37281ad166b6SBenoît Canet 'refblock_load', 'refblock_update', 'refblock_update_part', 37295be5b776SEric Blake 'refblock_alloc', 'refblock_alloc_hookup', 'refblock_alloc_write', 37305be5b776SEric Blake 'refblock_alloc_write_blocks', 'refblock_alloc_write_table', 37315be5b776SEric Blake 'refblock_alloc_switch_table', 'cluster_alloc', 37321ad166b6SBenoît Canet 'cluster_alloc_bytes', 'cluster_free', 'flush_to_os', 37335be5b776SEric Blake 'flush_to_disk', 'pwritev_rmw_head', 'pwritev_rmw_after_head', 37345be5b776SEric Blake 'pwritev_rmw_tail', 'pwritev_rmw_after_tail', 'pwritev', 373546b732cdSPavel Butsykin 'pwritev_zero', 'pwritev_done', 'empty_image_prepare', 3736d855ebcdSEric Blake 'l1_shrink_write_table', 'l1_shrink_free_l2_clusters', 3737f8cec157SMax Reitz 'cor_write', 'cluster_alloc_space', 'none'] } 37381ad166b6SBenoît Canet 37391ad166b6SBenoît Canet## 374016789db3SMax Reitz# @BlkdebugIOType: 374116789db3SMax Reitz# 374216789db3SMax Reitz# Kinds of I/O that blkdebug can inject errors in. 374316789db3SMax Reitz# 374416789db3SMax Reitz# @read: .bdrv_co_preadv() 374516789db3SMax Reitz# 374616789db3SMax Reitz# @write: .bdrv_co_pwritev() 374716789db3SMax Reitz# 374816789db3SMax Reitz# @write-zeroes: .bdrv_co_pwrite_zeroes() 374916789db3SMax Reitz# 375016789db3SMax Reitz# @discard: .bdrv_co_pdiscard() 375116789db3SMax Reitz# 375216789db3SMax Reitz# @flush: .bdrv_co_flush_to_disk() 375316789db3SMax Reitz# 37541adb0b5eSMax Reitz# @block-status: .bdrv_co_block_status() 37551adb0b5eSMax Reitz# 375616789db3SMax Reitz# Since: 4.1 375716789db3SMax Reitz## 37587b29353fSMarkus Armbruster{ 'enum': 'BlkdebugIOType', 37591adb0b5eSMax Reitz 'data': [ 'read', 'write', 'write-zeroes', 'discard', 'flush', 37601adb0b5eSMax Reitz 'block-status' ] } 376116789db3SMax Reitz 376216789db3SMax Reitz## 37635072f7b3SMarc-André Lureau# @BlkdebugInjectErrorOptions: 37641ad166b6SBenoît Canet# 37651ad166b6SBenoît Canet# Describes a single error injection for blkdebug. 37661ad166b6SBenoît Canet# 37671ad166b6SBenoît Canet# @event: trigger event 37681ad166b6SBenoît Canet# 3769a937b6aaSMarkus Armbruster# @state: the state identifier blkdebug needs to be in to actually 3770a937b6aaSMarkus Armbruster# trigger the event; defaults to "any" 37711ad166b6SBenoît Canet# 3772a937b6aaSMarkus Armbruster# @iotype: the type of I/O operations on which this error should be 3773a937b6aaSMarkus Armbruster# injected; defaults to "all read, write, write-zeroes, discard, 3774a937b6aaSMarkus Armbruster# and flush operations" (since: 4.1) 377516789db3SMax Reitz# 3776a937b6aaSMarkus Armbruster# @errno: error identifier (errno) to be returned; defaults to EIO 37771ad166b6SBenoît Canet# 3778a937b6aaSMarkus Armbruster# @sector: specifies the sector index which has to be affected in 3779a937b6aaSMarkus Armbruster# order to actually trigger the event; defaults to "any sector" 37801ad166b6SBenoît Canet# 3781a937b6aaSMarkus Armbruster# @once: disables further events after this one has been triggered; 3782a937b6aaSMarkus Armbruster# defaults to false 37831ad166b6SBenoît Canet# 37841d8bda12SMarkus Armbruster# @immediately: fail immediately; defaults to false 37851ad166b6SBenoît Canet# 378679b7a77eSMarkus Armbruster# Since: 2.9 37871ad166b6SBenoît Canet## 3788895a2a80SEric Blake{ 'struct': 'BlkdebugInjectErrorOptions', 37891ad166b6SBenoît Canet 'data': { 'event': 'BlkdebugEvent', 37901ad166b6SBenoît Canet '*state': 'int', 379116789db3SMax Reitz '*iotype': 'BlkdebugIOType', 37921ad166b6SBenoît Canet '*errno': 'int', 37931ad166b6SBenoît Canet '*sector': 'int', 37941ad166b6SBenoît Canet '*once': 'bool', 37951ad166b6SBenoît Canet '*immediately': 'bool' } } 37961ad166b6SBenoît Canet 37971ad166b6SBenoît Canet## 37985072f7b3SMarc-André Lureau# @BlkdebugSetStateOptions: 37991ad166b6SBenoît Canet# 38001ad166b6SBenoît Canet# Describes a single state-change event for blkdebug. 38011ad166b6SBenoît Canet# 38021ad166b6SBenoît Canet# @event: trigger event 38031ad166b6SBenoît Canet# 38041d8bda12SMarkus Armbruster# @state: the current state identifier blkdebug needs to be in; 38051ad166b6SBenoît Canet# defaults to "any" 38061ad166b6SBenoît Canet# 38071ad166b6SBenoît Canet# @new_state: the state identifier blkdebug is supposed to assume if 38081ad166b6SBenoît Canet# this event is triggered 38091ad166b6SBenoît Canet# 381079b7a77eSMarkus Armbruster# Since: 2.9 38111ad166b6SBenoît Canet## 3812895a2a80SEric Blake{ 'struct': 'BlkdebugSetStateOptions', 38131ad166b6SBenoît Canet 'data': { 'event': 'BlkdebugEvent', 38141ad166b6SBenoît Canet '*state': 'int', 38151ad166b6SBenoît Canet 'new_state': 'int' } } 38161ad166b6SBenoît Canet 38171ad166b6SBenoît Canet## 38185072f7b3SMarc-André Lureau# @BlockdevOptionsBlkdebug: 38191ad166b6SBenoît Canet# 38201ad166b6SBenoît Canet# Driver specific block device options for blkdebug. 38211ad166b6SBenoît Canet# 38221ad166b6SBenoît Canet# @image: underlying raw block device (or image file) 38231ad166b6SBenoît Canet# 38241d8bda12SMarkus Armbruster# @config: filename of the configuration file 38251ad166b6SBenoît Canet# 3826a937b6aaSMarkus Armbruster# @align: required alignment for requests in bytes, must be positive 3827a937b6aaSMarkus Armbruster# power of 2, or 0 for default 3828430b26a8SEric Blake# 3829430b26a8SEric Blake# @max-transfer: maximum size for I/O transfers in bytes, must be 3830a937b6aaSMarkus Armbruster# positive multiple of @align and of the underlying file's request 3831a937b6aaSMarkus Armbruster# alignment (but need not be a power of 2), or 0 for default 3832a937b6aaSMarkus Armbruster# (since 2.10) 3833a937b6aaSMarkus Armbruster# 3834a937b6aaSMarkus Armbruster# @opt-write-zero: preferred alignment for write zero requests in 3835a937b6aaSMarkus Armbruster# bytes, must be positive multiple of @align and of the underlying 3836a937b6aaSMarkus Armbruster# file's request alignment (but need not be a power of 2), or 0 3837a937b6aaSMarkus Armbruster# for default (since 2.10) 3838a937b6aaSMarkus Armbruster# 3839a937b6aaSMarkus Armbruster# @max-write-zero: maximum size for write zero requests in bytes, must 3840a937b6aaSMarkus Armbruster# be positive multiple of @align, of @opt-write-zero, and of the 3841a937b6aaSMarkus Armbruster# underlying file's request alignment (but need not be a power of 3842430b26a8SEric Blake# 2), or 0 for default (since 2.10) 3843430b26a8SEric Blake# 3844a937b6aaSMarkus Armbruster# @opt-discard: preferred alignment for discard requests in bytes, 3845a937b6aaSMarkus Armbruster# must be positive multiple of @align and of the underlying file's 3846a937b6aaSMarkus Armbruster# request alignment (but need not be a power of 2), or 0 for 3847a937b6aaSMarkus Armbruster# default (since 2.10) 3848430b26a8SEric Blake# 3849430b26a8SEric Blake# @max-discard: maximum size for discard requests in bytes, must be 3850a937b6aaSMarkus Armbruster# positive multiple of @align, of @opt-discard, and of the 3851a937b6aaSMarkus Armbruster# underlying file's request alignment (but need not be a power of 3852a937b6aaSMarkus Armbruster# 2), or 0 for default (since 2.10) 38531ad166b6SBenoît Canet# 38541d8bda12SMarkus Armbruster# @inject-error: array of error injection descriptions 38551ad166b6SBenoît Canet# 38561d8bda12SMarkus Armbruster# @set-state: array of state-change descriptions 38571ad166b6SBenoît Canet# 385869c6449fSMax Reitz# @take-child-perms: Permissions to take on @image in addition to what 3859a937b6aaSMarkus Armbruster# is necessary anyway (which depends on how the blkdebug node is 3860a937b6aaSMarkus Armbruster# used). Defaults to none. (since 5.0) 386169c6449fSMax Reitz# 386269c6449fSMax Reitz# @unshare-child-perms: Permissions not to share on @image in addition 3863a937b6aaSMarkus Armbruster# to what cannot be shared anyway (which depends on how the 3864a937b6aaSMarkus Armbruster# blkdebug node is used). Defaults to none. (since 5.0) 386569c6449fSMax Reitz# 386679b7a77eSMarkus Armbruster# Since: 2.9 38671ad166b6SBenoît Canet## 3868895a2a80SEric Blake{ 'struct': 'BlockdevOptionsBlkdebug', 38691ad166b6SBenoît Canet 'data': { 'image': 'BlockdevRef', 38701ad166b6SBenoît Canet '*config': 'str', 3871430b26a8SEric Blake '*align': 'int', '*max-transfer': 'int32', 3872430b26a8SEric Blake '*opt-write-zero': 'int32', '*max-write-zero': 'int32', 3873430b26a8SEric Blake '*opt-discard': 'int32', '*max-discard': 'int32', 38741ad166b6SBenoît Canet '*inject-error': ['BlkdebugInjectErrorOptions'], 387569c6449fSMax Reitz '*set-state': ['BlkdebugSetStateOptions'], 387669c6449fSMax Reitz '*take-child-perms': ['BlockPermission'], 387769c6449fSMax Reitz '*unshare-child-perms': ['BlockPermission'] } } 38781ad166b6SBenoît Canet 38791ad166b6SBenoît Canet## 3880bfcc224eSAapo Vienamo# @BlockdevOptionsBlklogwrites: 3881bfcc224eSAapo Vienamo# 3882bfcc224eSAapo Vienamo# Driver specific block device options for blklogwrites. 3883bfcc224eSAapo Vienamo# 3884bfcc224eSAapo Vienamo# @file: block device 3885bfcc224eSAapo Vienamo# 3886bfcc224eSAapo Vienamo# @log: block device used to log writes to @file 3887bfcc224eSAapo Vienamo# 3888a937b6aaSMarkus Armbruster# @log-sector-size: sector size used in logging writes to @file, 3889a937b6aaSMarkus Armbruster# determines granularity of offsets and sizes of writes 3890a937b6aaSMarkus Armbruster# (default: 512) 3891bfcc224eSAapo Vienamo# 38927769eaa5SAri Sundholm# @log-append: append to an existing log (default: false) 38937769eaa5SAri Sundholm# 3894a937b6aaSMarkus Armbruster# @log-super-update-interval: interval of write requests after which 3895a937b6aaSMarkus Armbruster# the log super block is updated to disk (default: 4096) 38961dce698eSAri Sundholm# 3897bfcc224eSAapo Vienamo# Since: 3.0 3898bfcc224eSAapo Vienamo## 3899bfcc224eSAapo Vienamo{ 'struct': 'BlockdevOptionsBlklogwrites', 3900bfcc224eSAapo Vienamo 'data': { 'file': 'BlockdevRef', 3901bfcc224eSAapo Vienamo 'log': 'BlockdevRef', 39020878b3c1SAri Sundholm '*log-sector-size': 'uint32', 39031dce698eSAri Sundholm '*log-append': 'bool', 39041dce698eSAri Sundholm '*log-super-update-interval': 'uint64' } } 3905bfcc224eSAapo Vienamo 3906bfcc224eSAapo Vienamo## 39075072f7b3SMarc-André Lureau# @BlockdevOptionsBlkverify: 39081ad166b6SBenoît Canet# 39091ad166b6SBenoît Canet# Driver specific block device options for blkverify. 39101ad166b6SBenoît Canet# 39111ad166b6SBenoît Canet# @test: block device to be tested 39121ad166b6SBenoît Canet# 39131ad166b6SBenoît Canet# @raw: raw image used for verification 39141ad166b6SBenoît Canet# 391579b7a77eSMarkus Armbruster# Since: 2.9 39161ad166b6SBenoît Canet## 3917895a2a80SEric Blake{ 'struct': 'BlockdevOptionsBlkverify', 39181ad166b6SBenoît Canet 'data': { 'test': 'BlockdevRef', 39191ad166b6SBenoît Canet 'raw': 'BlockdevRef' } } 39201ad166b6SBenoît Canet 39211ad166b6SBenoît Canet## 392235e32d9eSPavel Dovgalyuk# @BlockdevOptionsBlkreplay: 392335e32d9eSPavel Dovgalyuk# 392435e32d9eSPavel Dovgalyuk# Driver specific block device options for blkreplay. 392535e32d9eSPavel Dovgalyuk# 392635e32d9eSPavel Dovgalyuk# @image: disk image which should be controlled with blkreplay 392735e32d9eSPavel Dovgalyuk# 392835e32d9eSPavel Dovgalyuk# Since: 4.2 392935e32d9eSPavel Dovgalyuk## 393035e32d9eSPavel Dovgalyuk{ 'struct': 'BlockdevOptionsBlkreplay', 393135e32d9eSPavel Dovgalyuk 'data': { 'image': 'BlockdevRef' } } 393235e32d9eSPavel Dovgalyuk 393335e32d9eSPavel Dovgalyuk## 39345072f7b3SMarc-André Lureau# @QuorumReadPattern: 393562c6031fSLiu Yuan# 393662c6031fSLiu Yuan# An enumeration of quorum read patterns. 393762c6031fSLiu Yuan# 393862c6031fSLiu Yuan# @quorum: read all the children and do a quorum vote on reads 393962c6031fSLiu Yuan# 394062c6031fSLiu Yuan# @fifo: read only from the first child that has not failed 394162c6031fSLiu Yuan# 394279b7a77eSMarkus Armbruster# Since: 2.9 394362c6031fSLiu Yuan## 394462c6031fSLiu Yuan{ 'enum': 'QuorumReadPattern', 'data': [ 'quorum', 'fifo' ] } 394562c6031fSLiu Yuan 394662c6031fSLiu Yuan## 39475072f7b3SMarc-André Lureau# @BlockdevOptionsQuorum: 39481ad166b6SBenoît Canet# 39491ad166b6SBenoît Canet# Driver specific block device options for Quorum 39501ad166b6SBenoît Canet# 3951a937b6aaSMarkus Armbruster# @blkverify: true if the driver must print content mismatch set to 3952a937b6aaSMarkus Armbruster# false by default 39531ad166b6SBenoît Canet# 39541ad166b6SBenoît Canet# @children: the children block devices to use 39551ad166b6SBenoît Canet# 39561ad166b6SBenoît Canet# @vote-threshold: the vote limit under which a read will fail 39571ad166b6SBenoît Canet# 39581d8bda12SMarkus Armbruster# @rewrite-corrupted: rewrite corrupted data when quorum is reached 3959cf29a570SBenoît Canet# (Since 2.1) 3960cf29a570SBenoît Canet# 39611d8bda12SMarkus Armbruster# @read-pattern: choose read pattern and set to quorum by default 396262c6031fSLiu Yuan# (Since 2.2) 396362c6031fSLiu Yuan# 396479b7a77eSMarkus Armbruster# Since: 2.9 39651ad166b6SBenoît Canet## 3966895a2a80SEric Blake{ 'struct': 'BlockdevOptionsQuorum', 39671ad166b6SBenoît Canet 'data': { '*blkverify': 'bool', 39681ad166b6SBenoît Canet 'children': [ 'BlockdevRef' ], 396962c6031fSLiu Yuan 'vote-threshold': 'int', 397062c6031fSLiu Yuan '*rewrite-corrupted': 'bool', 397162c6031fSLiu Yuan '*read-pattern': 'QuorumReadPattern' } } 39721ad166b6SBenoît Canet 39731ad166b6SBenoît Canet## 39745072f7b3SMarc-André Lureau# @BlockdevOptionsGluster: 39757edac2ddSPrasanna Kumar Kalever# 39767edac2ddSPrasanna Kumar Kalever# Driver specific block device options for Gluster 39777edac2ddSPrasanna Kumar Kalever# 39787edac2ddSPrasanna Kumar Kalever# @volume: name of gluster volume where VM image resides 39797edac2ddSPrasanna Kumar Kalever# 39807edac2ddSPrasanna Kumar Kalever# @path: absolute path to image file in gluster volume 39817edac2ddSPrasanna Kumar Kalever# 39820a189ffbSPrasanna Kumar Kalever# @server: gluster servers description 39837edac2ddSPrasanna Kumar Kalever# 3984a937b6aaSMarkus Armbruster# @debug: libgfapi log level (default '4' which is Error) (Since 2.8) 39857edac2ddSPrasanna Kumar Kalever# 39861d8bda12SMarkus Armbruster# @logfile: libgfapi log file (default /dev/stderr) (Since 2.8) 3987e9db8ff3SPrasanna Kumar Kalever# 398879b7a77eSMarkus Armbruster# Since: 2.9 39897edac2ddSPrasanna Kumar Kalever## 39907edac2ddSPrasanna Kumar Kalever{ 'struct': 'BlockdevOptionsGluster', 39917edac2ddSPrasanna Kumar Kalever 'data': { 'volume': 'str', 39927edac2ddSPrasanna Kumar Kalever 'path': 'str', 399362cf396bSMarkus Armbruster 'server': ['SocketAddress'], 39941a417e46SPrasanna Kumar Kalever '*debug': 'int', 3995e9db8ff3SPrasanna Kumar Kalever '*logfile': 'str' } } 39967edac2ddSPrasanna Kumar Kalever 39977edac2ddSPrasanna Kumar Kalever## 3998fd66dbd4SStefan Hajnoczi# @BlockdevOptionsIoUring: 3999fd66dbd4SStefan Hajnoczi# 4000fd66dbd4SStefan Hajnoczi# Driver specific block device options for the io_uring backend. 4001fd66dbd4SStefan Hajnoczi# 4002fd66dbd4SStefan Hajnoczi# @filename: path to the image file 4003fd66dbd4SStefan Hajnoczi# 4004fd66dbd4SStefan Hajnoczi# Since: 7.2 4005fd66dbd4SStefan Hajnoczi## 4006fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsIoUring', 4007fd66dbd4SStefan Hajnoczi 'data': { 'filename': 'str' }, 4008fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' } 4009fd66dbd4SStefan Hajnoczi 4010fd66dbd4SStefan Hajnoczi## 4011fd66dbd4SStefan Hajnoczi# @BlockdevOptionsNvmeIoUring: 4012fd66dbd4SStefan Hajnoczi# 4013fd66dbd4SStefan Hajnoczi# Driver specific block device options for the nvme-io_uring backend. 4014fd66dbd4SStefan Hajnoczi# 4015a937b6aaSMarkus Armbruster# @path: path to the NVMe namespace's character device (e.g. 4016a937b6aaSMarkus Armbruster# /dev/ng0n1). 4017fd66dbd4SStefan Hajnoczi# 4018fd66dbd4SStefan Hajnoczi# Since: 7.2 4019fd66dbd4SStefan Hajnoczi## 4020fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsNvmeIoUring', 40216c32fc0dSAlberto Faria 'data': { 'path': 'str' }, 4022fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' } 4023fd66dbd4SStefan Hajnoczi 4024fd66dbd4SStefan Hajnoczi## 402503d9e4c0SAlberto Faria# @BlockdevOptionsVirtioBlkVfioPci: 402603d9e4c0SAlberto Faria# 4027a937b6aaSMarkus Armbruster# Driver specific block device options for the virtio-blk-vfio-pci 4028a937b6aaSMarkus Armbruster# backend. 402903d9e4c0SAlberto Faria# 403003d9e4c0SAlberto Faria# @path: path to the PCI device's sysfs directory (e.g. 403103d9e4c0SAlberto Faria# /sys/bus/pci/devices/0000:00:01.0). 403203d9e4c0SAlberto Faria# 403303d9e4c0SAlberto Faria# Since: 7.2 403403d9e4c0SAlberto Faria## 403503d9e4c0SAlberto Faria{ 'struct': 'BlockdevOptionsVirtioBlkVfioPci', 403603d9e4c0SAlberto Faria 'data': { 'path': 'str' }, 403703d9e4c0SAlberto Faria 'if': 'CONFIG_BLKIO' } 403803d9e4c0SAlberto Faria 403903d9e4c0SAlberto Faria## 4040fd66dbd4SStefan Hajnoczi# @BlockdevOptionsVirtioBlkVhostUser: 4041fd66dbd4SStefan Hajnoczi# 4042a937b6aaSMarkus Armbruster# Driver specific block device options for the virtio-blk-vhost-user 4043a937b6aaSMarkus Armbruster# backend. 4044fd66dbd4SStefan Hajnoczi# 4045fd66dbd4SStefan Hajnoczi# @path: path to the vhost-user UNIX domain socket. 4046fd66dbd4SStefan Hajnoczi# 4047fd66dbd4SStefan Hajnoczi# Since: 7.2 4048fd66dbd4SStefan Hajnoczi## 4049fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsVirtioBlkVhostUser', 4050fd66dbd4SStefan Hajnoczi 'data': { 'path': 'str' }, 4051fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' } 4052fd66dbd4SStefan Hajnoczi 4053fd66dbd4SStefan Hajnoczi## 4054fd66dbd4SStefan Hajnoczi# @BlockdevOptionsVirtioBlkVhostVdpa: 4055fd66dbd4SStefan Hajnoczi# 4056a937b6aaSMarkus Armbruster# Driver specific block device options for the virtio-blk-vhost-vdpa 4057a937b6aaSMarkus Armbruster# backend. 4058fd66dbd4SStefan Hajnoczi# 4059fd66dbd4SStefan Hajnoczi# @path: path to the vhost-vdpa character device. 4060fd66dbd4SStefan Hajnoczi# 406198b126f5SStefano Garzarella# Features: 406201bed0ffSMarkus Armbruster# 406398b126f5SStefano Garzarella# @fdset: Member @path supports the special "/dev/fdset/N" path 406498b126f5SStefano Garzarella# (since 8.1) 406598b126f5SStefano Garzarella# 4066fd66dbd4SStefan Hajnoczi# Since: 7.2 4067fd66dbd4SStefan Hajnoczi## 4068fd66dbd4SStefan Hajnoczi{ 'struct': 'BlockdevOptionsVirtioBlkVhostVdpa', 4069fd66dbd4SStefan Hajnoczi 'data': { 'path': 'str' }, 407098b126f5SStefano Garzarella 'features': [ { 'name' :'fdset', 407198b126f5SStefano Garzarella 'if': 'CONFIG_BLKIO_VHOST_VDPA_FD' } ], 4072fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' } 4073fd66dbd4SStefan Hajnoczi 4074fd66dbd4SStefan Hajnoczi## 407531eb1202SKevin Wolf# @IscsiTransport: 407631eb1202SKevin Wolf# 407731eb1202SKevin Wolf# An enumeration of libiscsi transport types 407831eb1202SKevin Wolf# 407931eb1202SKevin Wolf# Since: 2.9 408031eb1202SKevin Wolf## 408131eb1202SKevin Wolf{ 'enum': 'IscsiTransport', 408231eb1202SKevin Wolf 'data': [ 'tcp', 'iser' ] } 408331eb1202SKevin Wolf 408431eb1202SKevin Wolf## 408531eb1202SKevin Wolf# @IscsiHeaderDigest: 408631eb1202SKevin Wolf# 408731eb1202SKevin Wolf# An enumeration of header digests supported by libiscsi 408831eb1202SKevin Wolf# 408931eb1202SKevin Wolf# Since: 2.9 409031eb1202SKevin Wolf## 409131eb1202SKevin Wolf{ 'enum': 'IscsiHeaderDigest', 409231eb1202SKevin Wolf 'prefix': 'QAPI_ISCSI_HEADER_DIGEST', 409331eb1202SKevin Wolf 'data': [ 'crc32c', 'none', 'crc32c-none', 'none-crc32c' ] } 409431eb1202SKevin Wolf 409531eb1202SKevin Wolf## 409631eb1202SKevin Wolf# @BlockdevOptionsIscsi: 409731eb1202SKevin Wolf# 4098d6a5ca3aSMarkus Armbruster# Driver specific block device options for iscsi 4099d6a5ca3aSMarkus Armbruster# 410051654aa5SJeff Cody# @transport: The iscsi transport type 410131eb1202SKevin Wolf# 410251654aa5SJeff Cody# @portal: The address of the iscsi portal 410331eb1202SKevin Wolf# 410451654aa5SJeff Cody# @target: The target iqn name 410531eb1202SKevin Wolf# 41061d8bda12SMarkus Armbruster# @lun: LUN to connect to. Defaults to 0. 410731eb1202SKevin Wolf# 4108a937b6aaSMarkus Armbruster# @user: User name to log in with. If omitted, no CHAP authentication 4109a937b6aaSMarkus Armbruster# is performed. 411031eb1202SKevin Wolf# 4111a937b6aaSMarkus Armbruster# @password-secret: The ID of a QCryptoSecret object providing the 4112a937b6aaSMarkus Armbruster# password for the login. This option is required if @user is 4113a937b6aaSMarkus Armbruster# specified. 411431eb1202SKevin Wolf# 4115a937b6aaSMarkus Armbruster# @initiator-name: The iqn name we want to identify to the target as. 4116a937b6aaSMarkus Armbruster# If this option is not specified, an initiator name is generated 4117a937b6aaSMarkus Armbruster# automatically. 411831eb1202SKevin Wolf# 4119a937b6aaSMarkus Armbruster# @header-digest: The desired header digest. Defaults to none-crc32c. 412031eb1202SKevin Wolf# 4121a937b6aaSMarkus Armbruster# @timeout: Timeout in seconds after which a request will timeout. 0 4122a937b6aaSMarkus Armbruster# means no timeout and is the default. 412331eb1202SKevin Wolf# 412431eb1202SKevin Wolf# Since: 2.9 412531eb1202SKevin Wolf## 412631eb1202SKevin Wolf{ 'struct': 'BlockdevOptionsIscsi', 412731eb1202SKevin Wolf 'data': { 'transport': 'IscsiTransport', 412831eb1202SKevin Wolf 'portal': 'str', 412931eb1202SKevin Wolf 'target': 'str', 413031eb1202SKevin Wolf '*lun': 'int', 413131eb1202SKevin Wolf '*user': 'str', 413231eb1202SKevin Wolf '*password-secret': 'str', 413331eb1202SKevin Wolf '*initiator-name': 'str', 413431eb1202SKevin Wolf '*header-digest': 'IscsiHeaderDigest', 413531eb1202SKevin Wolf '*timeout': 'int' } } 413631eb1202SKevin Wolf 41370a55679bSJeff Cody## 4138a3699de4SMarkus Armbruster# @RbdAuthMode: 4139a3699de4SMarkus Armbruster# 4140a3699de4SMarkus Armbruster# Since: 3.0 4141a3699de4SMarkus Armbruster## 4142a3699de4SMarkus Armbruster{ 'enum': 'RbdAuthMode', 4143a3699de4SMarkus Armbruster 'data': [ 'cephx', 'none' ] } 4144a3699de4SMarkus Armbruster 4145a3699de4SMarkus Armbruster## 414642e4ac9eSOr Ozeri# @RbdImageEncryptionFormat: 414742e4ac9eSOr Ozeri# 4148b8f218efSOr Ozeri# @luks-any: Used for opening either luks or luks2 (Since 8.0) 4149b8f218efSOr Ozeri# 415042e4ac9eSOr Ozeri# Since: 6.1 415142e4ac9eSOr Ozeri## 415242e4ac9eSOr Ozeri{ 'enum': 'RbdImageEncryptionFormat', 4153b8f218efSOr Ozeri 'data': [ 'luks', 'luks2', 'luks-any' ] } 415442e4ac9eSOr Ozeri 415542e4ac9eSOr Ozeri## 415642e4ac9eSOr Ozeri# @RbdEncryptionOptionsLUKSBase: 415742e4ac9eSOr Ozeri# 4158a937b6aaSMarkus Armbruster# @key-secret: ID of a QCryptoSecret object providing a passphrase for 4159a937b6aaSMarkus Armbruster# unlocking the encryption 416042e4ac9eSOr Ozeri# 416142e4ac9eSOr Ozeri# Since: 6.1 416242e4ac9eSOr Ozeri## 416342e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKSBase', 416442e4ac9eSOr Ozeri 'data': { 'key-secret': 'str' } } 416542e4ac9eSOr Ozeri 416642e4ac9eSOr Ozeri## 416742e4ac9eSOr Ozeri# @RbdEncryptionCreateOptionsLUKSBase: 416842e4ac9eSOr Ozeri# 416942e4ac9eSOr Ozeri# @cipher-alg: The encryption algorithm 417042e4ac9eSOr Ozeri# 417142e4ac9eSOr Ozeri# Since: 6.1 417242e4ac9eSOr Ozeri## 417342e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionCreateOptionsLUKSBase', 417442e4ac9eSOr Ozeri 'base': 'RbdEncryptionOptionsLUKSBase', 4175a092c513SMarkus Armbruster 'data': { '*cipher-alg': 'QCryptoCipherAlgo' } } 417642e4ac9eSOr Ozeri 417742e4ac9eSOr Ozeri## 417842e4ac9eSOr Ozeri# @RbdEncryptionOptionsLUKS: 417942e4ac9eSOr Ozeri# 418042e4ac9eSOr Ozeri# Since: 6.1 418142e4ac9eSOr Ozeri## 418242e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKS', 418342e4ac9eSOr Ozeri 'base': 'RbdEncryptionOptionsLUKSBase', 418442e4ac9eSOr Ozeri 'data': { } } 418542e4ac9eSOr Ozeri 418642e4ac9eSOr Ozeri## 418742e4ac9eSOr Ozeri# @RbdEncryptionOptionsLUKS2: 418842e4ac9eSOr Ozeri# 418942e4ac9eSOr Ozeri# Since: 6.1 419042e4ac9eSOr Ozeri## 419142e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKS2', 419242e4ac9eSOr Ozeri 'base': 'RbdEncryptionOptionsLUKSBase', 419342e4ac9eSOr Ozeri 'data': { } } 419442e4ac9eSOr Ozeri 419542e4ac9eSOr Ozeri## 4196b8f218efSOr Ozeri# @RbdEncryptionOptionsLUKSAny: 4197b8f218efSOr Ozeri# 4198b8f218efSOr Ozeri# Since: 8.0 4199b8f218efSOr Ozeri## 4200b8f218efSOr Ozeri{ 'struct': 'RbdEncryptionOptionsLUKSAny', 4201b8f218efSOr Ozeri 'base': 'RbdEncryptionOptionsLUKSBase', 4202b8f218efSOr Ozeri 'data': { } } 4203b8f218efSOr Ozeri 4204b8f218efSOr Ozeri## 420542e4ac9eSOr Ozeri# @RbdEncryptionCreateOptionsLUKS: 420642e4ac9eSOr Ozeri# 420742e4ac9eSOr Ozeri# Since: 6.1 420842e4ac9eSOr Ozeri## 420942e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionCreateOptionsLUKS', 421042e4ac9eSOr Ozeri 'base': 'RbdEncryptionCreateOptionsLUKSBase', 421142e4ac9eSOr Ozeri 'data': { } } 421242e4ac9eSOr Ozeri 421342e4ac9eSOr Ozeri## 421442e4ac9eSOr Ozeri# @RbdEncryptionCreateOptionsLUKS2: 421542e4ac9eSOr Ozeri# 421642e4ac9eSOr Ozeri# Since: 6.1 421742e4ac9eSOr Ozeri## 421842e4ac9eSOr Ozeri{ 'struct': 'RbdEncryptionCreateOptionsLUKS2', 421942e4ac9eSOr Ozeri 'base': 'RbdEncryptionCreateOptionsLUKSBase', 422042e4ac9eSOr Ozeri 'data': { } } 422142e4ac9eSOr Ozeri 422242e4ac9eSOr Ozeri## 422342e4ac9eSOr Ozeri# @RbdEncryptionOptions: 422442e4ac9eSOr Ozeri# 42250f385a24SOr Ozeri# @format: Encryption format. 42260f385a24SOr Ozeri# 4227a937b6aaSMarkus Armbruster# @parent: Parent image encryption options (for cloned images). Can 4228a937b6aaSMarkus Armbruster# be left unspecified if this cloned image is encrypted using the 4229a937b6aaSMarkus Armbruster# same format and secret as its parent image (i.e. not explicitly 4230a937b6aaSMarkus Armbruster# formatted) or if its parent image is not encrypted. (Since 8.0) 42310f385a24SOr Ozeri# 423242e4ac9eSOr Ozeri# Since: 6.1 423342e4ac9eSOr Ozeri## 423442e4ac9eSOr Ozeri{ 'union': 'RbdEncryptionOptions', 42350f385a24SOr Ozeri 'base': { 'format': 'RbdImageEncryptionFormat', 42360f385a24SOr Ozeri '*parent': 'RbdEncryptionOptions' }, 423742e4ac9eSOr Ozeri 'discriminator': 'format', 423842e4ac9eSOr Ozeri 'data': { 'luks': 'RbdEncryptionOptionsLUKS', 4239b8f218efSOr Ozeri 'luks2': 'RbdEncryptionOptionsLUKS2', 4240b8f218efSOr Ozeri 'luks-any': 'RbdEncryptionOptionsLUKSAny'} } 424142e4ac9eSOr Ozeri 424242e4ac9eSOr Ozeri## 424342e4ac9eSOr Ozeri# @RbdEncryptionCreateOptions: 424442e4ac9eSOr Ozeri# 424589a2273bSMarkus Armbruster# @format: Encryption format. 424689a2273bSMarkus Armbruster# 424742e4ac9eSOr Ozeri# Since: 6.1 424842e4ac9eSOr Ozeri## 424942e4ac9eSOr Ozeri{ 'union': 'RbdEncryptionCreateOptions', 425042e4ac9eSOr Ozeri 'base': { 'format': 'RbdImageEncryptionFormat' }, 425142e4ac9eSOr Ozeri 'discriminator': 'format', 425242e4ac9eSOr Ozeri 'data': { 'luks': 'RbdEncryptionCreateOptionsLUKS', 425342e4ac9eSOr Ozeri 'luks2': 'RbdEncryptionCreateOptionsLUKS2' } } 425442e4ac9eSOr Ozeri 425542e4ac9eSOr Ozeri## 42568a47e8ebSJeff Cody# @BlockdevOptionsRbd: 42578a47e8ebSJeff Cody# 42588a47e8ebSJeff Cody# @pool: Ceph pool name. 42598a47e8ebSJeff Cody# 426019ae9ae0SFlorian Florensa# @namespace: Rados namespace name in the Ceph pool. (Since 5.0) 426119ae9ae0SFlorian Florensa# 42628a47e8ebSJeff Cody# @image: Image name in the Ceph pool. 42638a47e8ebSJeff Cody# 4264a937b6aaSMarkus Armbruster# @conf: path to Ceph configuration file. Values in the configuration 4265a937b6aaSMarkus Armbruster# file will be overridden by options specified via QAPI. 42668a47e8ebSJeff Cody# 42671d8bda12SMarkus Armbruster# @snapshot: Ceph snapshot name. 42688a47e8ebSJeff Cody# 426942e4ac9eSOr Ozeri# @encrypt: Image encryption options. (Since 6.1) 427042e4ac9eSOr Ozeri# 42711d8bda12SMarkus Armbruster# @user: Ceph id name. 42728a47e8ebSJeff Cody# 4273a937b6aaSMarkus Armbruster# @auth-client-required: Acceptable authentication modes. This maps 4274a937b6aaSMarkus Armbruster# to Ceph configuration option "auth_client_required". (Since 4275a937b6aaSMarkus Armbruster# 3.0) 4276a3699de4SMarkus Armbruster# 4277a937b6aaSMarkus Armbruster# @key-secret: ID of a QCryptoSecret object providing a key for cephx 4278a937b6aaSMarkus Armbruster# authentication. This maps to Ceph configuration option "key". 4279a937b6aaSMarkus Armbruster# (Since 3.0) 4280d083f954SMarkus Armbruster# 4281a937b6aaSMarkus Armbruster# @server: Monitor host address and port. This maps to the "mon_host" 4282a937b6aaSMarkus Armbruster# Ceph option. 42830a55679bSJeff Cody# 42848a47e8ebSJeff Cody# Since: 2.9 42858a47e8ebSJeff Cody## 42868a47e8ebSJeff Cody{ 'struct': 'BlockdevOptionsRbd', 42878a47e8ebSJeff Cody 'data': { 'pool': 'str', 428819ae9ae0SFlorian Florensa '*namespace': 'str', 42898a47e8ebSJeff Cody 'image': 'str', 42908a47e8ebSJeff Cody '*conf': 'str', 42918a47e8ebSJeff Cody '*snapshot': 'str', 429242e4ac9eSOr Ozeri '*encrypt': 'RbdEncryptionOptions', 42938a47e8ebSJeff Cody '*user': 'str', 4294a3699de4SMarkus Armbruster '*auth-client-required': ['RbdAuthMode'], 4295d083f954SMarkus Armbruster '*key-secret': 'str', 4296577d8c9aSMarkus Armbruster '*server': ['InetSocketAddressBase'] } } 42978a47e8ebSJeff Cody 429831eb1202SKevin Wolf## 42995072f7b3SMarc-André Lureau# @ReplicationMode: 4300190b9a8bSChanglong Xie# 4301190b9a8bSChanglong Xie# An enumeration of replication modes. 4302190b9a8bSChanglong Xie# 4303a937b6aaSMarkus Armbruster# @primary: Primary mode, the vm's state will be sent to secondary 4304a937b6aaSMarkus Armbruster# QEMU. 4305190b9a8bSChanglong Xie# 4306a937b6aaSMarkus Armbruster# @secondary: Secondary mode, receive the vm's state from primary 4307a937b6aaSMarkus Armbruster# QEMU. 4308190b9a8bSChanglong Xie# 430979b7a77eSMarkus Armbruster# Since: 2.9 4310190b9a8bSChanglong Xie## 4311335d10cdSMarc-André Lureau{ 'enum' : 'ReplicationMode', 'data' : [ 'primary', 'secondary' ], 43128a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' } 4313190b9a8bSChanglong Xie 4314190b9a8bSChanglong Xie## 43155072f7b3SMarc-André Lureau# @BlockdevOptionsReplication: 431682ac5543SWen Congyang# 431782ac5543SWen Congyang# Driver specific block device options for replication 431882ac5543SWen Congyang# 431982ac5543SWen Congyang# @mode: the replication mode 432082ac5543SWen Congyang# 4321a937b6aaSMarkus Armbruster# @top-id: In secondary mode, node name or device ID of the root node 4322a937b6aaSMarkus Armbruster# who owns the replication node chain. Must not be given in 4323f4f2539bSChanglong Xie# primary mode. 432482ac5543SWen Congyang# 432579b7a77eSMarkus Armbruster# Since: 2.9 432682ac5543SWen Congyang## 432782ac5543SWen Congyang{ 'struct': 'BlockdevOptionsReplication', 432882ac5543SWen Congyang 'base': 'BlockdevOptionsGenericFormat', 432982ac5543SWen Congyang 'data': { 'mode': 'ReplicationMode', 4330335d10cdSMarc-André Lureau '*top-id': 'str' }, 43318a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' } 433282ac5543SWen Congyang 433382ac5543SWen Congyang## 43345072f7b3SMarc-André Lureau# @NFSTransport: 4335aa2623d8SAshijeet Acharya# 4336aa2623d8SAshijeet Acharya# An enumeration of NFS transport types 4337aa2623d8SAshijeet Acharya# 4338aa2623d8SAshijeet Acharya# @inet: TCP transport 4339aa2623d8SAshijeet Acharya# 434079b7a77eSMarkus Armbruster# Since: 2.9 4341aa2623d8SAshijeet Acharya## 4342aa2623d8SAshijeet Acharya{ 'enum': 'NFSTransport', 4343aa2623d8SAshijeet Acharya 'data': [ 'inet' ] } 4344aa2623d8SAshijeet Acharya 4345aa2623d8SAshijeet Acharya## 43465072f7b3SMarc-André Lureau# @NFSServer: 4347aa2623d8SAshijeet Acharya# 4348aa2623d8SAshijeet Acharya# Captures the address of the socket 4349aa2623d8SAshijeet Acharya# 4350aa2623d8SAshijeet Acharya# @type: transport type used for NFS (only TCP supported) 4351aa2623d8SAshijeet Acharya# 4352aa2623d8SAshijeet Acharya# @host: host address for NFS server 4353aa2623d8SAshijeet Acharya# 435479b7a77eSMarkus Armbruster# Since: 2.9 4355aa2623d8SAshijeet Acharya## 4356aa2623d8SAshijeet Acharya{ 'struct': 'NFSServer', 4357aa2623d8SAshijeet Acharya 'data': { 'type': 'NFSTransport', 4358aa2623d8SAshijeet Acharya 'host': 'str' } } 4359aa2623d8SAshijeet Acharya 4360aa2623d8SAshijeet Acharya## 43615072f7b3SMarc-André Lureau# @BlockdevOptionsNfs: 4362aa2623d8SAshijeet Acharya# 4363aa2623d8SAshijeet Acharya# Driver specific block device option for NFS 4364aa2623d8SAshijeet Acharya# 4365aa2623d8SAshijeet Acharya# @server: host address 4366aa2623d8SAshijeet Acharya# 4367aa2623d8SAshijeet Acharya# @path: path of the image on the host 4368aa2623d8SAshijeet Acharya# 4369a937b6aaSMarkus Armbruster# @user: UID value to use when talking to the server (defaults to 4370a937b6aaSMarkus Armbruster# 65534 on Windows and getuid() on unix) 4371aa2623d8SAshijeet Acharya# 4372a937b6aaSMarkus Armbruster# @group: GID value to use when talking to the server (defaults to 4373a937b6aaSMarkus Armbruster# 65534 on Windows and getgid() in unix) 4374aa2623d8SAshijeet Acharya# 4375a937b6aaSMarkus Armbruster# @tcp-syn-count: number of SYNs during the session establishment 4376a937b6aaSMarkus Armbruster# (defaults to libnfs default) 4377aa2623d8SAshijeet Acharya# 4378a937b6aaSMarkus Armbruster# @readahead-size: set the readahead size in bytes (defaults to libnfs 4379a937b6aaSMarkus Armbruster# default) 4380aa2623d8SAshijeet Acharya# 4381a937b6aaSMarkus Armbruster# @page-cache-size: set the pagecache size in bytes (defaults to 4382a937b6aaSMarkus Armbruster# libnfs default) 4383aa2623d8SAshijeet Acharya# 4384a937b6aaSMarkus Armbruster# @debug: set the NFS debug level (max 2) (defaults to libnfs default) 4385aa2623d8SAshijeet Acharya# 438679b7a77eSMarkus Armbruster# Since: 2.9 4387aa2623d8SAshijeet Acharya## 4388aa2623d8SAshijeet Acharya{ 'struct': 'BlockdevOptionsNfs', 4389aa2623d8SAshijeet Acharya 'data': { 'server': 'NFSServer', 4390aa2623d8SAshijeet Acharya 'path': 'str', 4391aa2623d8SAshijeet Acharya '*user': 'int', 4392aa2623d8SAshijeet Acharya '*group': 'int', 4393aa2623d8SAshijeet Acharya '*tcp-syn-count': 'int', 4394aa2623d8SAshijeet Acharya '*readahead-size': 'int', 4395aa2623d8SAshijeet Acharya '*page-cache-size': 'int', 43967103d916SPrasanna Kumar Kalever '*debug': 'int' } } 4397aa2623d8SAshijeet Acharya 4398aa2623d8SAshijeet Acharya## 43996b9d62dbSMax Reitz# @BlockdevOptionsCurlBase: 440068555285SKevin Wolf# 4401a937b6aaSMarkus Armbruster# Driver specific block device options shared by all protocols 4402a937b6aaSMarkus Armbruster# supported by the curl backend. 440368555285SKevin Wolf# 44046b9d62dbSMax Reitz# @url: URL of the image file 44056b9d62dbSMax Reitz# 4406a937b6aaSMarkus Armbruster# @readahead: Size of the read-ahead cache; must be a multiple of 512 4407a937b6aaSMarkus Armbruster# (defaults to 256 kB) 44086b9d62dbSMax Reitz# 44096b9d62dbSMax Reitz# @timeout: Timeout for connections, in seconds (defaults to 5) 44106b9d62dbSMax Reitz# 44116b9d62dbSMax Reitz# @username: Username for authentication (defaults to none) 44126b9d62dbSMax Reitz# 44136b9d62dbSMax Reitz# @password-secret: ID of a QCryptoSecret object providing a password 44146b9d62dbSMax Reitz# for authentication (defaults to no password) 44156b9d62dbSMax Reitz# 4416a937b6aaSMarkus Armbruster# @proxy-username: Username for proxy authentication (defaults to 4417a937b6aaSMarkus Armbruster# none) 44186b9d62dbSMax Reitz# 4419a937b6aaSMarkus Armbruster# @proxy-password-secret: ID of a QCryptoSecret object providing a 4420a937b6aaSMarkus Armbruster# password for proxy authentication (defaults to no password) 442168555285SKevin Wolf# 442279b7a77eSMarkus Armbruster# Since: 2.9 442368555285SKevin Wolf## 44246b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlBase', 44256b9d62dbSMax Reitz 'data': { 'url': 'str', 44266b9d62dbSMax Reitz '*readahead': 'int', 44276b9d62dbSMax Reitz '*timeout': 'int', 44286b9d62dbSMax Reitz '*username': 'str', 44296b9d62dbSMax Reitz '*password-secret': 'str', 44306b9d62dbSMax Reitz '*proxy-username': 'str', 44316b9d62dbSMax Reitz '*proxy-password-secret': 'str' } } 44326b9d62dbSMax Reitz 44336b9d62dbSMax Reitz## 44346b9d62dbSMax Reitz# @BlockdevOptionsCurlHttp: 44356b9d62dbSMax Reitz# 4436a937b6aaSMarkus Armbruster# Driver specific block device options for HTTP connections over the 4437a937b6aaSMarkus Armbruster# curl backend. URLs must start with "http://". 44386b9d62dbSMax Reitz# 4439a937b6aaSMarkus Armbruster# @cookie: List of cookies to set; format is "name1=content1; 4440a937b6aaSMarkus Armbruster# name2=content2;" as explained by CURLOPT_COOKIE(3). Defaults to 4441a937b6aaSMarkus Armbruster# no cookies. 44426b9d62dbSMax Reitz# 4443a937b6aaSMarkus Armbruster# @cookie-secret: ID of a QCryptoSecret object providing the cookie 4444a937b6aaSMarkus Armbruster# data in a secure way. See @cookie for the format. (since 2.10) 4445327c8ebdSPeter Krempa# 44466b9d62dbSMax Reitz# Since: 2.9 44476b9d62dbSMax Reitz## 44486b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlHttp', 44496b9d62dbSMax Reitz 'base': 'BlockdevOptionsCurlBase', 4450327c8ebdSPeter Krempa 'data': { '*cookie': 'str', 4451327c8ebdSPeter Krempa '*cookie-secret': 'str'} } 44526b9d62dbSMax Reitz 44536b9d62dbSMax Reitz## 44546b9d62dbSMax Reitz# @BlockdevOptionsCurlHttps: 44556b9d62dbSMax Reitz# 4456a937b6aaSMarkus Armbruster# Driver specific block device options for HTTPS connections over the 4457a937b6aaSMarkus Armbruster# curl backend. URLs must start with "https://". 44586b9d62dbSMax Reitz# 4459a937b6aaSMarkus Armbruster# @cookie: List of cookies to set; format is "name1=content1; 4460a937b6aaSMarkus Armbruster# name2=content2;" as explained by CURLOPT_COOKIE(3). Defaults to 4461a937b6aaSMarkus Armbruster# no cookies. 44626b9d62dbSMax Reitz# 4463a937b6aaSMarkus Armbruster# @sslverify: Whether to verify the SSL certificate's validity 4464a937b6aaSMarkus Armbruster# (defaults to true) 44656b9d62dbSMax Reitz# 4466a937b6aaSMarkus Armbruster# @cookie-secret: ID of a QCryptoSecret object providing the cookie 4467a937b6aaSMarkus Armbruster# data in a secure way. See @cookie for the format. (since 2.10) 4468327c8ebdSPeter Krempa# 44696b9d62dbSMax Reitz# Since: 2.9 44706b9d62dbSMax Reitz## 44716b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlHttps', 44726b9d62dbSMax Reitz 'base': 'BlockdevOptionsCurlBase', 44736b9d62dbSMax Reitz 'data': { '*cookie': 'str', 4474327c8ebdSPeter Krempa '*sslverify': 'bool', 4475327c8ebdSPeter Krempa '*cookie-secret': 'str'} } 44766b9d62dbSMax Reitz 44776b9d62dbSMax Reitz## 44786b9d62dbSMax Reitz# @BlockdevOptionsCurlFtp: 44796b9d62dbSMax Reitz# 4480a937b6aaSMarkus Armbruster# Driver specific block device options for FTP connections over the 4481a937b6aaSMarkus Armbruster# curl backend. URLs must start with "ftp://". 44826b9d62dbSMax Reitz# 44836b9d62dbSMax Reitz# Since: 2.9 44846b9d62dbSMax Reitz## 44856b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlFtp', 44866b9d62dbSMax Reitz 'base': 'BlockdevOptionsCurlBase', 44876b9d62dbSMax Reitz 'data': { } } 44886b9d62dbSMax Reitz 44896b9d62dbSMax Reitz## 44906b9d62dbSMax Reitz# @BlockdevOptionsCurlFtps: 44916b9d62dbSMax Reitz# 4492a937b6aaSMarkus Armbruster# Driver specific block device options for FTPS connections over the 4493a937b6aaSMarkus Armbruster# curl backend. URLs must start with "ftps://". 44946b9d62dbSMax Reitz# 4495a937b6aaSMarkus Armbruster# @sslverify: Whether to verify the SSL certificate's validity 4496a937b6aaSMarkus Armbruster# (defaults to true) 44976b9d62dbSMax Reitz# 44986b9d62dbSMax Reitz# Since: 2.9 44996b9d62dbSMax Reitz## 45006b9d62dbSMax Reitz{ 'struct': 'BlockdevOptionsCurlFtps', 45016b9d62dbSMax Reitz 'base': 'BlockdevOptionsCurlBase', 45026b9d62dbSMax Reitz 'data': { '*sslverify': 'bool' } } 450368555285SKevin Wolf 450468555285SKevin Wolf## 45055072f7b3SMarc-André Lureau# @BlockdevOptionsNbd: 45066b02b1f0SMax Reitz# 45076b02b1f0SMax Reitz# Driver specific block device options for NBD. 45086b02b1f0SMax Reitz# 45096b02b1f0SMax Reitz# @server: NBD server address 45106b02b1f0SMax Reitz# 45111d8bda12SMarkus Armbruster# @export: export name 45126b02b1f0SMax Reitz# 45131d8bda12SMarkus Armbruster# @tls-creds: TLS credentials ID 45146b02b1f0SMax Reitz# 4515a937b6aaSMarkus Armbruster# @tls-hostname: TLS hostname override for certificate validation 4516a937b6aaSMarkus Armbruster# (Since 7.0) 4517a0cd6d29SDaniel P. Berrangé# 4518a937b6aaSMarkus Armbruster# @x-dirty-bitmap: A metadata context name such as 4519a937b6aaSMarkus Armbruster# "qemu:dirty-bitmap:NAME" or "qemu:allocation-depth" to query in 4520a937b6aaSMarkus Armbruster# place of the traditional "base:allocation" block status (see 4521a937b6aaSMarkus Armbruster# NBD_OPT_LIST_META_CONTEXT in the NBD protocol; and yes, naming 4522a937b6aaSMarkus Armbruster# this option x-context would have made more sense) (since 3.0) 4523216ee365SEric Blake# 4524a937b6aaSMarkus Armbruster# @reconnect-delay: On an unexpected disconnect, the nbd client tries 4525a937b6aaSMarkus Armbruster# to connect again until succeeding or encountering a serious 4526a937b6aaSMarkus Armbruster# error. During the first @reconnect-delay seconds, all requests 4527a937b6aaSMarkus Armbruster# are paused and will be rerun on a successful reconnect. After 4528a937b6aaSMarkus Armbruster# that time, any delayed requests and all future requests before a 4529a937b6aaSMarkus Armbruster# successful reconnect will immediately fail. Default 0 (Since 4530a937b6aaSMarkus Armbruster# 4.2) 4531b172ae2eSVladimir Sementsov-Ogievskiy# 4532a937b6aaSMarkus Armbruster# @open-timeout: In seconds. If zero, the nbd driver tries the 4533a937b6aaSMarkus Armbruster# connection only once, and fails to open if the connection fails. 4534be16b8bfSVladimir Sementsov-Ogievskiy# If non-zero, the nbd driver will repeat connection attempts 4535be16b8bfSVladimir Sementsov-Ogievskiy# until successful or until @open-timeout seconds have elapsed. 4536be16b8bfSVladimir Sementsov-Ogievskiy# Default 0 (Since 7.0) 4537be16b8bfSVladimir Sementsov-Ogievskiy# 45389fb49daaSMarkus Armbruster# Features: 4539a937b6aaSMarkus Armbruster# 45409fb49daaSMarkus Armbruster# @unstable: Member @x-dirty-bitmap is experimental. 45419fb49daaSMarkus Armbruster# 454279b7a77eSMarkus Armbruster# Since: 2.9 45436b02b1f0SMax Reitz## 45446b02b1f0SMax Reitz{ 'struct': 'BlockdevOptionsNbd', 454562cf396bSMarkus Armbruster 'data': { 'server': 'SocketAddress', 45466b02b1f0SMax Reitz '*export': 'str', 4547216ee365SEric Blake '*tls-creds': 'str', 4548a0cd6d29SDaniel P. Berrangé '*tls-hostname': 'str', 45499fb49daaSMarkus Armbruster '*x-dirty-bitmap': { 'type': 'str', 'features': [ 'unstable' ] }, 4550be16b8bfSVladimir Sementsov-Ogievskiy '*reconnect-delay': 'uint32', 4551be16b8bfSVladimir Sementsov-Ogievskiy '*open-timeout': 'uint32' } } 45526b02b1f0SMax Reitz 45536b02b1f0SMax Reitz## 45545072f7b3SMarc-André Lureau# @BlockdevOptionsRaw: 45552fdc7045STomáš Golembiovský# 45562fdc7045STomáš Golembiovský# Driver specific block device options for the raw driver. 45572fdc7045STomáš Golembiovský# 45581d8bda12SMarkus Armbruster# @offset: position where the block device starts 4559a937b6aaSMarkus Armbruster# 45601d8bda12SMarkus Armbruster# @size: the assumed size of the device 45612fdc7045STomáš Golembiovský# 456279b7a77eSMarkus Armbruster# Since: 2.9 45632fdc7045STomáš Golembiovský## 45642fdc7045STomáš Golembiovský{ 'struct': 'BlockdevOptionsRaw', 45652fdc7045STomáš Golembiovský 'base': 'BlockdevOptionsGenericFormat', 45662fdc7045STomáš Golembiovský 'data': { '*offset': 'int', '*size': 'int' } } 45672fdc7045STomáš Golembiovský 45682fdc7045STomáš Golembiovský## 4569d8e7d87eSManos Pitsidianakis# @BlockdevOptionsThrottle: 4570d8e7d87eSManos Pitsidianakis# 4571d8e7d87eSManos Pitsidianakis# Driver specific block device options for the throttle driver 4572d8e7d87eSManos Pitsidianakis# 4573d8e7d87eSManos Pitsidianakis# @throttle-group: the name of the throttle-group object to use. It 4574d8e7d87eSManos Pitsidianakis# must already exist. 4575a937b6aaSMarkus Armbruster# 4576d8e7d87eSManos Pitsidianakis# @file: reference to or definition of the data source block device 45774ae65a52SAndrea Bolognani# 4578d8e7d87eSManos Pitsidianakis# Since: 2.11 4579d8e7d87eSManos Pitsidianakis## 4580d8e7d87eSManos Pitsidianakis{ 'struct': 'BlockdevOptionsThrottle', 4581d8e7d87eSManos Pitsidianakis 'data': { 'throttle-group': 'str', 4582d8e7d87eSManos Pitsidianakis 'file' : 'BlockdevRef' 4583d8e7d87eSManos Pitsidianakis } } 4584e4c8fdddSAndrey Shinkevich 4585e4c8fdddSAndrey Shinkevich## 4586e4c8fdddSAndrey Shinkevich# @BlockdevOptionsCor: 4587e4c8fdddSAndrey Shinkevich# 4588e4c8fdddSAndrey Shinkevich# Driver specific block device options for the copy-on-read driver. 4589e4c8fdddSAndrey Shinkevich# 4590a937b6aaSMarkus Armbruster# @bottom: The name of a non-filter node (allocation-bearing layer) 4591a937b6aaSMarkus Armbruster# that limits the COR operations in the backing chain (inclusive), 4592a937b6aaSMarkus Armbruster# so that no data below this node will be copied by this filter. 4593a937b6aaSMarkus Armbruster# If option is absent, the limit is not applied, so that data from 4594a937b6aaSMarkus Armbruster# all backing layers may be copied. 4595e4c8fdddSAndrey Shinkevich# 4596e4c8fdddSAndrey Shinkevich# Since: 6.0 4597e4c8fdddSAndrey Shinkevich## 4598e4c8fdddSAndrey Shinkevich{ 'struct': 'BlockdevOptionsCor', 4599e4c8fdddSAndrey Shinkevich 'base': 'BlockdevOptionsGenericFormat', 4600e4c8fdddSAndrey Shinkevich 'data': { '*bottom': 'str' } } 4601e4c8fdddSAndrey Shinkevich 4602d8e7d87eSManos Pitsidianakis## 4603f1bb39a8SVladimir Sementsov-Ogievskiy# @OnCbwError: 4604f1bb39a8SVladimir Sementsov-Ogievskiy# 4605f1bb39a8SVladimir Sementsov-Ogievskiy# An enumeration of possible behaviors for copy-before-write operation 4606f1bb39a8SVladimir Sementsov-Ogievskiy# failures. 4607f1bb39a8SVladimir Sementsov-Ogievskiy# 4608a937b6aaSMarkus Armbruster# @break-guest-write: report the error to the guest. This way, the 4609a937b6aaSMarkus Armbruster# guest will not be able to overwrite areas that cannot be backed 4610a937b6aaSMarkus Armbruster# up, so the backup process remains valid. 4611f1bb39a8SVladimir Sementsov-Ogievskiy# 4612a937b6aaSMarkus Armbruster# @break-snapshot: continue guest write. Doing so will make the 4613a937b6aaSMarkus Armbruster# provided snapshot state invalid and any backup or export process 4614a937b6aaSMarkus Armbruster# based on it will finally fail. 4615f1bb39a8SVladimir Sementsov-Ogievskiy# 4616f1bb39a8SVladimir Sementsov-Ogievskiy# Since: 7.1 4617f1bb39a8SVladimir Sementsov-Ogievskiy## 4618f1bb39a8SVladimir Sementsov-Ogievskiy{ 'enum': 'OnCbwError', 4619f1bb39a8SVladimir Sementsov-Ogievskiy 'data': [ 'break-guest-write', 'break-snapshot' ] } 4620f1bb39a8SVladimir Sementsov-Ogievskiy 4621f1bb39a8SVladimir Sementsov-Ogievskiy## 4622783b2825SVladimir Sementsov-Ogievskiy# @BlockdevOptionsCbw: 4623783b2825SVladimir Sementsov-Ogievskiy# 4624a937b6aaSMarkus Armbruster# Driver specific block device options for the copy-before-write 4625a937b6aaSMarkus Armbruster# driver, which does so called copy-before-write operations: when data 4626a937b6aaSMarkus Armbruster# is written to the filter, the filter first reads corresponding 4627a937b6aaSMarkus Armbruster# blocks from its file child and copies them to @target child. After 4628a937b6aaSMarkus Armbruster# successfully copying, the write request is propagated to file child. 4629a937b6aaSMarkus Armbruster# If copying fails, the original write request is failed too and no 4630a937b6aaSMarkus Armbruster# data is written to file child. 4631783b2825SVladimir Sementsov-Ogievskiy# 4632783b2825SVladimir Sementsov-Ogievskiy# @target: The target for copy-before-write operations. 4633783b2825SVladimir Sementsov-Ogievskiy# 46345f3a3cd7SVladimir Sementsov-Ogievskiy# @bitmap: If specified, copy-before-write filter will do 46355f3a3cd7SVladimir Sementsov-Ogievskiy# copy-before-write operations only for dirty regions of the 4636a937b6aaSMarkus Armbruster# bitmap. Bitmap size must be equal to length of file and target 4637a937b6aaSMarkus Armbruster# child of the filter. Note also, that bitmap is used only to 4638a937b6aaSMarkus Armbruster# initialize internal bitmap of the process, so further 46395f3a3cd7SVladimir Sementsov-Ogievskiy# modifications (or removing) of specified bitmap doesn't 46405f3a3cd7SVladimir Sementsov-Ogievskiy# influence the filter. (Since 7.0) 46415f3a3cd7SVladimir Sementsov-Ogievskiy# 4642f1bb39a8SVladimir Sementsov-Ogievskiy# @on-cbw-error: Behavior on failure of copy-before-write operation. 4643f1bb39a8SVladimir Sementsov-Ogievskiy# Default is @break-guest-write. (Since 7.1) 4644f1bb39a8SVladimir Sementsov-Ogievskiy# 4645a937b6aaSMarkus Armbruster# @cbw-timeout: Zero means no limit. Non-zero sets the timeout in 4646a937b6aaSMarkus Armbruster# seconds for copy-before-write operation. When a timeout occurs, 4647a937b6aaSMarkus Armbruster# the respective copy-before-write operation will fail, and the 4648a937b6aaSMarkus Armbruster# @on-cbw-error parameter will decide how this failure is handled. 4649a937b6aaSMarkus Armbruster# Default 0. (Since 7.1) 46506db7fd1cSVladimir Sementsov-Ogievskiy# 46519484ad6cSFiona Ebner# @min-cluster-size: Minimum size of blocks used by copy-before-write 46529484ad6cSFiona Ebner# operations. Has to be a power of 2. No effect if smaller than 46539484ad6cSFiona Ebner# the maximum of the target's cluster size and 64 KiB. Default 0. 46549484ad6cSFiona Ebner# (Since 9.2) 46559484ad6cSFiona Ebner# 4656783b2825SVladimir Sementsov-Ogievskiy# Since: 6.2 4657783b2825SVladimir Sementsov-Ogievskiy## 4658783b2825SVladimir Sementsov-Ogievskiy{ 'struct': 'BlockdevOptionsCbw', 4659783b2825SVladimir Sementsov-Ogievskiy 'base': 'BlockdevOptionsGenericFormat', 4660f1bb39a8SVladimir Sementsov-Ogievskiy 'data': { 'target': 'BlockdevRef', '*bitmap': 'BlockDirtyBitmap', 46619484ad6cSFiona Ebner '*on-cbw-error': 'OnCbwError', '*cbw-timeout': 'uint32', 46629484ad6cSFiona Ebner '*min-cluster-size': 'size' } } 4663783b2825SVladimir Sementsov-Ogievskiy 4664783b2825SVladimir Sementsov-Ogievskiy## 46655072f7b3SMarc-André Lureau# @BlockdevOptions: 46661ad166b6SBenoît Canet# 4667a937b6aaSMarkus Armbruster# Options for creating a block device. Many options are available for 4668a937b6aaSMarkus Armbruster# all block devices, independent of the block driver: 46693666a97fSEric Blake# 46703666a97fSEric Blake# @driver: block driver name 4671a937b6aaSMarkus Armbruster# 4672a937b6aaSMarkus Armbruster# @node-name: the node name of the new node (Since 2.0). This option 4673a937b6aaSMarkus Armbruster# is required on the top level of blockdev-add. Valid node names 4674a937b6aaSMarkus Armbruster# start with an alphabetic character and may contain only 4675a937b6aaSMarkus Armbruster# alphanumeric characters, '-', '.' and '_'. Their maximum length 4676a937b6aaSMarkus Armbruster# is 31 characters. 4677a937b6aaSMarkus Armbruster# 46781d8bda12SMarkus Armbruster# @discard: discard-related options (default: ignore) 4679a937b6aaSMarkus Armbruster# 46801d8bda12SMarkus Armbruster# @cache: cache-related options 4681a937b6aaSMarkus Armbruster# 4682a937b6aaSMarkus Armbruster# @read-only: whether the block device should be read-only (default: 4683a937b6aaSMarkus Armbruster# false). Note that some block drivers support only read-only 4684a937b6aaSMarkus Armbruster# access, either generally or in certain configurations. In this 4685a937b6aaSMarkus Armbruster# case, the default value does not work and the option must be 4686398e6ad0SKevin Wolf# specified explicitly. 4687a937b6aaSMarkus Armbruster# 4688a937b6aaSMarkus Armbruster# @auto-read-only: if true and @read-only is false, QEMU may 4689a937b6aaSMarkus Armbruster# automatically decide not to open the image read-write as 4690a937b6aaSMarkus Armbruster# requested, but fall back to read-only instead (and switch 4691a937b6aaSMarkus Armbruster# between the modes later), e.g. depending on whether the image 4692a937b6aaSMarkus Armbruster# file is writable or whether a writing user is attached to the 4693a937b6aaSMarkus Armbruster# node (default: false, since 3.1) 4694a937b6aaSMarkus Armbruster# 46951d8bda12SMarkus Armbruster# @detect-zeroes: detect and optimize zero writes (Since 2.1) 46963666a97fSEric Blake# (default: off) 4697a937b6aaSMarkus Armbruster# 4698a937b6aaSMarkus Armbruster# @force-share: force share all permission on added nodes. Requires 4699a937b6aaSMarkus Armbruster# read-only=true. (Since 2.10) 47003666a97fSEric Blake# 470179b7a77eSMarkus Armbruster# Since: 2.9 47021ad166b6SBenoît Canet## 47031ad166b6SBenoît Canet{ 'union': 'BlockdevOptions', 47043666a97fSEric Blake 'base': { 'driver': 'BlockdevDriver', 47053666a97fSEric Blake '*node-name': 'str', 47063666a97fSEric Blake '*discard': 'BlockdevDiscardOptions', 47073666a97fSEric Blake '*cache': 'BlockdevCacheOptions', 47083666a97fSEric Blake '*read-only': 'bool', 4709e35bdc12SKevin Wolf '*auto-read-only': 'bool', 47105a9347c6SFam Zheng '*force-share': 'bool', 47113666a97fSEric Blake '*detect-zeroes': 'BlockdevDetectZeroesOptions' }, 47121ad166b6SBenoît Canet 'discriminator': 'driver', 47131ad166b6SBenoît Canet 'data': { 47141ad166b6SBenoît Canet 'blkdebug': 'BlockdevOptionsBlkdebug', 4715bfcc224eSAapo Vienamo 'blklogwrites':'BlockdevOptionsBlklogwrites', 47161ad166b6SBenoît Canet 'blkverify': 'BlockdevOptionsBlkverify', 471735e32d9eSPavel Dovgalyuk 'blkreplay': 'BlockdevOptionsBlkreplay', 47181ad166b6SBenoît Canet 'bochs': 'BlockdevOptionsGenericFormat', 47191ad166b6SBenoît Canet 'cloop': 'BlockdevOptionsGenericFormat', 4720f41388e0SAndrey Shinkevich 'compress': 'BlockdevOptionsGenericFormat', 4721783b2825SVladimir Sementsov-Ogievskiy 'copy-before-write':'BlockdevOptionsCbw', 4722e4c8fdddSAndrey Shinkevich 'copy-on-read':'BlockdevOptionsCor', 47231ad166b6SBenoît Canet 'dmg': 'BlockdevOptionsGenericFormat', 4724db866be9SFam Zheng 'file': 'BlockdevOptionsFile', 47256b9d62dbSMax Reitz 'ftp': 'BlockdevOptionsCurlFtp', 47266b9d62dbSMax Reitz 'ftps': 'BlockdevOptionsCurlFtps', 47277edac2ddSPrasanna Kumar Kalever 'gluster': 'BlockdevOptionsGluster', 472814176c8dSJoelle van Dyne 'host_cdrom': { 'type': 'BlockdevOptionsFile', 47298a9f1e1dSMarc-André Lureau 'if': 'HAVE_HOST_BLOCK_DEVICE' }, 473014176c8dSJoelle van Dyne 'host_device': { 'type': 'BlockdevOptionsFile', 47318a9f1e1dSMarc-André Lureau 'if': 'HAVE_HOST_BLOCK_DEVICE' }, 47326b9d62dbSMax Reitz 'http': 'BlockdevOptionsCurlHttp', 47336b9d62dbSMax Reitz 'https': 'BlockdevOptionsCurlHttps', 4734fd66dbd4SStefan Hajnoczi 'io_uring': { 'type': 'BlockdevOptionsIoUring', 4735fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' }, 473631eb1202SKevin Wolf 'iscsi': 'BlockdevOptionsIscsi', 473778368575SDaniel P. Berrange 'luks': 'BlockdevOptionsLUKS', 47386b02b1f0SMax Reitz 'nbd': 'BlockdevOptionsNbd', 4739aa2623d8SAshijeet Acharya 'nfs': 'BlockdevOptionsNfs', 4740db866be9SFam Zheng 'null-aio': 'BlockdevOptionsNull', 4741db866be9SFam Zheng 'null-co': 'BlockdevOptionsNull', 4742d87ee3d7SFam Zheng 'nvme': 'BlockdevOptionsNVMe', 4743fd66dbd4SStefan Hajnoczi 'nvme-io_uring': { 'type': 'BlockdevOptionsNvmeIoUring', 4744fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' }, 47451ad166b6SBenoît Canet 'parallels': 'BlockdevOptionsGenericFormat', 474633fa2222SVladimir Sementsov-Ogievskiy 'preallocate':'BlockdevOptionsPreallocate', 47471ad166b6SBenoît Canet 'qcow2': 'BlockdevOptionsQcow2', 4748d85f4222SDaniel P. Berrange 'qcow': 'BlockdevOptionsQcow', 47491ad166b6SBenoît Canet 'qed': 'BlockdevOptionsGenericCOWFormat', 4750db866be9SFam Zheng 'quorum': 'BlockdevOptionsQuorum', 47512fdc7045STomáš Golembiovský 'raw': 'BlockdevOptionsRaw', 47528a47e8ebSJeff Cody 'rbd': 'BlockdevOptionsRbd', 4753335d10cdSMarc-André Lureau 'replication': { 'type': 'BlockdevOptionsReplication', 47548a9f1e1dSMarc-André Lureau 'if': 'CONFIG_REPLICATION' }, 47551c14eaabSVladimir Sementsov-Ogievskiy 'snapshot-access': 'BlockdevOptionsGenericFormat', 4756ad0e90a6SAshijeet Acharya 'ssh': 'BlockdevOptionsSsh', 4757d8e7d87eSManos Pitsidianakis 'throttle': 'BlockdevOptionsThrottle', 47581ad166b6SBenoît Canet 'vdi': 'BlockdevOptionsGenericFormat', 47591ad166b6SBenoît Canet 'vhdx': 'BlockdevOptionsGenericFormat', 476003d9e4c0SAlberto Faria 'virtio-blk-vfio-pci': 476103d9e4c0SAlberto Faria { 'type': 'BlockdevOptionsVirtioBlkVfioPci', 476203d9e4c0SAlberto Faria 'if': 'CONFIG_BLKIO' }, 4763fd66dbd4SStefan Hajnoczi 'virtio-blk-vhost-user': 4764fd66dbd4SStefan Hajnoczi { 'type': 'BlockdevOptionsVirtioBlkVhostUser', 4765fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' }, 4766fd66dbd4SStefan Hajnoczi 'virtio-blk-vhost-vdpa': 4767fd66dbd4SStefan Hajnoczi { 'type': 'BlockdevOptionsVirtioBlkVhostVdpa', 4768fd66dbd4SStefan Hajnoczi 'if': 'CONFIG_BLKIO' }, 47691ad166b6SBenoît Canet 'vmdk': 'BlockdevOptionsGenericCOWFormat', 47701ad166b6SBenoît Canet 'vpc': 'BlockdevOptionsGenericFormat', 4771a0846452SMarc-André Lureau 'vvfat': 'BlockdevOptionsVVFAT' 47721ad166b6SBenoît Canet } } 47731ad166b6SBenoît Canet 47741ad166b6SBenoît Canet## 47755072f7b3SMarc-André Lureau# @BlockdevRef: 47761ad166b6SBenoît Canet# 47771ad166b6SBenoît Canet# Reference to a block device. 47781ad166b6SBenoît Canet# 47791ad166b6SBenoît Canet# @definition: defines a new block device inline 4780a937b6aaSMarkus Armbruster# 4781c42e8742SMarkus Armbruster# @reference: references the ID of an existing block device 47821ad166b6SBenoît Canet# 478379b7a77eSMarkus Armbruster# Since: 2.9 47841ad166b6SBenoît Canet## 4785ab916fadSEric Blake{ 'alternate': 'BlockdevRef', 47861ad166b6SBenoît Canet 'data': { 'definition': 'BlockdevOptions', 47871ad166b6SBenoît Canet 'reference': 'str' } } 47881ad166b6SBenoît Canet 47891ad166b6SBenoît Canet## 4790c42e8742SMarkus Armbruster# @BlockdevRefOrNull: 4791c42e8742SMarkus Armbruster# 4792c42e8742SMarkus Armbruster# Reference to a block device. 4793c42e8742SMarkus Armbruster# 4794c42e8742SMarkus Armbruster# @definition: defines a new block device inline 4795a937b6aaSMarkus Armbruster# 4796a937b6aaSMarkus Armbruster# @reference: references the ID of an existing block device. An empty 4797a937b6aaSMarkus Armbruster# string means that no block device should be referenced. 4798a937b6aaSMarkus Armbruster# Deprecated; use null instead. 4799a937b6aaSMarkus Armbruster# 4800c42e8742SMarkus Armbruster# @null: No block device should be referenced (since 2.10) 4801c42e8742SMarkus Armbruster# 4802c42e8742SMarkus Armbruster# Since: 2.9 4803c42e8742SMarkus Armbruster## 4804c42e8742SMarkus Armbruster{ 'alternate': 'BlockdevRefOrNull', 4805c42e8742SMarkus Armbruster 'data': { 'definition': 'BlockdevOptions', 4806c42e8742SMarkus Armbruster 'reference': 'str', 4807c42e8742SMarkus Armbruster 'null': 'null' } } 4808c42e8742SMarkus Armbruster 4809c42e8742SMarkus Armbruster## 48101ad166b6SBenoît Canet# @blockdev-add: 48111ad166b6SBenoît Canet# 4812e947e9c8SKashyap Chamarthy# Creates a new block device. 48131ad166b6SBenoît Canet# 481479b7a77eSMarkus Armbruster# Since: 2.9 4815b4749948SMarc-André Lureau# 481614b48aaaSJohn Snow# .. qmp-example:: 4817b4749948SMarc-André Lureau# 4818b4749948SMarc-André Lureau# -> { "execute": "blockdev-add", 4819b4749948SMarc-André Lureau# "arguments": { 4820b1660997SJeff Cody# "driver": "qcow2", 4821b1660997SJeff Cody# "node-name": "test1", 482234f58df5SMarkus Armbruster# "file": { 4823b1660997SJeff Cody# "driver": "file", 4824b1660997SJeff Cody# "filename": "test.qcow2" 4825b1660997SJeff Cody# } 4826b1660997SJeff Cody# } 4827b1660997SJeff Cody# } 4828b4749948SMarc-André Lureau# <- { "return": {} } 4829b4749948SMarc-André Lureau# 483014b48aaaSJohn Snow# .. qmp-example:: 483114b48aaaSJohn Snow# 4832b4749948SMarc-André Lureau# -> { "execute": "blockdev-add", 4833b4749948SMarc-André Lureau# "arguments": { 4834b4749948SMarc-André Lureau# "driver": "qcow2", 4835b4749948SMarc-André Lureau# "node-name": "node0", 4836b4749948SMarc-André Lureau# "discard": "unmap", 4837b4749948SMarc-André Lureau# "cache": { 4838b1660997SJeff Cody# "direct": true 4839b4749948SMarc-André Lureau# }, 484034f58df5SMarkus Armbruster# "file": { 4841b4749948SMarc-André Lureau# "driver": "file", 4842b4749948SMarc-André Lureau# "filename": "/tmp/test.qcow2" 4843b4749948SMarc-André Lureau# }, 4844b4749948SMarc-André Lureau# "backing": { 4845b4749948SMarc-André Lureau# "driver": "raw", 4846b4749948SMarc-André Lureau# "file": { 4847b4749948SMarc-André Lureau# "driver": "file", 4848b4749948SMarc-André Lureau# "filename": "/dev/fdset/4" 4849b4749948SMarc-André Lureau# } 4850b4749948SMarc-André Lureau# } 4851b4749948SMarc-André Lureau# } 4852b4749948SMarc-André Lureau# } 4853b4749948SMarc-André Lureau# 4854b4749948SMarc-André Lureau# <- { "return": {} } 48551ad166b6SBenoît Canet## 4856f55ba801SPaolo Bonzini{ 'command': 'blockdev-add', 'data': 'BlockdevOptions', 'boxed': true, 4857f55ba801SPaolo Bonzini 'allow-preconfig': true } 48581ad166b6SBenoît Canet 48597d8a9f71SMax Reitz## 4860e60edf69SAlberto Garcia# @blockdev-reopen: 48611479c730SAlberto Garcia# 48623908b7a8SAlberto Garcia# Reopens one or more block devices using the given set of options. 4863a937b6aaSMarkus Armbruster# Any option not specified will be reset to its default value 4864a937b6aaSMarkus Armbruster# regardless of its previous status. If an option cannot be changed 4865a937b6aaSMarkus Armbruster# or a particular driver does not support reopening then the command 4866a937b6aaSMarkus Armbruster# will return an error. All devices in the list are reopened in one 4867a937b6aaSMarkus Armbruster# transaction, so if one of them fails then the whole transaction is 4868a937b6aaSMarkus Armbruster# cancelled. 48691479c730SAlberto Garcia# 4870a937b6aaSMarkus Armbruster# The command receives a list of block devices to reopen. For each 4871a937b6aaSMarkus Armbruster# one of them, the top-level @node-name option (from BlockdevOptions) 4872a937b6aaSMarkus Armbruster# must be specified and is used to select the block device to be 4873a937b6aaSMarkus Armbruster# reopened. Other @node-name options must be either omitted or set to 4874a937b6aaSMarkus Armbruster# the current name of the appropriate node. This command won't change 4875a937b6aaSMarkus Armbruster# any node name and any attempt to do it will result in an error. 48761479c730SAlberto Garcia# 48771479c730SAlberto Garcia# In the case of options that refer to child nodes, the behavior of 48781479c730SAlberto Garcia# this command depends on the value: 48791479c730SAlberto Garcia# 48801479c730SAlberto Garcia# 1) A set of options (BlockdevOptions): the child is reopened with 48811479c730SAlberto Garcia# the specified set of options. 48821479c730SAlberto Garcia# 48831479c730SAlberto Garcia# 2) A reference to the current child: the child is reopened using 48841479c730SAlberto Garcia# its existing set of options. 48851479c730SAlberto Garcia# 48861479c730SAlberto Garcia# 3) A reference to a different node: the current child is replaced 48871479c730SAlberto Garcia# with the specified one. 48881479c730SAlberto Garcia# 48891479c730SAlberto Garcia# 4) NULL: the current child (if any) is detached. 48901479c730SAlberto Garcia# 48913908b7a8SAlberto Garcia# Options (1) and (2) are supported in all cases. Option (3) is 48923908b7a8SAlberto Garcia# supported for @file and @backing, and option (4) for @backing only. 48931479c730SAlberto Garcia# 48941479c730SAlberto Garcia# Unlike with blockdev-add, the @backing option must always be present 48951479c730SAlberto Garcia# unless the node being reopened does not have a backing file and its 48961479c730SAlberto Garcia# image does not have a default backing file name as part of its 48971479c730SAlberto Garcia# metadata. 48981479c730SAlberto Garcia# 4899e60edf69SAlberto Garcia# Since: 6.1 49001479c730SAlberto Garcia## 4901e60edf69SAlberto Garcia{ 'command': 'blockdev-reopen', 4902f55ba801SPaolo Bonzini 'data': { 'options': ['BlockdevOptions'] }, 4903f55ba801SPaolo Bonzini 'allow-preconfig': true } 49041479c730SAlberto Garcia 49051479c730SAlberto Garcia## 490679b7a77eSMarkus Armbruster# @blockdev-del: 490781b936aeSAlberto Garcia# 4908a937b6aaSMarkus Armbruster# Deletes a block device that has been added using blockdev-add. The 4909a937b6aaSMarkus Armbruster# command will fail if the node is attached to a device or is 49109ec8873eSKevin Wolf# otherwise being used. 491181b936aeSAlberto Garcia# 49127a305384SMarc-André Lureau# @node-name: Name of the graph node to delete. 49137a305384SMarc-André Lureau# 491479b7a77eSMarkus Armbruster# Since: 2.9 4915915a213fSMarc-André Lureau# 491614b48aaaSJohn Snow# .. qmp-example:: 4917915a213fSMarc-André Lureau# 4918915a213fSMarc-André Lureau# -> { "execute": "blockdev-add", 4919915a213fSMarc-André Lureau# "arguments": { 4920915a213fSMarc-André Lureau# "driver": "qcow2", 4921915a213fSMarc-André Lureau# "node-name": "node0", 492234f58df5SMarkus Armbruster# "file": { 4923915a213fSMarc-André Lureau# "driver": "file", 4924915a213fSMarc-André Lureau# "filename": "test.qcow2" 4925915a213fSMarc-André Lureau# } 4926915a213fSMarc-André Lureau# } 4927915a213fSMarc-André Lureau# } 4928915a213fSMarc-André Lureau# <- { "return": {} } 4929915a213fSMarc-André Lureau# 493079b7a77eSMarkus Armbruster# -> { "execute": "blockdev-del", 4931915a213fSMarc-André Lureau# "arguments": { "node-name": "node0" } 4932915a213fSMarc-André Lureau# } 4933915a213fSMarc-André Lureau# <- { "return": {} } 493481b936aeSAlberto Garcia## 4935f55ba801SPaolo Bonzini{ 'command': 'blockdev-del', 'data': { 'node-name': 'str' }, 4936f55ba801SPaolo Bonzini 'allow-preconfig': true } 493781b936aeSAlberto Garcia 493881b936aeSAlberto Garcia## 4939927f11e1SKevin Wolf# @BlockdevCreateOptionsFile: 4940927f11e1SKevin Wolf# 4941927f11e1SKevin Wolf# Driver specific image creation options for file. 4942927f11e1SKevin Wolf# 4943f5627506SPeter Maydell# @filename: Filename for the new image file 4944a937b6aaSMarkus Armbruster# 4945f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 4946a937b6aaSMarkus Armbruster# 4947f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off; 4948a937b6aaSMarkus Armbruster# allowed values: off, falloc (if CONFIG_POSIX_FALLOCATE), full 4949a937b6aaSMarkus Armbruster# (if CONFIG_POSIX)) 4950a937b6aaSMarkus Armbruster# 4951f5627506SPeter Maydell# @nocow: Turn off copy-on-write (valid only on btrfs; default: off) 4952a937b6aaSMarkus Armbruster# 4953a937b6aaSMarkus Armbruster# @extent-size-hint: Extent size hint to add to the image file; 0 for 4954a937b6aaSMarkus Armbruster# not adding an extent size hint (default: 1 MB, since 5.1) 4955927f11e1SKevin Wolf# 4956927f11e1SKevin Wolf# Since: 2.12 4957927f11e1SKevin Wolf## 4958927f11e1SKevin Wolf{ 'struct': 'BlockdevCreateOptionsFile', 4959927f11e1SKevin Wolf 'data': { 'filename': 'str', 4960927f11e1SKevin Wolf 'size': 'size', 4961927f11e1SKevin Wolf '*preallocation': 'PreallocMode', 4962ffa244c8SKevin Wolf '*nocow': 'bool', 4963ffa244c8SKevin Wolf '*extent-size-hint': 'size'} } 4964927f11e1SKevin Wolf 4965927f11e1SKevin Wolf## 4966ab8bda76SKevin Wolf# @BlockdevCreateOptionsGluster: 4967ab8bda76SKevin Wolf# 4968ab8bda76SKevin Wolf# Driver specific image creation options for gluster. 4969ab8bda76SKevin Wolf# 4970f5627506SPeter Maydell# @location: Where to store the new image file 4971a937b6aaSMarkus Armbruster# 4972f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 4973a937b6aaSMarkus Armbruster# 4974f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off; 4975a937b6aaSMarkus Armbruster# allowed values: off, falloc (if CONFIG_GLUSTERFS_FALLOCATE), 49768a9f1e1dSMarc-André Lureau# full (if CONFIG_GLUSTERFS_ZEROFILL)) 4977ab8bda76SKevin Wolf# 4978ab8bda76SKevin Wolf# Since: 2.12 4979ab8bda76SKevin Wolf## 4980ab8bda76SKevin Wolf{ 'struct': 'BlockdevCreateOptionsGluster', 4981ab8bda76SKevin Wolf 'data': { 'location': 'BlockdevOptionsGluster', 4982ab8bda76SKevin Wolf 'size': 'size', 4983ab8bda76SKevin Wolf '*preallocation': 'PreallocMode' } } 4984ab8bda76SKevin Wolf 4985ab8bda76SKevin Wolf## 49861bedcaf1SKevin Wolf# @BlockdevCreateOptionsLUKS: 49871bedcaf1SKevin Wolf# 49881bedcaf1SKevin Wolf# Driver specific image creation options for LUKS. 49891bedcaf1SKevin Wolf# 4990433957bbSHyman Huang# @file: Node to create the image format on, mandatory except when 4991433957bbSHyman Huang# 'preallocation' is not requested 4992a937b6aaSMarkus Armbruster# 4993d0112eb4SHyman Huang# @header: Block device holding a detached LUKS header. (since 9.0) 4994d0112eb4SHyman Huang# 4995f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 4996a937b6aaSMarkus Armbruster# 4997a937b6aaSMarkus Armbruster# @preallocation: Preallocation mode for the new image (since: 4.2) 4998672de729SMaxim Levitsky# (default: off; allowed values: off, metadata, falloc, full) 49991bedcaf1SKevin Wolf# 50001bedcaf1SKevin Wolf# Since: 2.12 50011bedcaf1SKevin Wolf## 50021bedcaf1SKevin Wolf{ 'struct': 'BlockdevCreateOptionsLUKS', 50031bedcaf1SKevin Wolf 'base': 'QCryptoBlockCreateOptionsLUKS', 5004433957bbSHyman Huang 'data': { '*file': 'BlockdevRef', 5005d0112eb4SHyman Huang '*header': 'BlockdevRef', 5006672de729SMaxim Levitsky 'size': 'size', 5007672de729SMaxim Levitsky '*preallocation': 'PreallocMode' } } 50081bedcaf1SKevin Wolf 50091bedcaf1SKevin Wolf## 5010a1a42af4SKevin Wolf# @BlockdevCreateOptionsNfs: 5011a1a42af4SKevin Wolf# 5012a1a42af4SKevin Wolf# Driver specific image creation options for NFS. 5013a1a42af4SKevin Wolf# 5014f5627506SPeter Maydell# @location: Where to store the new image file 5015a937b6aaSMarkus Armbruster# 5016f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5017a1a42af4SKevin Wolf# 5018a1a42af4SKevin Wolf# Since: 2.12 5019a1a42af4SKevin Wolf## 5020a1a42af4SKevin Wolf{ 'struct': 'BlockdevCreateOptionsNfs', 5021a1a42af4SKevin Wolf 'data': { 'location': 'BlockdevOptionsNfs', 5022a1a42af4SKevin Wolf 'size': 'size' } } 5023a1a42af4SKevin Wolf 5024a1a42af4SKevin Wolf## 50251511b490SKevin Wolf# @BlockdevCreateOptionsParallels: 50261511b490SKevin Wolf# 50271511b490SKevin Wolf# Driver specific image creation options for parallels. 50281511b490SKevin Wolf# 5029f5627506SPeter Maydell# @file: Node to create the image format on 5030a937b6aaSMarkus Armbruster# 5031f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5032a937b6aaSMarkus Armbruster# 5033f5627506SPeter Maydell# @cluster-size: Cluster size in bytes (default: 1 MB) 50341511b490SKevin Wolf# 50351511b490SKevin Wolf# Since: 2.12 50361511b490SKevin Wolf## 50371511b490SKevin Wolf{ 'struct': 'BlockdevCreateOptionsParallels', 50381511b490SKevin Wolf 'data': { 'file': 'BlockdevRef', 50391511b490SKevin Wolf 'size': 'size', 50401511b490SKevin Wolf '*cluster-size': 'size' } } 50411511b490SKevin Wolf 50421511b490SKevin Wolf## 504342a3e1abSKevin Wolf# @BlockdevCreateOptionsQcow: 504442a3e1abSKevin Wolf# 504542a3e1abSKevin Wolf# Driver specific image creation options for qcow. 504642a3e1abSKevin Wolf# 5047f5627506SPeter Maydell# @file: Node to create the image format on 5048a937b6aaSMarkus Armbruster# 5049f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5050a937b6aaSMarkus Armbruster# 5051f5627506SPeter Maydell# @backing-file: File name of the backing file if a backing file 505242a3e1abSKevin Wolf# should be used 5053a937b6aaSMarkus Armbruster# 5054f5627506SPeter Maydell# @encrypt: Encryption options if the image should be encrypted 505542a3e1abSKevin Wolf# 505642a3e1abSKevin Wolf# Since: 2.12 505742a3e1abSKevin Wolf## 505842a3e1abSKevin Wolf{ 'struct': 'BlockdevCreateOptionsQcow', 505942a3e1abSKevin Wolf 'data': { 'file': 'BlockdevRef', 506042a3e1abSKevin Wolf 'size': 'size', 506142a3e1abSKevin Wolf '*backing-file': 'str', 506242a3e1abSKevin Wolf '*encrypt': 'QCryptoBlockCreateOptions' } } 506342a3e1abSKevin Wolf 506442a3e1abSKevin Wolf## 5065c2808abaSKevin Wolf# @BlockdevQcow2Version: 5066c2808abaSKevin Wolf# 5067a937b6aaSMarkus Armbruster# @v2: The original QCOW2 format as introduced in qemu 0.10 (version 5068a937b6aaSMarkus Armbruster# 2) 5069a937b6aaSMarkus Armbruster# 5070c2808abaSKevin Wolf# @v3: The extended QCOW2 format as introduced in qemu 1.1 (version 3) 5071c2808abaSKevin Wolf# 5072c2808abaSKevin Wolf# Since: 2.12 5073c2808abaSKevin Wolf## 5074c2808abaSKevin Wolf{ 'enum': 'BlockdevQcow2Version', 5075c2808abaSKevin Wolf 'data': [ 'v2', 'v3' ] } 5076c2808abaSKevin Wolf 5077c2808abaSKevin Wolf## 5078572ad978SDenis Plotnikov# @Qcow2CompressionType: 5079572ad978SDenis Plotnikov# 5080572ad978SDenis Plotnikov# Compression type used in qcow2 image file 5081572ad978SDenis Plotnikov# 5082572ad978SDenis Plotnikov# @zlib: zlib compression, see <http://zlib.net/> 5083a937b6aaSMarkus Armbruster# 5084d298ac10SDenis Plotnikov# @zstd: zstd compression, see <http://github.com/facebook/zstd> 5085572ad978SDenis Plotnikov# 5086572ad978SDenis Plotnikov# Since: 5.1 5087572ad978SDenis Plotnikov## 5088572ad978SDenis Plotnikov{ 'enum': 'Qcow2CompressionType', 50898a9f1e1dSMarc-André Lureau 'data': [ 'zlib', { 'name': 'zstd', 'if': 'CONFIG_ZSTD' } ] } 5090572ad978SDenis Plotnikov 5091572ad978SDenis Plotnikov## 5092c2808abaSKevin Wolf# @BlockdevCreateOptionsQcow2: 5093c2808abaSKevin Wolf# 5094c2808abaSKevin Wolf# Driver specific image creation options for qcow2. 5095c2808abaSKevin Wolf# 5096f5627506SPeter Maydell# @file: Node to create the image format on 5097a937b6aaSMarkus Armbruster# 5098f5627506SPeter Maydell# @data-file: Node to use as an external data file in which all guest 5099a937b6aaSMarkus Armbruster# data is stored so that only metadata remains in the qcow2 file 5100a937b6aaSMarkus Armbruster# (since: 4.0) 5101a937b6aaSMarkus Armbruster# 5102f5627506SPeter Maydell# @data-file-raw: True if the external data file must stay valid as a 51036c3944dcSKevin Wolf# standalone (read-only) raw image without looking at qcow2 51046c3944dcSKevin Wolf# metadata (default: false; since: 4.0) 5105a937b6aaSMarkus Armbruster# 5106826bd069SPeter Maydell# @extended-l2: True to make the image have extended L2 entries 51077be20252SAlberto Garcia# (default: false; since 5.2) 5108a937b6aaSMarkus Armbruster# 5109f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5110a937b6aaSMarkus Armbruster# 5111f5627506SPeter Maydell# @version: Compatibility level (default: v3) 5112a937b6aaSMarkus Armbruster# 5113f5627506SPeter Maydell# @backing-file: File name of the backing file if a backing file 5114c2808abaSKevin Wolf# should be used 5115a937b6aaSMarkus Armbruster# 5116f5627506SPeter Maydell# @backing-fmt: Name of the block driver to use for the backing file 5117a937b6aaSMarkus Armbruster# 5118f5627506SPeter Maydell# @encrypt: Encryption options if the image should be encrypted 5119a937b6aaSMarkus Armbruster# 5120f5627506SPeter Maydell# @cluster-size: qcow2 cluster size in bytes (default: 65536) 5121a937b6aaSMarkus Armbruster# 5122f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off; 512364c7580cSStefano Garzarella# allowed values: off, falloc, full, metadata) 5124a937b6aaSMarkus Armbruster# 5125a937b6aaSMarkus Armbruster# @lazy-refcounts: True if refcounts may be updated lazily 5126a937b6aaSMarkus Armbruster# (default: off) 5127a937b6aaSMarkus Armbruster# 5128f5627506SPeter Maydell# @refcount-bits: Width of reference counts in bits (default: 16) 5129a937b6aaSMarkus Armbruster# 5130572ad978SDenis Plotnikov# @compression-type: The image cluster compression method 5131572ad978SDenis Plotnikov# (default: zlib, since 5.1) 5132c2808abaSKevin Wolf# 5133c2808abaSKevin Wolf# Since: 2.12 5134c2808abaSKevin Wolf## 5135c2808abaSKevin Wolf{ 'struct': 'BlockdevCreateOptionsQcow2', 5136c2808abaSKevin Wolf 'data': { 'file': 'BlockdevRef', 5137dcc98687SKevin Wolf '*data-file': 'BlockdevRef', 51386c3944dcSKevin Wolf '*data-file-raw': 'bool', 51397be20252SAlberto Garcia '*extended-l2': 'bool', 5140c2808abaSKevin Wolf 'size': 'size', 5141c2808abaSKevin Wolf '*version': 'BlockdevQcow2Version', 5142c2808abaSKevin Wolf '*backing-file': 'str', 5143c2808abaSKevin Wolf '*backing-fmt': 'BlockdevDriver', 5144c2808abaSKevin Wolf '*encrypt': 'QCryptoBlockCreateOptions', 5145c2808abaSKevin Wolf '*cluster-size': 'size', 5146c2808abaSKevin Wolf '*preallocation': 'PreallocMode', 5147c2808abaSKevin Wolf '*lazy-refcounts': 'bool', 5148572ad978SDenis Plotnikov '*refcount-bits': 'int', 5149572ad978SDenis Plotnikov '*compression-type':'Qcow2CompressionType' } } 5150c2808abaSKevin Wolf 5151c2808abaSKevin Wolf## 5152959355a4SKevin Wolf# @BlockdevCreateOptionsQed: 5153959355a4SKevin Wolf# 5154959355a4SKevin Wolf# Driver specific image creation options for qed. 5155959355a4SKevin Wolf# 5156f5627506SPeter Maydell# @file: Node to create the image format on 5157a937b6aaSMarkus Armbruster# 5158f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5159a937b6aaSMarkus Armbruster# 5160f5627506SPeter Maydell# @backing-file: File name of the backing file if a backing file 5161959355a4SKevin Wolf# should be used 5162a937b6aaSMarkus Armbruster# 5163f5627506SPeter Maydell# @backing-fmt: Name of the block driver to use for the backing file 5164a937b6aaSMarkus Armbruster# 5165f5627506SPeter Maydell# @cluster-size: Cluster size in bytes (default: 65536) 5166a937b6aaSMarkus Armbruster# 5167f5627506SPeter Maydell# @table-size: L1/L2 table size (in clusters) 5168959355a4SKevin Wolf# 5169959355a4SKevin Wolf# Since: 2.12 5170959355a4SKevin Wolf## 5171959355a4SKevin Wolf{ 'struct': 'BlockdevCreateOptionsQed', 5172959355a4SKevin Wolf 'data': { 'file': 'BlockdevRef', 5173959355a4SKevin Wolf 'size': 'size', 5174959355a4SKevin Wolf '*backing-file': 'str', 5175959355a4SKevin Wolf '*backing-fmt': 'BlockdevDriver', 5176959355a4SKevin Wolf '*cluster-size': 'size', 5177959355a4SKevin Wolf '*table-size': 'int' } } 5178959355a4SKevin Wolf 5179959355a4SKevin Wolf## 51801bebea37SKevin Wolf# @BlockdevCreateOptionsRbd: 51811bebea37SKevin Wolf# 51821bebea37SKevin Wolf# Driver specific image creation options for rbd/Ceph. 51831bebea37SKevin Wolf# 5184f5627506SPeter Maydell# @location: Where to store the new image file. This location cannot 51851bebea37SKevin Wolf# point to a snapshot. 5186a937b6aaSMarkus Armbruster# 5187f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5188a937b6aaSMarkus Armbruster# 5189f5627506SPeter Maydell# @cluster-size: RBD object size 5190a937b6aaSMarkus Armbruster# 519142e4ac9eSOr Ozeri# @encrypt: Image encryption options. (Since 6.1) 51921bebea37SKevin Wolf# 51931bebea37SKevin Wolf# Since: 2.12 51941bebea37SKevin Wolf## 51951bebea37SKevin Wolf{ 'struct': 'BlockdevCreateOptionsRbd', 51961bebea37SKevin Wolf 'data': { 'location': 'BlockdevOptionsRbd', 51971bebea37SKevin Wolf 'size': 'size', 519842e4ac9eSOr Ozeri '*cluster-size' : 'size', 519942e4ac9eSOr Ozeri '*encrypt' : 'RbdEncryptionCreateOptions' } } 52001bebea37SKevin Wolf 52011bebea37SKevin Wolf## 52023015372dSFam Zheng# @BlockdevVmdkSubformat: 52033015372dSFam Zheng# 52043015372dSFam Zheng# Subformat options for VMDK images 52053015372dSFam Zheng# 52063015372dSFam Zheng# @monolithicSparse: Single file image with sparse cluster allocation 52073015372dSFam Zheng# 52083015372dSFam Zheng# @monolithicFlat: Single flat data image and a descriptor file 52093015372dSFam Zheng# 5210a937b6aaSMarkus Armbruster# @twoGbMaxExtentSparse: Data is split into 2GB (per virtual LBA) 5211a937b6aaSMarkus Armbruster# sparse extent files, in addition to a descriptor file 52123015372dSFam Zheng# 5213a937b6aaSMarkus Armbruster# @twoGbMaxExtentFlat: Data is split into 2GB (per virtual LBA) flat 5214a937b6aaSMarkus Armbruster# extent files, in addition to a descriptor file 52153015372dSFam Zheng# 5216a937b6aaSMarkus Armbruster# @streamOptimized: Single file image sparse cluster allocation, 5217a937b6aaSMarkus Armbruster# optimized for streaming over network. 52183015372dSFam Zheng# 52193015372dSFam Zheng# Since: 4.0 52203015372dSFam Zheng## 52213015372dSFam Zheng{ 'enum': 'BlockdevVmdkSubformat', 52223015372dSFam Zheng 'data': [ 'monolithicSparse', 'monolithicFlat', 'twoGbMaxExtentSparse', 52233015372dSFam Zheng 'twoGbMaxExtentFlat', 'streamOptimized'] } 52243015372dSFam Zheng 52253015372dSFam Zheng## 52263015372dSFam Zheng# @BlockdevVmdkAdapterType: 52273015372dSFam Zheng# 52283015372dSFam Zheng# Adapter type info for VMDK images 52293015372dSFam Zheng# 52303015372dSFam Zheng# Since: 4.0 52313015372dSFam Zheng## 52323015372dSFam Zheng{ 'enum': 'BlockdevVmdkAdapterType', 52333015372dSFam Zheng 'data': [ 'ide', 'buslogic', 'lsilogic', 'legacyESX'] } 52343015372dSFam Zheng 52353015372dSFam Zheng## 52363015372dSFam Zheng# @BlockdevCreateOptionsVmdk: 52373015372dSFam Zheng# 52383015372dSFam Zheng# Driver specific image creation options for VMDK. 52393015372dSFam Zheng# 5240f5627506SPeter Maydell# @file: Where to store the new image file. This refers to the image 52413015372dSFam Zheng# file for monolithcSparse and streamOptimized format, or the 52423015372dSFam Zheng# descriptor file for other formats. 5243a937b6aaSMarkus Armbruster# 5244f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5245a937b6aaSMarkus Armbruster# 5246a937b6aaSMarkus Armbruster# @extents: Where to store the data extents. Required for 5247a937b6aaSMarkus Armbruster# monolithcFlat, twoGbMaxExtentSparse and twoGbMaxExtentFlat 5248a937b6aaSMarkus Armbruster# formats. For monolithicFlat, only one entry is required; for 52493015372dSFam Zheng# twoGbMaxExtent* formats, the number of entries required is 525001bed0ffSMarkus Armbruster# calculated as extent_number = virtual_size / 2GB. Providing 525101bed0ffSMarkus Armbruster# more extents than will be used is an error. 5252a937b6aaSMarkus Armbruster# 5253a937b6aaSMarkus Armbruster# @subformat: The subformat of the VMDK image. Default: 5254a937b6aaSMarkus Armbruster# "monolithicSparse". 5255a937b6aaSMarkus Armbruster# 5256a937b6aaSMarkus Armbruster# @backing-file: The path of backing file. Default: no backing file 5257a937b6aaSMarkus Armbruster# is used. 5258a937b6aaSMarkus Armbruster# 5259a937b6aaSMarkus Armbruster# @adapter-type: The adapter type used to fill in the descriptor. 5260a937b6aaSMarkus Armbruster# Default: ide. 5261a937b6aaSMarkus Armbruster# 5262a937b6aaSMarkus Armbruster# @hwversion: Hardware version. The meaningful options are "4" or 5263a937b6aaSMarkus Armbruster# "6". Default: "4". 5264a937b6aaSMarkus Armbruster# 5265a937b6aaSMarkus Armbruster# @toolsversion: VMware guest tools version. Default: "2147483647" 5266a937b6aaSMarkus Armbruster# (Since 6.2) 5267a937b6aaSMarkus Armbruster# 5268a937b6aaSMarkus Armbruster# @zeroed-grain: Whether to enable zeroed-grain feature for sparse 5269a937b6aaSMarkus Armbruster# subformats. Default: false. 52703015372dSFam Zheng# 52713015372dSFam Zheng# Since: 4.0 52723015372dSFam Zheng## 52733015372dSFam Zheng{ 'struct': 'BlockdevCreateOptionsVmdk', 52743015372dSFam Zheng 'data': { 'file': 'BlockdevRef', 52753015372dSFam Zheng 'size': 'size', 52763015372dSFam Zheng '*extents': ['BlockdevRef'], 52773015372dSFam Zheng '*subformat': 'BlockdevVmdkSubformat', 52783015372dSFam Zheng '*backing-file': 'str', 52793015372dSFam Zheng '*adapter-type': 'BlockdevVmdkAdapterType', 52803015372dSFam Zheng '*hwversion': 'str', 5281f3d43dfdSThomas Weißschuh '*toolsversion': 'str', 52823015372dSFam Zheng '*zeroed-grain': 'bool' } } 52833015372dSFam Zheng 52843015372dSFam Zheng## 52854906da7eSKevin Wolf# @BlockdevCreateOptionsSsh: 52864906da7eSKevin Wolf# 52874906da7eSKevin Wolf# Driver specific image creation options for SSH. 52884906da7eSKevin Wolf# 5289f5627506SPeter Maydell# @location: Where to store the new image file 5290a937b6aaSMarkus Armbruster# 5291f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 52924906da7eSKevin Wolf# 52934906da7eSKevin Wolf# Since: 2.12 52944906da7eSKevin Wolf## 52954906da7eSKevin Wolf{ 'struct': 'BlockdevCreateOptionsSsh', 52964906da7eSKevin Wolf 'data': { 'location': 'BlockdevOptionsSsh', 52974906da7eSKevin Wolf 'size': 'size' } } 52984906da7eSKevin Wolf 52994906da7eSKevin Wolf## 530049858b50SMax Reitz# @BlockdevCreateOptionsVdi: 530149858b50SMax Reitz# 530249858b50SMax Reitz# Driver specific image creation options for VDI. 530349858b50SMax Reitz# 5304f5627506SPeter Maydell# @file: Node to create the image format on 5305a937b6aaSMarkus Armbruster# 5306f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5307a937b6aaSMarkus Armbruster# 5308f5627506SPeter Maydell# @preallocation: Preallocation mode for the new image (default: off; 530964c7580cSStefano Garzarella# allowed values: off, metadata) 531049858b50SMax Reitz# 531149858b50SMax Reitz# Since: 2.12 531249858b50SMax Reitz## 531349858b50SMax Reitz{ 'struct': 'BlockdevCreateOptionsVdi', 531449858b50SMax Reitz 'data': { 'file': 'BlockdevRef', 531549858b50SMax Reitz 'size': 'size', 531661fa6487SKevin Wolf '*preallocation': 'PreallocMode' } } 531749858b50SMax Reitz 531849858b50SMax Reitz## 531909b68dabSKevin Wolf# @BlockdevVhdxSubformat: 532009b68dabSKevin Wolf# 532109b68dabSKevin Wolf# @dynamic: Growing image file 5322a937b6aaSMarkus Armbruster# 532309b68dabSKevin Wolf# @fixed: Preallocated fixed-size image file 532409b68dabSKevin Wolf# 532509b68dabSKevin Wolf# Since: 2.12 532609b68dabSKevin Wolf## 532709b68dabSKevin Wolf{ 'enum': 'BlockdevVhdxSubformat', 532809b68dabSKevin Wolf 'data': [ 'dynamic', 'fixed' ] } 532909b68dabSKevin Wolf 533009b68dabSKevin Wolf## 533109b68dabSKevin Wolf# @BlockdevCreateOptionsVhdx: 533209b68dabSKevin Wolf# 533309b68dabSKevin Wolf# Driver specific image creation options for vhdx. 533409b68dabSKevin Wolf# 5335f5627506SPeter Maydell# @file: Node to create the image format on 5336a937b6aaSMarkus Armbruster# 5337f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5338a937b6aaSMarkus Armbruster# 5339a937b6aaSMarkus Armbruster# @log-size: Log size in bytes, must be a multiple of 1 MB (default: 1 5340a937b6aaSMarkus Armbruster# MB) 5341a937b6aaSMarkus Armbruster# 5342f5627506SPeter Maydell# @block-size: Block size in bytes, must be a multiple of 1 MB and not 5343a937b6aaSMarkus Armbruster# larger than 256 MB (default: automatically choose a block size 5344a937b6aaSMarkus Armbruster# depending on the image size) 5345a937b6aaSMarkus Armbruster# 5346f5627506SPeter Maydell# @subformat: vhdx subformat (default: dynamic) 5347a937b6aaSMarkus Armbruster# 53489e272073SMarkus Armbruster# @block-state-zero: Force use of payload blocks of type 'ZERO'. 53499e272073SMarkus Armbruster# Non-standard, but default. Do not set to 'off' when using 53509e272073SMarkus Armbruster# 'qemu-img convert' with subformat=dynamic. 535109b68dabSKevin Wolf# 535209b68dabSKevin Wolf# Since: 2.12 535309b68dabSKevin Wolf## 535409b68dabSKevin Wolf{ 'struct': 'BlockdevCreateOptionsVhdx', 535509b68dabSKevin Wolf 'data': { 'file': 'BlockdevRef', 535609b68dabSKevin Wolf 'size': 'size', 535709b68dabSKevin Wolf '*log-size': 'size', 535809b68dabSKevin Wolf '*block-size': 'size', 535909b68dabSKevin Wolf '*subformat': 'BlockdevVhdxSubformat', 536009b68dabSKevin Wolf '*block-state-zero': 'bool' } } 536109b68dabSKevin Wolf 536209b68dabSKevin Wolf## 5363182c8835SKevin Wolf# @BlockdevVpcSubformat: 5364182c8835SKevin Wolf# 5365182c8835SKevin Wolf# @dynamic: Growing image file 5366a937b6aaSMarkus Armbruster# 5367182c8835SKevin Wolf# @fixed: Preallocated fixed-size image file 5368182c8835SKevin Wolf# 5369182c8835SKevin Wolf# Since: 2.12 5370182c8835SKevin Wolf## 5371182c8835SKevin Wolf{ 'enum': 'BlockdevVpcSubformat', 5372182c8835SKevin Wolf 'data': [ 'dynamic', 'fixed' ] } 5373182c8835SKevin Wolf 5374182c8835SKevin Wolf## 5375182c8835SKevin Wolf# @BlockdevCreateOptionsVpc: 5376182c8835SKevin Wolf# 5377182c8835SKevin Wolf# Driver specific image creation options for vpc (VHD). 5378182c8835SKevin Wolf# 5379f5627506SPeter Maydell# @file: Node to create the image format on 5380a937b6aaSMarkus Armbruster# 5381f5627506SPeter Maydell# @size: Size of the virtual disk in bytes 5382a937b6aaSMarkus Armbruster# 5383f5627506SPeter Maydell# @subformat: vhdx subformat (default: dynamic) 5384a937b6aaSMarkus Armbruster# 5385a937b6aaSMarkus Armbruster# @force-size: Force use of the exact byte size instead of rounding to 5386a937b6aaSMarkus Armbruster# the next size that can be represented in CHS geometry 5387182c8835SKevin Wolf# (default: false) 5388182c8835SKevin Wolf# 5389182c8835SKevin Wolf# Since: 2.12 5390182c8835SKevin Wolf## 5391182c8835SKevin Wolf{ 'struct': 'BlockdevCreateOptionsVpc', 5392182c8835SKevin Wolf 'data': { 'file': 'BlockdevRef', 5393182c8835SKevin Wolf 'size': 'size', 5394182c8835SKevin Wolf '*subformat': 'BlockdevVpcSubformat', 5395182c8835SKevin Wolf '*force-size': 'bool' } } 5396182c8835SKevin Wolf 5397182c8835SKevin Wolf## 539853614689SKevin Wolf# @BlockdevCreateOptions: 539953614689SKevin Wolf# 540053614689SKevin Wolf# Options for creating an image format on a given node. 540153614689SKevin Wolf# 5402f5627506SPeter Maydell# @driver: block driver to create the image format 540353614689SKevin Wolf# 540453614689SKevin Wolf# Since: 2.12 540553614689SKevin Wolf## 540653614689SKevin Wolf{ 'union': 'BlockdevCreateOptions', 540753614689SKevin Wolf 'base': { 540853614689SKevin Wolf 'driver': 'BlockdevDriver' }, 540953614689SKevin Wolf 'discriminator': 'driver', 541053614689SKevin Wolf 'data': { 5411927f11e1SKevin Wolf 'file': 'BlockdevCreateOptionsFile', 5412ab8bda76SKevin Wolf 'gluster': 'BlockdevCreateOptionsGluster', 54131bedcaf1SKevin Wolf 'luks': 'BlockdevCreateOptionsLUKS', 5414a1a42af4SKevin Wolf 'nfs': 'BlockdevCreateOptionsNfs', 54151511b490SKevin Wolf 'parallels': 'BlockdevCreateOptionsParallels', 541642a3e1abSKevin Wolf 'qcow': 'BlockdevCreateOptionsQcow', 5417c2808abaSKevin Wolf 'qcow2': 'BlockdevCreateOptionsQcow2', 5418959355a4SKevin Wolf 'qed': 'BlockdevCreateOptionsQed', 54191bebea37SKevin Wolf 'rbd': 'BlockdevCreateOptionsRbd', 54204906da7eSKevin Wolf 'ssh': 'BlockdevCreateOptionsSsh', 5421e3810574SMax Reitz 'vdi': 'BlockdevCreateOptionsVdi', 542209b68dabSKevin Wolf 'vhdx': 'BlockdevCreateOptionsVhdx', 54233015372dSFam Zheng 'vmdk': 'BlockdevCreateOptionsVmdk', 542429cd0403SAnton Nefedov 'vpc': 'BlockdevCreateOptionsVpc' 542553614689SKevin Wolf } } 542653614689SKevin Wolf 542753614689SKevin Wolf## 54283fb588a0SKevin Wolf# @blockdev-create: 5429b0292b85SKevin Wolf# 5430e5ab4347SKevin Wolf# Starts a job to create an image format on a given node. The job is 5431e5ab4347SKevin Wolf# automatically finalized, but a manual job-dismiss is required. 5432b0292b85SKevin Wolf# 5433e5ab4347SKevin Wolf# @job-id: Identifier for the newly created job. 5434e5ab4347SKevin Wolf# 5435e5ab4347SKevin Wolf# @options: Options for the image creation. 5436e5ab4347SKevin Wolf# 5437e5ab4347SKevin Wolf# Since: 3.0 5438b0292b85SKevin Wolf## 54393fb588a0SKevin Wolf{ 'command': 'blockdev-create', 5440e5ab4347SKevin Wolf 'data': { 'job-id': 'str', 5441f55ba801SPaolo Bonzini 'options': 'BlockdevCreateOptions' }, 5442f55ba801SPaolo Bonzini 'allow-preconfig': true } 5443b0292b85SKevin Wolf 5444b0292b85SKevin Wolf## 544530da9dd8SMaxim Levitsky# @BlockdevAmendOptionsLUKS: 544630da9dd8SMaxim Levitsky# 544730da9dd8SMaxim Levitsky# Driver specific image amend options for LUKS. 544830da9dd8SMaxim Levitsky# 544930da9dd8SMaxim Levitsky# Since: 5.1 545030da9dd8SMaxim Levitsky## 545130da9dd8SMaxim Levitsky{ 'struct': 'BlockdevAmendOptionsLUKS', 545230da9dd8SMaxim Levitsky 'base': 'QCryptoBlockAmendOptionsLUKS', 545330da9dd8SMaxim Levitsky 'data': { } 545430da9dd8SMaxim Levitsky} 545530da9dd8SMaxim Levitsky 545630da9dd8SMaxim Levitsky## 54578ea1613dSMaxim Levitsky# @BlockdevAmendOptionsQcow2: 54588ea1613dSMaxim Levitsky# 5459a937b6aaSMarkus Armbruster# Driver specific image amend options for qcow2. For now, only 5460a937b6aaSMarkus Armbruster# encryption options can be amended 54618ea1613dSMaxim Levitsky# 546291577c47SMarkus Armbruster# @encrypt: Encryption options to be amended 54638ea1613dSMaxim Levitsky# 54648ea1613dSMaxim Levitsky# Since: 5.1 54658ea1613dSMaxim Levitsky## 54668ea1613dSMaxim Levitsky{ 'struct': 'BlockdevAmendOptionsQcow2', 54678ea1613dSMaxim Levitsky 'data': { '*encrypt': 'QCryptoBlockAmendOptions' } } 54688ea1613dSMaxim Levitsky 54698ea1613dSMaxim Levitsky## 5470ced914d0SMaxim Levitsky# @BlockdevAmendOptions: 5471ced914d0SMaxim Levitsky# 5472ced914d0SMaxim Levitsky# Options for amending an image format 5473ced914d0SMaxim Levitsky# 5474ced914d0SMaxim Levitsky# @driver: Block driver of the node to amend. 5475ced914d0SMaxim Levitsky# 5476ced914d0SMaxim Levitsky# Since: 5.1 5477ced914d0SMaxim Levitsky## 5478ced914d0SMaxim Levitsky{ 'union': 'BlockdevAmendOptions', 5479ced914d0SMaxim Levitsky 'base': { 5480ced914d0SMaxim Levitsky 'driver': 'BlockdevDriver' }, 5481ced914d0SMaxim Levitsky 'discriminator': 'driver', 5482ced914d0SMaxim Levitsky 'data': { 54838ea1613dSMaxim Levitsky 'luks': 'BlockdevAmendOptionsLUKS', 54848ea1613dSMaxim Levitsky 'qcow2': 'BlockdevAmendOptionsQcow2' } } 5485ced914d0SMaxim Levitsky 5486ced914d0SMaxim Levitsky## 5487ced914d0SMaxim Levitsky# @x-blockdev-amend: 5488ced914d0SMaxim Levitsky# 5489a937b6aaSMarkus Armbruster# Starts a job to amend format specific options of an existing open 5490a937b6aaSMarkus Armbruster# block device The job is automatically finalized, but a manual 5491a937b6aaSMarkus Armbruster# job-dismiss is required. 5492ced914d0SMaxim Levitsky# 5493ced914d0SMaxim Levitsky# @job-id: Identifier for the newly created job. 5494ced914d0SMaxim Levitsky# 5495ced914d0SMaxim Levitsky# @node-name: Name of the block node to work on 5496ced914d0SMaxim Levitsky# 5497ced914d0SMaxim Levitsky# @options: Options (driver specific) 5498ced914d0SMaxim Levitsky# 5499a937b6aaSMarkus Armbruster# @force: Allow unsafe operations, format specific For luks that 5500a937b6aaSMarkus Armbruster# allows erase of the last active keyslot (permanent loss of 5501a937b6aaSMarkus Armbruster# data), and replacement of an active keyslot (possible loss of 5502a937b6aaSMarkus Armbruster# data if IO error happens) 5503ced914d0SMaxim Levitsky# 55049fb49daaSMarkus Armbruster# Features: 5505a937b6aaSMarkus Armbruster# 55069fb49daaSMarkus Armbruster# @unstable: This command is experimental. 55079fb49daaSMarkus Armbruster# 5508ced914d0SMaxim Levitsky# Since: 5.1 5509ced914d0SMaxim Levitsky## 5510ced914d0SMaxim Levitsky{ 'command': 'x-blockdev-amend', 5511ced914d0SMaxim Levitsky 'data': { 'job-id': 'str', 5512ced914d0SMaxim Levitsky 'node-name': 'str', 5513ced914d0SMaxim Levitsky 'options': 'BlockdevAmendOptions', 55149fb49daaSMarkus Armbruster '*force': 'bool' }, 5515f55ba801SPaolo Bonzini 'features': [ 'unstable' ], 5516f55ba801SPaolo Bonzini 'allow-preconfig': true } 5517ced914d0SMaxim Levitsky 5518ced914d0SMaxim Levitsky## 55195072f7b3SMarc-André Lureau# @BlockErrorAction: 5520a589569fSWenchao Xia# 5521a589569fSWenchao Xia# An enumeration of action that has been taken when a DISK I/O occurs 5522a589569fSWenchao Xia# 5523a589569fSWenchao Xia# @ignore: error has been ignored 5524a589569fSWenchao Xia# 5525a589569fSWenchao Xia# @report: error has been reported to the device 5526a589569fSWenchao Xia# 5527a589569fSWenchao Xia# @stop: error caused VM to be stopped 5528a589569fSWenchao Xia# 5529a589569fSWenchao Xia# Since: 2.1 5530a589569fSWenchao Xia## 5531a589569fSWenchao Xia{ 'enum': 'BlockErrorAction', 5532a589569fSWenchao Xia 'data': [ 'ignore', 'report', 'stop' ] } 55335a2d2cbdSWenchao Xia 55345a2d2cbdSWenchao Xia## 55355072f7b3SMarc-André Lureau# @BLOCK_IMAGE_CORRUPTED: 5536c120f0faSWenchao Xia# 5537370d4ebaSMarc-André Lureau# Emitted when a disk image is being marked corrupt. The image can be 5538370d4ebaSMarc-André Lureau# identified by its device or node name. The 'device' field is always 5539370d4ebaSMarc-André Lureau# present for compatibility reasons, but it can be empty ("") if the 5540370d4ebaSMarc-André Lureau# image does not have a device name associated. 5541c120f0faSWenchao Xia# 5542dc881b44SAlberto Garcia# @device: device name. This is always present for compatibility 5543a937b6aaSMarkus Armbruster# reasons, but it can be empty ("") if the image does not have a 5544a937b6aaSMarkus Armbruster# device name associated. 5545dc881b44SAlberto Garcia# 55461d8bda12SMarkus Armbruster# @node-name: node name (Since: 2.4) 5547c120f0faSWenchao Xia# 5548c120f0faSWenchao Xia# @msg: informative message for human consumption, such as the kind of 5549a937b6aaSMarkus Armbruster# corruption being detected. It should not be parsed by machine 5550a937b6aaSMarkus Armbruster# as it is not guaranteed to be stable 5551c120f0faSWenchao Xia# 55521d8bda12SMarkus Armbruster# @offset: if the corruption resulted from an image access, this is 55530caef8f6SAlberto Garcia# the host's access offset into the image 5554c120f0faSWenchao Xia# 5555a937b6aaSMarkus Armbruster# @size: if the corruption resulted from an image access, this is the 5556a937b6aaSMarkus Armbruster# access size 5557c120f0faSWenchao Xia# 5558a937b6aaSMarkus Armbruster# @fatal: if set, the image is marked corrupt and therefore unusable 5559a937b6aaSMarkus Armbruster# after this event and must be repaired (Since 2.2; before, every 55609bf040b9SMax Reitz# BLOCK_IMAGE_CORRUPTED event was fatal) 55619bf040b9SMax Reitz# 556201bed0ffSMarkus Armbruster# .. note:: If action is "stop", a STOP event will eventually follow 556301bed0ffSMarkus Armbruster# the BLOCK_IO_ERROR event. 556407c9f583SMarc-André Lureau# 556514b48aaaSJohn Snow# .. qmp-example:: 5566370d4ebaSMarc-André Lureau# 5567370d4ebaSMarc-André Lureau# <- { "event": "BLOCK_IMAGE_CORRUPTED", 5568abbf0473SVictor Toso# "data": { "device": "", "node-name": "drive", "fatal": false, 5569abbf0473SVictor Toso# "msg": "L2 table offset 0x2a2a2a00 unaligned (L1 index: 0)" }, 5570abbf0473SVictor Toso# "timestamp": { "seconds": 1648243240, "microseconds": 906060 } } 5571370d4ebaSMarc-André Lureau# 5572c120f0faSWenchao Xia# Since: 1.7 5573c120f0faSWenchao Xia## 5574c120f0faSWenchao Xia{ 'event': 'BLOCK_IMAGE_CORRUPTED', 5575c120f0faSWenchao Xia 'data': { 'device' : 'str', 5576dc881b44SAlberto Garcia '*node-name' : 'str', 5577c120f0faSWenchao Xia 'msg' : 'str', 5578c120f0faSWenchao Xia '*offset' : 'int', 55799bf040b9SMax Reitz '*size' : 'int', 55809bf040b9SMax Reitz 'fatal' : 'bool' } } 5581c120f0faSWenchao Xia 5582c120f0faSWenchao Xia## 55835072f7b3SMarc-André Lureau# @BLOCK_IO_ERROR: 55845a2d2cbdSWenchao Xia# 55855a2d2cbdSWenchao Xia# Emitted when a disk I/O error occurs 55865a2d2cbdSWenchao Xia# 55877452162aSVladimir Sementsov-Ogievskiy# @qom-path: path to the device object in the QOM tree (since 9.2) 55887452162aSVladimir Sementsov-Ogievskiy# 55892bf7e10fSKevin Wolf# @device: device name. This is always present for compatibility 5590a937b6aaSMarkus Armbruster# reasons, but it can be empty ("") if the image does not have a 5591a937b6aaSMarkus Armbruster# device name associated. 55922bf7e10fSKevin Wolf# 5593a937b6aaSMarkus Armbruster# @node-name: node name. Note that errors may be reported for the 5594a937b6aaSMarkus Armbruster# root node that is directly attached to a guest device rather 5595a937b6aaSMarkus Armbruster# than for the node where the error occurred. The node name is 5596a937b6aaSMarkus Armbruster# not present if the drive is empty. (Since: 2.8) 55975a2d2cbdSWenchao Xia# 55985a2d2cbdSWenchao Xia# @operation: I/O operation 55995a2d2cbdSWenchao Xia# 56005a2d2cbdSWenchao Xia# @action: action that has been taken 56015a2d2cbdSWenchao Xia# 5602a937b6aaSMarkus Armbruster# @nospace: true if I/O error was caused due to a no-space condition. 5603a937b6aaSMarkus Armbruster# This key is only present if query-block's io-status is present, 5604a937b6aaSMarkus Armbruster# please see query-block documentation for more information 5605a937b6aaSMarkus Armbruster# (since: 2.2) 5606c7c2ff0cSLuiz Capitulino# 5607a937b6aaSMarkus Armbruster# @reason: human readable string describing the error cause. (This 5608a937b6aaSMarkus Armbruster# field is a debugging aid for humans, it should not be parsed by 5609a937b6aaSMarkus Armbruster# applications) (since: 2.2) 5610624ff573SLuiz Capitulino# 561101bed0ffSMarkus Armbruster# .. note:: If action is "stop", a STOP event will eventually follow 561201bed0ffSMarkus Armbruster# the BLOCK_IO_ERROR event. 56135a2d2cbdSWenchao Xia# 5614*2155d2ddSLeonid Kaplan# .. note:: This event is rate-limited. 5615*2155d2ddSLeonid Kaplan# 56169bc6e893SMarkus Armbruster# Since: 0.13 561707c9f583SMarc-André Lureau# 561814b48aaaSJohn Snow# .. qmp-example:: 561907c9f583SMarc-André Lureau# 562007c9f583SMarc-André Lureau# <- { "event": "BLOCK_IO_ERROR", 56217452162aSVladimir Sementsov-Ogievskiy# "data": { "qom-path": "/machine/unattached/device[0]", 56227452162aSVladimir Sementsov-Ogievskiy# "device": "ide0-hd1", 562307c9f583SMarc-André Lureau# "node-name": "#block212", 562407c9f583SMarc-André Lureau# "operation": "write", 562539e8bb22SVictor Toso# "action": "stop", 562639e8bb22SVictor Toso# "reason": "No space left on device" }, 562707c9f583SMarc-André Lureau# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 56285a2d2cbdSWenchao Xia## 56295a2d2cbdSWenchao Xia{ 'event': 'BLOCK_IO_ERROR', 56307452162aSVladimir Sementsov-Ogievskiy 'data': { 'qom-path': 'str', 'device': 'str', '*node-name': 'str', 5631bfe1a14cSKevin Wolf 'operation': 'IoOperationType', 5632624ff573SLuiz Capitulino 'action': 'BlockErrorAction', '*nospace': 'bool', 5633624ff573SLuiz Capitulino 'reason': 'str' } } 56345a2d2cbdSWenchao Xia 56355a2d2cbdSWenchao Xia## 56365072f7b3SMarc-André Lureau# @BLOCK_JOB_COMPLETED: 5637bcada37bSWenchao Xia# 5638bcada37bSWenchao Xia# Emitted when a block job has completed 5639bcada37bSWenchao Xia# 5640bcada37bSWenchao Xia# @type: job type 5641bcada37bSWenchao Xia# 56426aae5be6SAlberto Garcia# @device: The job identifier. Originally the device name but other 56436aae5be6SAlberto Garcia# values are allowed since QEMU 2.7 5644bcada37bSWenchao Xia# 5645bcada37bSWenchao Xia# @len: maximum progress value 5646bcada37bSWenchao Xia# 5647bcada37bSWenchao Xia# @offset: current progress value. On success this is equal to len. 5648bcada37bSWenchao Xia# On failure this is less than len 5649bcada37bSWenchao Xia# 5650bcada37bSWenchao Xia# @speed: rate limit, bytes per second 5651bcada37bSWenchao Xia# 56521d8bda12SMarkus Armbruster# @error: error message. Only present on failure. This field 5653bcada37bSWenchao Xia# contains a human-readable error message. There are no semantics 5654a937b6aaSMarkus Armbruster# other than that streaming has failed and clients should not try 5655a937b6aaSMarkus Armbruster# to interpret the error string 5656bcada37bSWenchao Xia# 5657bcada37bSWenchao Xia# Since: 1.1 5658e21e65b2SMarc-André Lureau# 565914b48aaaSJohn Snow# .. qmp-example:: 5660e21e65b2SMarc-André Lureau# 5661e21e65b2SMarc-André Lureau# <- { "event": "BLOCK_JOB_COMPLETED", 5662e21e65b2SMarc-André Lureau# "data": { "type": "stream", "device": "virtio-disk0", 5663e21e65b2SMarc-André Lureau# "len": 10737418240, "offset": 10737418240, 5664e21e65b2SMarc-André Lureau# "speed": 0 }, 5665e21e65b2SMarc-André Lureau# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } } 5666bcada37bSWenchao Xia## 5667bcada37bSWenchao Xia{ 'event': 'BLOCK_JOB_COMPLETED', 56688e4c8700SKevin Wolf 'data': { 'type' : 'JobType', 5669bcada37bSWenchao Xia 'device': 'str', 5670bcada37bSWenchao Xia 'len' : 'int', 5671bcada37bSWenchao Xia 'offset': 'int', 5672bcada37bSWenchao Xia 'speed' : 'int', 5673bcada37bSWenchao Xia '*error': 'str' } } 5674bcada37bSWenchao Xia 5675bcada37bSWenchao Xia## 56765072f7b3SMarc-André Lureau# @BLOCK_JOB_CANCELLED: 5677bcada37bSWenchao Xia# 5678bcada37bSWenchao Xia# Emitted when a block job has been cancelled 5679bcada37bSWenchao Xia# 5680bcada37bSWenchao Xia# @type: job type 5681bcada37bSWenchao Xia# 56826aae5be6SAlberto Garcia# @device: The job identifier. Originally the device name but other 56836aae5be6SAlberto Garcia# values are allowed since QEMU 2.7 5684bcada37bSWenchao Xia# 5685bcada37bSWenchao Xia# @len: maximum progress value 5686bcada37bSWenchao Xia# 5687bcada37bSWenchao Xia# @offset: current progress value. On success this is equal to len. 5688bcada37bSWenchao Xia# On failure this is less than len 5689bcada37bSWenchao Xia# 5690bcada37bSWenchao Xia# @speed: rate limit, bytes per second 5691bcada37bSWenchao Xia# 5692bcada37bSWenchao Xia# Since: 1.1 5693e161df39SMarc-André Lureau# 569414b48aaaSJohn Snow# .. qmp-example:: 5695e161df39SMarc-André Lureau# 5696e161df39SMarc-André Lureau# <- { "event": "BLOCK_JOB_CANCELLED", 5697e161df39SMarc-André Lureau# "data": { "type": "stream", "device": "virtio-disk0", 5698e161df39SMarc-André Lureau# "len": 10737418240, "offset": 134217728, 5699e161df39SMarc-André Lureau# "speed": 0 }, 5700e161df39SMarc-André Lureau# "timestamp": { "seconds": 1267061043, "microseconds": 959568 } } 5701bcada37bSWenchao Xia## 5702bcada37bSWenchao Xia{ 'event': 'BLOCK_JOB_CANCELLED', 57038e4c8700SKevin Wolf 'data': { 'type' : 'JobType', 5704bcada37bSWenchao Xia 'device': 'str', 5705bcada37bSWenchao Xia 'len' : 'int', 5706bcada37bSWenchao Xia 'offset': 'int', 5707bcada37bSWenchao Xia 'speed' : 'int' } } 5708bcada37bSWenchao Xia 5709bcada37bSWenchao Xia## 57105072f7b3SMarc-André Lureau# @BLOCK_JOB_ERROR: 57115a2d2cbdSWenchao Xia# 57125a2d2cbdSWenchao Xia# Emitted when a block job encounters an error 57135a2d2cbdSWenchao Xia# 57146aae5be6SAlberto Garcia# @device: The job identifier. Originally the device name but other 57156aae5be6SAlberto Garcia# values are allowed since QEMU 2.7 57165a2d2cbdSWenchao Xia# 57175a2d2cbdSWenchao Xia# @operation: I/O operation 57185a2d2cbdSWenchao Xia# 57195a2d2cbdSWenchao Xia# @action: action that has been taken 57205a2d2cbdSWenchao Xia# 57215a2d2cbdSWenchao Xia# Since: 1.3 5722af0e0910SMarc-André Lureau# 572314b48aaaSJohn Snow# .. qmp-example:: 5724af0e0910SMarc-André Lureau# 5725af0e0910SMarc-André Lureau# <- { "event": "BLOCK_JOB_ERROR", 5726af0e0910SMarc-André Lureau# "data": { "device": "ide0-hd1", 5727af0e0910SMarc-André Lureau# "operation": "write", 5728af0e0910SMarc-André Lureau# "action": "stop" }, 5729af0e0910SMarc-André Lureau# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 57305a2d2cbdSWenchao Xia## 57315a2d2cbdSWenchao Xia{ 'event': 'BLOCK_JOB_ERROR', 57325a2d2cbdSWenchao Xia 'data': { 'device' : 'str', 57335a2d2cbdSWenchao Xia 'operation': 'IoOperationType', 5734823c6863SMarkus Armbruster 'action' : 'BlockErrorAction' } } 5735bcada37bSWenchao Xia 5736bcada37bSWenchao Xia## 57375072f7b3SMarc-André Lureau# @BLOCK_JOB_READY: 5738bcada37bSWenchao Xia# 5739bcada37bSWenchao Xia# Emitted when a block job is ready to complete 5740bcada37bSWenchao Xia# 5741518848a2SMarkus Armbruster# @type: job type 5742518848a2SMarkus Armbruster# 57436aae5be6SAlberto Garcia# @device: The job identifier. Originally the device name but other 57446aae5be6SAlberto Garcia# values are allowed since QEMU 2.7 5745bcada37bSWenchao Xia# 5746518848a2SMarkus Armbruster# @len: maximum progress value 5747518848a2SMarkus Armbruster# 5748518848a2SMarkus Armbruster# @offset: current progress value. On success this is equal to len. 5749518848a2SMarkus Armbruster# On failure this is less than len 5750518848a2SMarkus Armbruster# 5751518848a2SMarkus Armbruster# @speed: rate limit, bytes per second 5752518848a2SMarkus Armbruster# 5753d461c279SJohn Snow# .. note:: The "ready to complete" status is always reset by a 5754d461c279SJohn Snow# @BLOCK_JOB_ERROR event. 5755bcada37bSWenchao Xia# 5756bcada37bSWenchao Xia# Since: 1.3 575711a3dee1SMarc-André Lureau# 575814b48aaaSJohn Snow# .. qmp-example:: 575911a3dee1SMarc-André Lureau# 576011a3dee1SMarc-André Lureau# <- { "event": "BLOCK_JOB_READY", 576111a3dee1SMarc-André Lureau# "data": { "device": "drive0", "type": "mirror", "speed": 0, 5762ccc9ddbcSVictor Toso# "len": 2097152, "offset": 2097152 }, 576311a3dee1SMarc-André Lureau# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 5764bcada37bSWenchao Xia## 5765bcada37bSWenchao Xia{ 'event': 'BLOCK_JOB_READY', 57668e4c8700SKevin Wolf 'data': { 'type' : 'JobType', 5767518848a2SMarkus Armbruster 'device': 'str', 5768518848a2SMarkus Armbruster 'len' : 'int', 5769518848a2SMarkus Armbruster 'offset': 'int', 5770518848a2SMarkus Armbruster 'speed' : 'int' } } 5771ffeaac9bSHu Tao 577249687aceSMarc-André Lureau## 57735f241594SJohn Snow# @BLOCK_JOB_PENDING: 57745f241594SJohn Snow# 5775a937b6aaSMarkus Armbruster# Emitted when a block job is awaiting explicit authorization to 5776a937b6aaSMarkus Armbruster# finalize graph changes via @block-job-finalize. If this job is part 5777a937b6aaSMarkus Armbruster# of a transaction, it will not emit this event until the transaction 5778a937b6aaSMarkus Armbruster# has converged first. 57795f241594SJohn Snow# 57805f241594SJohn Snow# @type: job type 57815f241594SJohn Snow# 57825f241594SJohn Snow# @id: The job identifier. 57835f241594SJohn Snow# 57845f241594SJohn Snow# Since: 2.12 57855f241594SJohn Snow# 578614b48aaaSJohn Snow# .. qmp-example:: 57875f241594SJohn Snow# 57882c29d9b0SVictor Toso# <- { "event": "BLOCK_JOB_PENDING", 57892c29d9b0SVictor Toso# "data": { "type": "mirror", "id": "backup_1" }, 57905f241594SJohn Snow# "timestamp": { "seconds": 1265044230, "microseconds": 450486 } } 57915f241594SJohn Snow## 57925f241594SJohn Snow{ 'event': 'BLOCK_JOB_PENDING', 57938e4c8700SKevin Wolf 'data': { 'type' : 'JobType', 57945f241594SJohn Snow 'id' : 'str' } } 57955f241594SJohn Snow 57965f241594SJohn Snow## 57975072f7b3SMarc-André Lureau# @PreallocMode: 5798ffeaac9bSHu Tao# 5799ffeaac9bSHu Tao# Preallocation mode of QEMU image file 5800ffeaac9bSHu Tao# 5801ffeaac9bSHu Tao# @off: no preallocation 5802a937b6aaSMarkus Armbruster# 5803ffeaac9bSHu Tao# @metadata: preallocate only for metadata 5804a937b6aaSMarkus Armbruster# 5805ffeaac9bSHu Tao# @falloc: like @full preallocation but allocate disk space by 5806fa27c478SMax Reitz# posix_fallocate() rather than writing data. 5807a937b6aaSMarkus Armbruster# 5808fa27c478SMax Reitz# @full: preallocate all data by writing it to the device to ensure 5809fa27c478SMax Reitz# disk space is really available. This data may or may not be 5810a937b6aaSMarkus Armbruster# zero, depending on the image format and storage. @full 5811a937b6aaSMarkus Armbruster# preallocation also sets up metadata correctly. 5812ffeaac9bSHu Tao# 58135072f7b3SMarc-André Lureau# Since: 2.2 5814ffeaac9bSHu Tao## 5815ffeaac9bSHu Tao{ 'enum': 'PreallocMode', 5816ffeaac9bSHu Tao 'data': [ 'off', 'metadata', 'falloc', 'full' ] } 5817e2462113SFrancesco Romani 5818e2462113SFrancesco Romani## 58195072f7b3SMarc-André Lureau# @BLOCK_WRITE_THRESHOLD: 5820e2462113SFrancesco Romani# 5821e2462113SFrancesco Romani# Emitted when writes on block device reaches or exceeds the 5822e2462113SFrancesco Romani# configured write threshold. For thin-provisioned devices, this 5823a937b6aaSMarkus Armbruster# means the device should be extended to avoid pausing for disk 5824a937b6aaSMarkus Armbruster# exhaustion. The event is one shot. Once triggered, it needs to be 5825f85d66f4SEric Blake# re-registered with another block-set-write-threshold command. 5826e2462113SFrancesco Romani# 5827e2462113SFrancesco Romani# @node-name: graph node name on which the threshold was exceeded. 5828e2462113SFrancesco Romani# 5829a937b6aaSMarkus Armbruster# @amount-exceeded: amount of data which exceeded the threshold, in 5830a937b6aaSMarkus Armbruster# bytes. 5831e2462113SFrancesco Romani# 5832e2462113SFrancesco Romani# @write-threshold: last configured threshold, in bytes. 5833e2462113SFrancesco Romani# 5834e2462113SFrancesco Romani# Since: 2.3 5835e2462113SFrancesco Romani## 5836e2462113SFrancesco Romani{ 'event': 'BLOCK_WRITE_THRESHOLD', 5837e2462113SFrancesco Romani 'data': { 'node-name': 'str', 5838e2462113SFrancesco Romani 'amount-exceeded': 'uint64', 5839e2462113SFrancesco Romani 'write-threshold': 'uint64' } } 5840e2462113SFrancesco Romani 5841e2462113SFrancesco Romani## 58425072f7b3SMarc-André Lureau# @block-set-write-threshold: 5843e2462113SFrancesco Romani# 5844e817862bSMarc-André Lureau# Change the write threshold for a block drive. An event will be 5845e817862bSMarc-André Lureau# delivered if a write to this block drive crosses the configured 5846a937b6aaSMarkus Armbruster# threshold. The threshold is an offset, thus must be non-negative. 5847a937b6aaSMarkus Armbruster# Default is no write threshold. Setting the threshold to zero 5848a937b6aaSMarkus Armbruster# disables it. 5849e817862bSMarc-André Lureau# 5850a937b6aaSMarkus Armbruster# This is useful to transparently resize thin-provisioned drives 5851a937b6aaSMarkus Armbruster# without the guest OS noticing. 5852e2462113SFrancesco Romani# 5853e2462113SFrancesco Romani# @node-name: graph node name on which the threshold must be set. 5854e2462113SFrancesco Romani# 5855e2462113SFrancesco Romani# @write-threshold: configured threshold for the block device, bytes. 5856e2462113SFrancesco Romani# Use 0 to disable the threshold. 5857e2462113SFrancesco Romani# 5858e2462113SFrancesco Romani# Since: 2.3 5859e817862bSMarc-André Lureau# 586014b48aaaSJohn Snow# .. qmp-example:: 5861e817862bSMarc-André Lureau# 5862e817862bSMarc-André Lureau# -> { "execute": "block-set-write-threshold", 5863e817862bSMarc-André Lureau# "arguments": { "node-name": "mydev", 5864e817862bSMarc-André Lureau# "write-threshold": 17179869184 } } 5865e817862bSMarc-André Lureau# <- { "return": {} } 5866e2462113SFrancesco Romani## 5867e2462113SFrancesco Romani{ 'command': 'block-set-write-threshold', 5868f55ba801SPaolo Bonzini 'data': { 'node-name': 'str', 'write-threshold': 'uint64' }, 5869f55ba801SPaolo Bonzini 'allow-preconfig': true } 58707f821597SWen Congyang 58717f821597SWen Congyang## 58725072f7b3SMarc-André Lureau# @x-blockdev-change: 58737f821597SWen Congyang# 5874a937b6aaSMarkus Armbruster# Dynamically reconfigure the block driver state graph. It can be 5875a937b6aaSMarkus Armbruster# used to add, remove, insert or replace a graph node. Currently only 5876a937b6aaSMarkus Armbruster# the Quorum driver implements this feature to add or remove its 5877a937b6aaSMarkus Armbruster# child. This is useful to fix a broken quorum child. 58787f821597SWen Congyang# 58797f821597SWen Congyang# If @node is specified, it will be inserted under @parent. @child 58807f821597SWen Congyang# may not be specified in this case. If both @parent and @child are 58817f821597SWen Congyang# specified but @node is not, @child will be detached from @parent. 58827f821597SWen Congyang# 58837f821597SWen Congyang# @parent: the id or name of the parent node. 58847f821597SWen Congyang# 58851d8bda12SMarkus Armbruster# @child: the name of a child under the given parent node. 58867f821597SWen Congyang# 58871d8bda12SMarkus Armbruster# @node: the name of the node that will be added. 58887f821597SWen Congyang# 58899fb49daaSMarkus Armbruster# Features: 5890a937b6aaSMarkus Armbruster# 5891a937b6aaSMarkus Armbruster# @unstable: This command is experimental, and its API is not stable. 5892a937b6aaSMarkus Armbruster# It does not support all kinds of operations, all kinds of 58939fb49daaSMarkus Armbruster# children, nor all block drivers. 58947f821597SWen Congyang# 58959fb49daaSMarkus Armbruster# FIXME Removing children from a quorum node means introducing 58969fb49daaSMarkus Armbruster# gaps in the child indices. This cannot be represented in the 58979fb49daaSMarkus Armbruster# 'children' list of BlockdevOptionsQuorum, as returned by 58989fb49daaSMarkus Armbruster# .bdrv_refresh_filename(). 58996b4738ceSKevin Wolf# 5900a937b6aaSMarkus Armbruster# Warning: The data in a new quorum child MUST be consistent with 5901a937b6aaSMarkus Armbruster# that of the rest of the array. 59027f821597SWen Congyang# 59037f821597SWen Congyang# Since: 2.7 5904bd77ea2eSMarc-André Lureau# 5905a9eab6e2SJohn Snow# .. qmp-example:: 5906a9eab6e2SJohn Snow# :title: Add a new node to a quorum 5907a937b6aaSMarkus Armbruster# 5908bd77ea2eSMarc-André Lureau# -> { "execute": "blockdev-add", 5909bd77ea2eSMarc-André Lureau# "arguments": { 5910244d04dbSEric Blake# "driver": "raw", 5911bd77ea2eSMarc-André Lureau# "node-name": "new_node", 5912bd77ea2eSMarc-André Lureau# "file": { "driver": "file", 5913244d04dbSEric Blake# "filename": "test.raw" } } } 5914bd77ea2eSMarc-André Lureau# <- { "return": {} } 5915bd77ea2eSMarc-André Lureau# -> { "execute": "x-blockdev-change", 5916bd77ea2eSMarc-André Lureau# "arguments": { "parent": "disk1", 5917bd77ea2eSMarc-André Lureau# "node": "new_node" } } 5918bd77ea2eSMarc-André Lureau# <- { "return": {} } 5919bd77ea2eSMarc-André Lureau# 5920a9eab6e2SJohn Snow# .. qmp-example:: 5921a9eab6e2SJohn Snow# :title: Delete a quorum's node 5922a937b6aaSMarkus Armbruster# 5923bd77ea2eSMarc-André Lureau# -> { "execute": "x-blockdev-change", 5924bd77ea2eSMarc-André Lureau# "arguments": { "parent": "disk1", 5925bd77ea2eSMarc-André Lureau# "child": "children.1" } } 5926bd77ea2eSMarc-André Lureau# <- { "return": {} } 59277f821597SWen Congyang## 59287f821597SWen Congyang{ 'command': 'x-blockdev-change', 59297f821597SWen Congyang 'data' : { 'parent': 'str', 59307f821597SWen Congyang '*child': 'str', 59319fb49daaSMarkus Armbruster '*node': 'str' }, 5932f55ba801SPaolo Bonzini 'features': [ 'unstable' ], 5933f55ba801SPaolo Bonzini 'allow-preconfig': true } 5934ca00bbb1SStefan Hajnoczi 5935ca00bbb1SStefan Hajnoczi## 5936ca00bbb1SStefan Hajnoczi# @x-blockdev-set-iothread: 5937ca00bbb1SStefan Hajnoczi# 5938a937b6aaSMarkus Armbruster# Move @node and its children into the @iothread. If @iothread is 5939a937b6aaSMarkus Armbruster# null then move @node and its children into the main loop. 5940ca00bbb1SStefan Hajnoczi# 5941ca00bbb1SStefan Hajnoczi# The node must not be attached to a BlockBackend. 5942ca00bbb1SStefan Hajnoczi# 5943ca00bbb1SStefan Hajnoczi# @node-name: the name of the block driver node 5944ca00bbb1SStefan Hajnoczi# 5945ca00bbb1SStefan Hajnoczi# @iothread: the name of the IOThread object or null for the main loop 5946ca00bbb1SStefan Hajnoczi# 5947a937b6aaSMarkus Armbruster# @force: true if the node and its children should be moved when a 5948a937b6aaSMarkus Armbruster# BlockBackend is already attached 5949882e9b89SStefan Hajnoczi# 59509fb49daaSMarkus Armbruster# Features: 5951a937b6aaSMarkus Armbruster# 5952a937b6aaSMarkus Armbruster# @unstable: This command is experimental and intended for test cases 5953a937b6aaSMarkus Armbruster# that need control over IOThreads only. 5954ca00bbb1SStefan Hajnoczi# 5955ca00bbb1SStefan Hajnoczi# Since: 2.12 5956ca00bbb1SStefan Hajnoczi# 5957a9eab6e2SJohn Snow# .. qmp-example:: 5958a9eab6e2SJohn Snow# :title: Move a node into an IOThread 5959a937b6aaSMarkus Armbruster# 5960ca00bbb1SStefan Hajnoczi# -> { "execute": "x-blockdev-set-iothread", 5961ca00bbb1SStefan Hajnoczi# "arguments": { "node-name": "disk1", 5962ca00bbb1SStefan Hajnoczi# "iothread": "iothread0" } } 5963ca00bbb1SStefan Hajnoczi# <- { "return": {} } 5964ca00bbb1SStefan Hajnoczi# 5965a9eab6e2SJohn Snow# .. qmp-example:: 5966a9eab6e2SJohn Snow# :title: Move a node into the main loop 5967a937b6aaSMarkus Armbruster# 5968ca00bbb1SStefan Hajnoczi# -> { "execute": "x-blockdev-set-iothread", 5969ca00bbb1SStefan Hajnoczi# "arguments": { "node-name": "disk1", 5970ca00bbb1SStefan Hajnoczi# "iothread": null } } 5971ca00bbb1SStefan Hajnoczi# <- { "return": {} } 5972ca00bbb1SStefan Hajnoczi## 5973ca00bbb1SStefan Hajnoczi{ 'command': 'x-blockdev-set-iothread', 5974ca00bbb1SStefan Hajnoczi 'data' : { 'node-name': 'str', 5975882e9b89SStefan Hajnoczi 'iothread': 'StrOrNull', 59769fb49daaSMarkus Armbruster '*force': 'bool' }, 5977f55ba801SPaolo Bonzini 'features': [ 'unstable' ], 5978f55ba801SPaolo Bonzini 'allow-preconfig': true } 5979b3cf1ec0SKevin Wolf 5980b3cf1ec0SKevin Wolf## 5981b3cf1ec0SKevin Wolf# @QuorumOpType: 5982b3cf1ec0SKevin Wolf# 5983b3cf1ec0SKevin Wolf# An enumeration of the quorum operation types 5984b3cf1ec0SKevin Wolf# 5985b3cf1ec0SKevin Wolf# @read: read operation 5986b3cf1ec0SKevin Wolf# 5987b3cf1ec0SKevin Wolf# @write: write operation 5988b3cf1ec0SKevin Wolf# 5989b3cf1ec0SKevin Wolf# @flush: flush operation 5990b3cf1ec0SKevin Wolf# 5991b3cf1ec0SKevin Wolf# Since: 2.6 5992b3cf1ec0SKevin Wolf## 5993b3cf1ec0SKevin Wolf{ 'enum': 'QuorumOpType', 5994b3cf1ec0SKevin Wolf 'data': [ 'read', 'write', 'flush' ] } 5995b3cf1ec0SKevin Wolf 5996b3cf1ec0SKevin Wolf## 5997b3cf1ec0SKevin Wolf# @QUORUM_FAILURE: 5998b3cf1ec0SKevin Wolf# 5999b3cf1ec0SKevin Wolf# Emitted by the Quorum block driver if it fails to establish a quorum 6000b3cf1ec0SKevin Wolf# 6001b3cf1ec0SKevin Wolf# @reference: device name if defined else node name 6002b3cf1ec0SKevin Wolf# 6003b3cf1ec0SKevin Wolf# @sector-num: number of the first sector of the failed read operation 6004b3cf1ec0SKevin Wolf# 6005b3cf1ec0SKevin Wolf# @sectors-count: failed read operation sector count 6006b3cf1ec0SKevin Wolf# 6007d461c279SJohn Snow# .. note:: This event is rate-limited. 6008b3cf1ec0SKevin Wolf# 6009b3cf1ec0SKevin Wolf# Since: 2.0 6010b3cf1ec0SKevin Wolf# 601114b48aaaSJohn Snow# .. qmp-example:: 6012b3cf1ec0SKevin Wolf# 6013b3cf1ec0SKevin Wolf# <- { "event": "QUORUM_FAILURE", 6014b3cf1ec0SKevin Wolf# "data": { "reference": "usr1", "sector-num": 345435, "sectors-count": 5 }, 6015b3cf1ec0SKevin Wolf# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } } 6016b3cf1ec0SKevin Wolf## 6017b3cf1ec0SKevin Wolf{ 'event': 'QUORUM_FAILURE', 6018b3cf1ec0SKevin Wolf 'data': { 'reference': 'str', 'sector-num': 'int', 'sectors-count': 'int' } } 6019b3cf1ec0SKevin Wolf 6020b3cf1ec0SKevin Wolf## 6021b3cf1ec0SKevin Wolf# @QUORUM_REPORT_BAD: 6022b3cf1ec0SKevin Wolf# 6023b3cf1ec0SKevin Wolf# Emitted to report a corruption of a Quorum file 6024b3cf1ec0SKevin Wolf# 6025b3cf1ec0SKevin Wolf# @type: quorum operation type (Since 2.6) 6026b3cf1ec0SKevin Wolf# 6027b3cf1ec0SKevin Wolf# @error: error message. Only present on failure. This field 6028a937b6aaSMarkus Armbruster# contains a human-readable error message. There are no semantics 6029a937b6aaSMarkus Armbruster# other than that the block layer reported an error and clients 6030a937b6aaSMarkus Armbruster# should not try to interpret the error string. 6031b3cf1ec0SKevin Wolf# 6032b3cf1ec0SKevin Wolf# @node-name: the graph node name of the block driver state 6033b3cf1ec0SKevin Wolf# 6034b3cf1ec0SKevin Wolf# @sector-num: number of the first sector of the failed read operation 6035b3cf1ec0SKevin Wolf# 6036b3cf1ec0SKevin Wolf# @sectors-count: failed read operation sector count 6037b3cf1ec0SKevin Wolf# 6038d461c279SJohn Snow# .. note:: This event is rate-limited. 6039b3cf1ec0SKevin Wolf# 6040b3cf1ec0SKevin Wolf# Since: 2.0 6041b3cf1ec0SKevin Wolf# 6042a9eab6e2SJohn Snow# .. qmp-example:: 6043a9eab6e2SJohn Snow# :title: Read operation 6044b3cf1ec0SKevin Wolf# 604537fa48a4SMarkus Armbruster# <- { "event": "QUORUM_REPORT_BAD", 6046b3cf1ec0SKevin Wolf# "data": { "node-name": "node0", "sector-num": 345435, "sectors-count": 5, 6047b3cf1ec0SKevin Wolf# "type": "read" }, 6048b3cf1ec0SKevin Wolf# "timestamp": { "seconds": 1344522075, "microseconds": 745528 } } 6049b3cf1ec0SKevin Wolf# 6050a9eab6e2SJohn Snow# .. qmp-example:: 6051a9eab6e2SJohn Snow# :title: Flush operation 6052b3cf1ec0SKevin Wolf# 605337fa48a4SMarkus Armbruster# <- { "event": "QUORUM_REPORT_BAD", 6054b3cf1ec0SKevin Wolf# "data": { "node-name": "node0", "sector-num": 0, "sectors-count": 2097120, 6055b3cf1ec0SKevin Wolf# "type": "flush", "error": "Broken pipe" }, 6056b3cf1ec0SKevin Wolf# "timestamp": { "seconds": 1456406829, "microseconds": 291763 } } 6057b3cf1ec0SKevin Wolf## 6058b3cf1ec0SKevin Wolf{ 'event': 'QUORUM_REPORT_BAD', 6059b3cf1ec0SKevin Wolf 'data': { 'type': 'QuorumOpType', '*error': 'str', 'node-name': 'str', 6060b3cf1ec0SKevin Wolf 'sector-num': 'int', 'sectors-count': 'int' } } 6061b3cf1ec0SKevin Wolf 6062b3cf1ec0SKevin Wolf## 6063b3cf1ec0SKevin Wolf# @BlockdevSnapshotInternal: 6064b3cf1ec0SKevin Wolf# 6065a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node to generate the 6066a937b6aaSMarkus Armbruster# snapshot from 6067b3cf1ec0SKevin Wolf# 6068b3cf1ec0SKevin Wolf# @name: the name of the internal snapshot to be created 6069b3cf1ec0SKevin Wolf# 6070b3cf1ec0SKevin Wolf# Since: 1.7 6071b3cf1ec0SKevin Wolf## 6072b3cf1ec0SKevin Wolf{ 'struct': 'BlockdevSnapshotInternal', 6073b3cf1ec0SKevin Wolf 'data': { 'device': 'str', 'name': 'str' } } 6074b3cf1ec0SKevin Wolf 6075b3cf1ec0SKevin Wolf## 6076b3cf1ec0SKevin Wolf# @blockdev-snapshot-internal-sync: 6077b3cf1ec0SKevin Wolf# 6078b3cf1ec0SKevin Wolf# Synchronously take an internal snapshot of a block device, when the 6079b3cf1ec0SKevin Wolf# format of the image used supports it. If the name is an empty 6080b3cf1ec0SKevin Wolf# string, or a snapshot with name already exists, the operation will 6081b3cf1ec0SKevin Wolf# fail. 6082b3cf1ec0SKevin Wolf# 60832746f060SMarkus Armbruster# Errors: 6084b3cf1ec0SKevin Wolf# - If @device is not a valid block device, GenericError 6085b3cf1ec0SKevin Wolf# - If any snapshot matching @name exists, or @name is empty, 6086b3cf1ec0SKevin Wolf# GenericError 6087b3cf1ec0SKevin Wolf# - If the format of the image used does not support it, 608871568864SMarkus Armbruster# GenericError 6089b3cf1ec0SKevin Wolf# 6090f0e0c463SMarkus Armbruster# .. note:: Only some image formats such as qcow2 and rbd support 6091f0e0c463SMarkus Armbruster# internal snapshots. 6092f0e0c463SMarkus Armbruster# 6093b3cf1ec0SKevin Wolf# Since: 1.7 6094b3cf1ec0SKevin Wolf# 609514b48aaaSJohn Snow# .. qmp-example:: 6096b3cf1ec0SKevin Wolf# 6097b3cf1ec0SKevin Wolf# -> { "execute": "blockdev-snapshot-internal-sync", 6098b3cf1ec0SKevin Wolf# "arguments": { "device": "ide-hd0", 6099b3cf1ec0SKevin Wolf# "name": "snapshot0" } 6100b3cf1ec0SKevin Wolf# } 6101b3cf1ec0SKevin Wolf# <- { "return": {} } 6102b3cf1ec0SKevin Wolf## 6103b3cf1ec0SKevin Wolf{ 'command': 'blockdev-snapshot-internal-sync', 6104f55ba801SPaolo Bonzini 'data': 'BlockdevSnapshotInternal', 6105f55ba801SPaolo Bonzini 'allow-preconfig': true } 6106b3cf1ec0SKevin Wolf 6107b3cf1ec0SKevin Wolf## 6108b3cf1ec0SKevin Wolf# @blockdev-snapshot-delete-internal-sync: 6109b3cf1ec0SKevin Wolf# 6110a937b6aaSMarkus Armbruster# Synchronously delete an internal snapshot of a block device, when 6111a937b6aaSMarkus Armbruster# the format of the image used support it. The snapshot is identified 6112a937b6aaSMarkus Armbruster# by name or id or both. One of the name or id is required. Return 6113a937b6aaSMarkus Armbruster# SnapshotInfo for the successfully deleted snapshot. 6114b3cf1ec0SKevin Wolf# 6115a937b6aaSMarkus Armbruster# @device: the device name or node-name of a root node to delete the 6116a937b6aaSMarkus Armbruster# snapshot from 6117b3cf1ec0SKevin Wolf# 6118b3cf1ec0SKevin Wolf# @id: optional the snapshot's ID to be deleted 6119b3cf1ec0SKevin Wolf# 6120b3cf1ec0SKevin Wolf# @name: optional the snapshot's name to be deleted 6121b3cf1ec0SKevin Wolf# 6122a937b6aaSMarkus Armbruster# Returns: 6123e2c1dcbcSMarkus Armbruster# SnapshotInfo 61242746f060SMarkus Armbruster# 61252746f060SMarkus Armbruster# Errors: 6126b3cf1ec0SKevin Wolf# - If @device is not a valid block device, GenericError 6127b3cf1ec0SKevin Wolf# - If snapshot not found, GenericError 6128b3cf1ec0SKevin Wolf# - If the format of the image used does not support it, 612971568864SMarkus Armbruster# GenericError 6130b3cf1ec0SKevin Wolf# - If @id and @name are both not specified, GenericError 6131b3cf1ec0SKevin Wolf# 6132b3cf1ec0SKevin Wolf# Since: 1.7 6133b3cf1ec0SKevin Wolf# 613414b48aaaSJohn Snow# .. qmp-example:: 6135b3cf1ec0SKevin Wolf# 6136b3cf1ec0SKevin Wolf# -> { "execute": "blockdev-snapshot-delete-internal-sync", 6137b3cf1ec0SKevin Wolf# "arguments": { "device": "ide-hd0", 6138b3cf1ec0SKevin Wolf# "name": "snapshot0" } 6139b3cf1ec0SKevin Wolf# } 6140b3cf1ec0SKevin Wolf# <- { "return": { 6141b3cf1ec0SKevin Wolf# "id": "1", 6142b3cf1ec0SKevin Wolf# "name": "snapshot0", 6143b3cf1ec0SKevin Wolf# "vm-state-size": 0, 6144b3cf1ec0SKevin Wolf# "date-sec": 1000012, 6145b3cf1ec0SKevin Wolf# "date-nsec": 10, 6146b3cf1ec0SKevin Wolf# "vm-clock-sec": 100, 6147b39847a5SPavel Dovgalyuk# "vm-clock-nsec": 20, 6148b39847a5SPavel Dovgalyuk# "icount": 220414 6149b3cf1ec0SKevin Wolf# } 6150b3cf1ec0SKevin Wolf# } 6151b3cf1ec0SKevin Wolf## 6152b3cf1ec0SKevin Wolf{ 'command': 'blockdev-snapshot-delete-internal-sync', 6153b3cf1ec0SKevin Wolf 'data': { 'device': 'str', '*id': 'str', '*name': 'str'}, 6154f55ba801SPaolo Bonzini 'returns': 'SnapshotInfo', 6155f55ba801SPaolo Bonzini 'allow-preconfig': true } 6156456e7517SHanna Reitz 6157456e7517SHanna Reitz## 6158456e7517SHanna Reitz# @DummyBlockCoreForceArrays: 6159456e7517SHanna Reitz# 6160c04d0ab0SHanna Reitz# Not used by QMP; hack to let us use BlockGraphInfoList internally 6161456e7517SHanna Reitz# 6162456e7517SHanna Reitz# Since: 8.0 6163456e7517SHanna Reitz## 6164456e7517SHanna Reitz{ 'struct': 'DummyBlockCoreForceArrays', 6165c04d0ab0SHanna Reitz 'data': { 'unused-block-graph-info': ['BlockGraphInfo'] } } 6166