1--- Preparing image & VM --- 2 3--- 1st Boot (Establish Baseline Image) --- 4 5 6--- Adding bitmaps Small, Medium, Large, and Transient --- 7 8{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 32768, "name": "Small", "node": "drive0", "persistent": true}} 9{"return": {}} 10{"execute": "block-dirty-bitmap-add", "arguments": {"name": "Medium", "node": "drive0", "persistent": true}} 11{"return": {}} 12{"execute": "block-dirty-bitmap-add", "arguments": {"granularity": 131072, "name": "Large", "node": "drive0", "persistent": true}} 13{"return": {}} 14{"execute": "block-dirty-bitmap-add", "arguments": {"name": "Transient", "node": "drive0", "persistent": false}} 15{"return": {}} 16--- Forcing flush of bitmaps to disk --- 17 18{ 19 "bitmaps": { 20 "drive0": [ 21 { 22 "busy": false, 23 "count": 0, 24 "granularity": 65536, 25 "name": "Transient", 26 "persistent": false, 27 "recording": true 28 }, 29 { 30 "busy": false, 31 "count": 0, 32 "granularity": 131072, 33 "name": "Large", 34 "persistent": true, 35 "recording": true 36 }, 37 { 38 "busy": false, 39 "count": 0, 40 "granularity": 65536, 41 "name": "Medium", 42 "persistent": true, 43 "recording": true 44 }, 45 { 46 "busy": false, 47 "count": 0, 48 "granularity": 32768, 49 "name": "Small", 50 "persistent": true, 51 "recording": true 52 } 53 ] 54 } 55} 56--- 2nd Boot (Grow Image) --- 57 58{ 59 "bitmaps": { 60 "drive0": [ 61 { 62 "busy": false, 63 "count": 0, 64 "granularity": 32768, 65 "name": "Small", 66 "persistent": true, 67 "recording": true 68 }, 69 { 70 "busy": false, 71 "count": 0, 72 "granularity": 65536, 73 "name": "Medium", 74 "persistent": true, 75 "recording": true 76 }, 77 { 78 "busy": false, 79 "count": 0, 80 "granularity": 131072, 81 "name": "Large", 82 "persistent": true, 83 "recording": true 84 } 85 ] 86 } 87} 88--- Adding new bitmap, growing image, and adding 2nd new bitmap --- 89{"execute": "block-dirty-bitmap-add", "arguments": {"name": "New", "node": "drive0", "persistent": true}} 90{"return": {}} 91{"execute": "human-monitor-command", "arguments": {"command-line": "block_resize drive0 70G"}} 92{"return": ""} 93{"execute": "block-dirty-bitmap-add", "arguments": {"name": "Newtwo", "node": "drive0", "persistent": true}} 94{"return": {}} 95{ 96 "bitmaps": { 97 "drive0": [ 98 { 99 "busy": false, 100 "count": 0, 101 "granularity": 65536, 102 "name": "Newtwo", 103 "persistent": true, 104 "recording": true 105 }, 106 { 107 "busy": false, 108 "count": 0, 109 "granularity": 65536, 110 "name": "New", 111 "persistent": true, 112 "recording": true 113 }, 114 { 115 "busy": false, 116 "count": 0, 117 "granularity": 32768, 118 "name": "Small", 119 "persistent": true, 120 "recording": true 121 }, 122 { 123 "busy": false, 124 "count": 0, 125 "granularity": 65536, 126 "name": "Medium", 127 "persistent": true, 128 "recording": true 129 }, 130 { 131 "busy": false, 132 "count": 0, 133 "granularity": 131072, 134 "name": "Large", 135 "persistent": true, 136 "recording": true 137 } 138 ] 139 } 140} 141--- Forcing flush of bitmaps to disk --- 142 143--- 3rd Boot (Shrink Image) --- 144 145{ 146 "bitmaps": { 147 "drive0": [ 148 { 149 "busy": false, 150 "count": 0, 151 "granularity": 65536, 152 "name": "New", 153 "persistent": true, 154 "recording": true 155 }, 156 { 157 "busy": false, 158 "count": 0, 159 "granularity": 65536, 160 "name": "Newtwo", 161 "persistent": true, 162 "recording": true 163 }, 164 { 165 "busy": false, 166 "count": 0, 167 "granularity": 32768, 168 "name": "Small", 169 "persistent": true, 170 "recording": true 171 }, 172 { 173 "busy": false, 174 "count": 0, 175 "granularity": 65536, 176 "name": "Medium", 177 "persistent": true, 178 "recording": true 179 }, 180 { 181 "busy": false, 182 "count": 0, 183 "granularity": 131072, 184 "name": "Large", 185 "persistent": true, 186 "recording": true 187 } 188 ] 189 } 190} 191--- Adding "NewB" bitmap, removing "New" bitmap --- 192{"execute": "block-dirty-bitmap-add", "arguments": {"name": "NewB", "node": "drive0", "persistent": true}} 193{"return": {}} 194{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "New", "node": "drive0"}} 195{"return": {}} 196--- Truncating image --- 197 198{"execute": "human-monitor-command", "arguments": {"command-line": "block_resize drive0 50G"}} 199{"return": ""} 200--- Adding "NewC" bitmap, removing "NewTwo" bitmap --- 201{"execute": "block-dirty-bitmap-add", "arguments": {"name": "NewC", "node": "drive0", "persistent": true}} 202{"return": {}} 203{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "Newtwo", "node": "drive0"}} 204{"return": {}} 205--- Forcing flush of bitmaps to disk --- 206 207--- 4th Boot (Verification and Cleanup) --- 208 209{ 210 "bitmaps": { 211 "drive0": [ 212 { 213 "busy": false, 214 "count": 0, 215 "granularity": 65536, 216 "name": "NewB", 217 "persistent": true, 218 "recording": true 219 }, 220 { 221 "busy": false, 222 "count": 0, 223 "granularity": 65536, 224 "name": "NewC", 225 "persistent": true, 226 "recording": true 227 }, 228 { 229 "busy": false, 230 "count": 0, 231 "granularity": 32768, 232 "name": "Small", 233 "persistent": true, 234 "recording": true 235 }, 236 { 237 "busy": false, 238 "count": 0, 239 "granularity": 65536, 240 "name": "Medium", 241 "persistent": true, 242 "recording": true 243 }, 244 { 245 "busy": false, 246 "count": 0, 247 "granularity": 131072, 248 "name": "Large", 249 "persistent": true, 250 "recording": true 251 } 252 ] 253 } 254} 255--- Removing all Bitmaps --- 256 257{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "Small", "node": "drive0"}} 258{"return": {}} 259{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "Medium", "node": "drive0"}} 260{"return": {}} 261{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "Large", "node": "drive0"}} 262{"return": {}} 263{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "NewB", "node": "drive0"}} 264{"return": {}} 265{"execute": "block-dirty-bitmap-remove", "arguments": {"name": "NewC", "node": "drive0"}} 266{"return": {}} 267{ 268 "bitmaps": { 269 "drive0": [] 270 } 271} 272 273--- Done --- 274