qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[qemu-web PATCH] Add QEMU storage overview blog post


From: Stefan Hajnoczi
Subject: [qemu-web PATCH] Add QEMU storage overview blog post
Date: Mon, 7 Sep 2020 16:04:21 +0100

I want to kick of a series of posts about storage. The first post covers
high-level concepts, features, and utilities in QEMU. Later posts will
discuss configuration details, architecture, and performance.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 _posts/2020-09-07-qemu-storage-overview.md | 122 +++++++
 screenshots/2020-09-07-block-device-io.svg | 366 +++++++++++++++++++++
 screenshots/2020-09-07-lifecycle.svg       | 328 ++++++++++++++++++
 3 files changed, 816 insertions(+)
 create mode 100644 _posts/2020-09-07-qemu-storage-overview.md
 create mode 100644 screenshots/2020-09-07-block-device-io.svg
 create mode 100644 screenshots/2020-09-07-lifecycle.svg

diff --git a/_posts/2020-09-07-qemu-storage-overview.md 
b/_posts/2020-09-07-qemu-storage-overview.md
new file mode 100644
index 0000000..79f60c4
--- /dev/null
+++ b/_posts/2020-09-07-qemu-storage-overview.md
@@ -0,0 +1,122 @@
+---
+layout: post
+title:  "An Overview of QEMU Storage Features"
+date:   2020-09-07 07:00:00 +0000
+categories: [storage]
+---
+This article introduces QEMU storage concepts including disk images, emulated
+storage controllers, block jobs, the qemu-img utility, and qemu-storage-daemon.
+If you are new to QEMU or want an overview of storage functionality in QEMU
+then this article explains how things fit together.
+
+## Storage technologies
+Persistently storing data and retrieving it later is the job of storage devices
+such as hard disks, solid state drives (SSDs), USB flash drives, network
+attached storage, and many others. Technologies vary in their storage capacity
+(disk size), access speed, price, and other factors but most of them follow the
+same block device model.
+
+![Block device I/O](/screenshots/2020-09-07-block-device-io.svg)
+
+Block devices are accessed in storage units called blocks. It is not possible
+to access individual bytes, instead an entire block must be transferred. Block
+sizes vary between devices with 512 bytes and 4KB block sizes being the most
+common.
+
+As an emulator and virtualizer of computer systems, QEMU naturally has to offer
+block device functionality. QEMU is capable of emulating hard disks, solid
+state drives (SSDs), USB flash drives, SD cards, and more.
+
+## Storage for virtual machines
+There is more to storage than just persisting data on behalf of a virtual
+machine. The lifecycle of a disk image includes several operations that are
+briefly covered below.
+
+![Block device I/O](/screenshots/2020-09-07-lifecycle.svg)
+
+Virtual machines consist of device configuration (how much RAM, which
+graphics card, etc) and the contents of their disks. Transferring virtual
+machines either to migrate them between hosts or to distribute them to users is
+an important workflow that QEMU and its utilities support.
+
+Much like ISO files are used to distribute operating system installer images,
+QEMU supports disk image file formats that are more convenient for transferring
+disk images than the raw contents of a disk. In fact, disk image file formats
+offer many other features such as the ability to import/export disks from other
+hypervisors, snapshots, and instantiating new disk images from a backing file.
+
+Finally, managing disk images also involves the ability to take backups and
+restore them should it be necessary to roll back after the current disk
+contents have been lost or corrupted.
+
+## Emulated storage controllers
+
+The virtual machine accesses block devices through storage controllers. These
+are the devices that the guest talks to in order to read or write blocks. Some
+storage controllers facilitate access to multiple block devices, such as a SCSI
+Host Bus Adapter that provides access to many SCSI disks.
+
+Storage controllers vary in their features, performance, and guest operating
+system support. They expose a storage interface such as virtio-blk, NVMe, or
+SCSI. Virtual machines program storage controller registers to transfer data
+between memory buffers in RAM and block devices. Modern storage controllers
+support multiple request queues so that I/O can processed in parallel at high
+rates.
+
+The most common storage controllers in QEMU are virtio-blk, virtio-scsi, AHCI
+(SATA), IDE for legacy systems, and SD Card controllers on embedded or smaller
+boards.
+
+## Disk image file formats
+
+Disk image file formats handle the layout of blocks within a host file or
+device. The simplest format is the raw format where each block is located at
+its Logical Block Address (LBA) in the host file. This simple scheme does not
+offer much in the way of features.
+
+QEMU's native disk image format is QCOW2 and it offers a number of features:
+* Compactness - the host file grows as blocks are written so a sparse disk 
image can be much smaller than the virtual disk size.
+* Backing files - disk images can be based on a parent image so that a master 
image can be shared by virtual machines.
+* Snapshots - the state of the disk image can be saved and later reverted.
+* Compression - block compression reduces the image size.
+* Encryption - the disk image can be encrypted to protect data at rest.
+* Dirty bitmaps - backup applications can track changed blocks so that 
efficient incremental backups are possible.
+
+A number of other disk image file formats are available for importing/exporting
+disk images for use with other software including VMware and Hyper-V.
+
+## Block jobs
+
+Block jobs are background operations that manipulate disk images:
+* Commit - merging backing files to shorten a backing file chain.
+* Backup - copying out a point-in-time snapshot of a disk.
+* Mirror - copying an image to a new destination while the virtual machine can 
still write to it.
+* Stream - populating a disk image from its backing file.
+* Create - creating new disk image files.
+
+These background operations are powerful tools for building storage migration
+and backup workflows.
+
+Some operations like mirror and stream can take a long time because they copy
+large amounts of data. Block jobs support throttling to limit the performance
+impact on virtual machines.
+
+## qemu-img and qemu-storage-daemon
+
+The [qemu-img utility](https://www.qemu.org/docs/master/interop/qemu-img.html) 
manipulates disk images. It can create, resize, snapshot,
+repair, and inspect disk images. It has both human-friendly and JSON output
+formats, making it suitable for manual use as well as scripting.
+
+qemu-storage-daemon exposes QEMU's storage functionality in a server process
+without running a virtual machine. It can export disk images over the Network
+Block Device (NBD) protocol as well as run block jobs and other storage
+commands. This makes qemu-storage-daemon useful for applications that want to
+automate disk image manipulation.
+
+## Conclusion
+
+QEMU presents block devices to virtual machines via emulated storage
+controllers. On the host side the disk image file format, block jobs, and
+qemu-img/qemu-storage-daemon utilities provide functionality for working with
+disk images. Future blog posts will dive deeper into some of these areas and
+describe best practices for configuring storage.
diff --git a/screenshots/2020-09-07-block-device-io.svg 
b/screenshots/2020-09-07-block-device-io.svg
new file mode 100644
index 0000000..b1effcc
--- /dev/null
+++ b/screenshots/2020-09-07-block-device-io.svg
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   sodipodi:docname="block-device-io.svg"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   id="svg8"
+   version="1.1"
+   viewBox="0 0 211.66667 105.83334"
+   height="400"
+   width="800">
+  <defs
+     id="defs2">
+    <rect
+       id="rect3368"
+       height="12.31036"
+       width="21.572843"
+       y="87.814795"
+       x="5.0839274" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow2Mstart"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart">
+      <path
+         transform="scale(0.6) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 
8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 
8.7185878,4.0337352 z "
+         
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#5f9857;stroke-opacity:1;fill:#5f9857;fill-opacity:1"
+         id="path975" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow1Sstart"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Sstart">
+      <path
+         transform="scale(0.2) translate(6,0)"
+         
style="fill-rule:evenodd;stroke:#a02e2e;stroke-width:1pt;stroke-opacity:1;fill:#a02e2e;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path963" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 
8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 
8.7185878,4.0337352 z "
+         
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#a02e2e;stroke-opacity:1;fill:#a02e2e;fill-opacity:1"
+         id="path978" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="marker1287"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path1285" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="Arrow1Send"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Send">
+      <path
+         transform="scale(0.2) rotate(180) translate(6,0)"
+         
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path966" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="Arrow1Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path960" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path954" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend-6"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path978-2"
+         
style="fill:#a02e2e;fill-opacity:1;fill-rule:evenodd;stroke:#a02e2e;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     inkscape:window-maximized="1"
+     inkscape:window-y="0"
+     inkscape:window-x="0"
+     inkscape:window-height="1016"
+     inkscape:window-width="1920"
+     units="px"
+     showgrid="false"
+     inkscape:document-rotation="0"
+     inkscape:current-layer="layer1"
+     inkscape:document-units="mm"
+     inkscape:cy="200"
+     inkscape:cx="400"
+     inkscape:zoom="1"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="rect837-5-2-0"
+       width="14.319539"
+       height="14.319539"
+       x="151.85484"
+       y="43.375652" />
+    <rect
+       y="43.375652"
+       x="57.398544"
+       height="14.319539"
+       width="14.319539"
+       id="rect837-5-2"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       y="72.115448"
+       x="8.5989037"
+       height="17.248669"
+       width="191.44061"
+       id="rect12"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.325756;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       y="73.802719"
+       x="10.188523"
+       height="14.319539"
+       width="14.319539"
+       id="rect837"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="rect837-3"
+       width="14.319539"
+       height="14.319539"
+       x="25.974277"
+       y="73.802719" />
+    <rect
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="rect837-6"
+       width="14.319539"
+       height="14.319539"
+       x="41.760025"
+       y="73.802719" />
+    <rect
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="rect837-7"
+       width="14.319539"
+       height="14.319539"
+       x="57.545776"
+       y="73.802719" />
+    <rect
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="rect837-5"
+       width="14.319539"
+       height="14.319539"
+       x="73.331528"
+       y="73.802719" />
+    <rect
+       y="73.802719"
+       x="89.117271"
+       height="14.319539"
+       width="14.319539"
+       id="rect837-3-3"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       y="73.802719"
+       x="120.68877"
+       height="14.319539"
+       width="14.319539"
+       id="rect837-7-6"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="rect837-2"
+       width="14.319539"
+       height="14.319539"
+       x="136.47447"
+       y="73.802719" />
+    <rect
+       y="73.802719"
+       x="152.26022"
+       height="14.319539"
+       width="14.319539"
+       id="rect837-3-9"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       y="73.802719"
+       x="168.04596"
+       height="14.319539"
+       width="14.319539"
+       id="rect837-6-1"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <rect
+       y="73.802719"
+       x="183.83174"
+       height="14.319539"
+       width="14.319539"
+       id="rect837-7-2"
+       
style="fill:#ffffff;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <ellipse
+       ry="1.3585734"
+       rx="1.4722615"
+       cy="80.826599"
+       cx="107.49885"
+       id="path926"
+       
style="fill:#000000;stroke:none;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
 />
+    <ellipse
+       
style="fill:#000000;stroke:none;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="path926-6"
+       cx="111.95774"
+       cy="80.826599"
+       rx="1.4722615"
+       ry="1.3585734" />
+    <ellipse
+       
style="fill:#000000;stroke:none;stroke-width:0.329999;stroke-linejoin:round;stroke-opacity:1"
+       id="path926-0"
+       cx="116.41663"
+       cy="80.826599"
+       rx="1.4722615"
+       ry="1.3585734" />
+    <path
+       id="path949"
+       d="M 64.210031,52.265547 V 81.761421"
+       
style="fill:none;fill-rule:evenodd;stroke:#a02e2e;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
 />
+    <path
+       
style="fill:none;fill-rule:evenodd;stroke:#5f9857;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart)"
+       d="M 159.26959,53.777385 V 83.273259"
+       id="path949-6" />
+    <text
+       
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.2889px;line-height:125%;font-family:FreeSans;-inkscape-font-specification:FreeSans;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect3368);fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+       id="text3366"
+       xml:space="preserve"><tspan
+         style="visibility:hidden"
+         x="5.0839844"
+         y="110.11303"><tspan
+           dx="0 6.89571 7.1547813 3.1364193 5.8814716 3.5884151 3.1364193 
5.8814735 3.5884132 6.9177589 3.5884171 4.4262619 6.9453201 5.8814697"
+           style="fill:none">This is a test</tspan></tspan></text>
+    <text
+       id="text3386"
+       y="99.211525"
+       x="13.573332"
+       
style="font-size:9.87778px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:9.87778px;fill:#000000;stroke-width:0.264583px"
+         y="99.211525"
+         x="13.573332"
+         id="tspan3384"
+         sodipodi:role="line">0   1   2   3   4   5 </tspan></text>
+    <text
+       id="text3390"
+       y="98.842552"
+       x="113.57343"
+       
style="font-size:7.7611px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         
style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif
 Italic';fill:#000000;stroke-width:0.264583px"
+         y="98.842552"
+         x="113.57343"
+         id="tspan3388"
+         sodipodi:role="line">Logical Block Address</tspan></text>
+    <text
+       id="text3394"
+       y="36.814297"
+       x="51.45319"
+       
style="font-size:9.87778px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:9.87778px;fill:#000000;stroke-width:0.264583px"
+         y="36.814297"
+         x="51.45319"
+         id="tspan3392"
+         sodipodi:role="line">Write</tspan></text>
+    <text
+       xml:space="preserve"
+       
style="font-size:9.87777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="145.80954"
+       y="36.814297"
+       id="text3394-9"><tspan
+         sodipodi:role="line"
+         id="tspan3392-4"
+         x="145.80954"
+         y="36.814297"
+         
style="font-size:9.87777px;fill:#000000;stroke-width:0.264583px">Read</tspan></text>
+    <text
+       id="text3428"
+       y="18.429882"
+       x="40.263172"
+       
style="font-size:16.9333px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:16.9333px;fill:#000000;stroke-width:0.264583px"
+         y="18.429882"
+         x="40.263172"
+         id="tspan3426"
+         sodipodi:role="line">Block Device I/O</tspan></text>
+  </g>
+</svg>
diff --git a/screenshots/2020-09-07-lifecycle.svg 
b/screenshots/2020-09-07-lifecycle.svg
new file mode 100644
index 0000000..1c10668
--- /dev/null
+++ b/screenshots/2020-09-07-lifecycle.svg
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   width="516.87274"
+   height="455.98318"
+   viewBox="0 0 136.75591 120.64555"
+   version="1.1"
+   id="svg8"
+   inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
+   sodipodi:docname="2020-09-07-lifecycle.svg">
+  <defs
+     id="defs2">
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path879"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path882"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 41.270551 : 1"
+       inkscape:vp_y="0 : 999.99999 : 0"
+       inkscape:vp_z="2.7936278 : 120.44608 : 1"
+       inkscape:persp3d-origin="79.374998 : 14.812218 : 1"
+       id="perspective833" />
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow2Mend-3"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path882-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow2Mend-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path882-3" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow2Mstart-5"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart">
+      <path
+         transform="scale(0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path879-6" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow2Mend-1"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(-0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path882-2" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart-5-0"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path879-6-2"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend-1-7"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path882-2-5"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mstart-5-2"
+       style="overflow:visible"
+       inkscape:isstock="true">
+      <path
+         id="path879-6-28"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(0.6)" />
+    </marker>
+    <marker
+       inkscape:isstock="true"
+       style="overflow:visible"
+       id="Arrow2Mstart-5-0-9"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mstart">
+      <path
+         transform="scale(0.6)"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c 
-1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+         id="path879-6-2-7" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     fit-margin-bottom="12"
+     fit-margin-right="12"
+     fit-margin-left="12"
+     fit-margin-top="12"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="360.2843"
+     inkscape:cy="268.52474"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer1"
+     inkscape:document-rotation="0"
+     showgrid="false"
+     units="px"
+     inkscape:window-width="1920"
+     inkscape:window-height="1016"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-10.508113,-3.0361619)"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       
style="fill:#000000;fill-opacity:0;stroke:#000000;stroke-width:0.329999;stroke-linejoin:round"
+       id="rect851"
+       width="20.53208"
+       height="20.53208"
+       x="69.127571"
+       y="52.292423" />
+    <path
+       
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart-5)"
+       d="m 93.304199,66.781605 c 7.939251,8.629964 30.888561,19.336224 
50.433181,0"
+       id="path853-7-9"
+       sodipodi:nodetypes="cc" />
+    <path
+       id="path853-70"
+       d="M 79.412848,76.366728 V 107.04289"
+       
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend-1)"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       
style="font-size:9.87778px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="23.73085"
+       y="42.474926"
+       id="text1501"><tspan
+         sodipodi:role="line"
+         id="tspan1499"
+         x="23.73085"
+         y="42.474926"
+         
style="font-size:9.87778px;fill:#000000;stroke-width:0.264583px">Import</tspan></text>
+    <text
+       id="text1501-9"
+       y="88.298172"
+       x="23.458694"
+       
style="font-size:9.87777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:9.87777px;fill:#000000;stroke-width:0.264583px"
+         y="88.298172"
+         x="23.458694"
+         sodipodi:role="line"
+         id="tspan1521">Export</tspan></text>
+    <text
+       id="text1501-6"
+       y="43.217697"
+       x="101.97588"
+       
style="font-size:9.87777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:9.87777px;fill:#000000;stroke-width:0.264583px"
+         y="43.217697"
+         x="101.97588"
+         id="tspan1499-0"
+         sodipodi:role="line">Backup</tspan></text>
+    <text
+       id="text1501-62"
+       y="88.846954"
+       x="101.04363"
+       
style="font-size:9.87777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         style="font-size:9.87777px;fill:#000000;stroke-width:0.264583px"
+         y="88.846954"
+         x="101.04363"
+         id="tspan1499-6"
+         sodipodi:role="line">Restore</tspan></text>
+    <text
+       xml:space="preserve"
+       
style="font-size:9.87777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="61.443283"
+       y="118.31977"
+       id="text1501-62-1"><tspan
+         sodipodi:role="line"
+         id="tspan1499-6-8"
+         x="61.443283"
+         y="118.31977"
+         
style="font-size:9.87777px;fill:#000000;stroke-width:0.264583px">Migrate</tspan></text>
+    <text
+       xml:space="preserve"
+       
style="font-size:9.87777px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:sans-serif;letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="64.39402"
+       y="13.674611"
+       id="text1501-62-7"><tspan
+         sodipodi:role="line"
+         id="tspan1499-6-9"
+         x="64.39402"
+         y="13.674611"
+         
style="font-size:9.87777px;fill:#000000;stroke-width:0.264583px">Create</tspan></text>
+    <path
+       sodipodi:nodetypes="cc"
+       id="path853-7-9-3"
+       d="m 142.86514,59.598947 c -7.93926,-8.629964 -30.88858,-19.336225 
-50.433199,0"
+       
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart-5-0)"
 />
+    <path
+       sodipodi:nodetypes="cc"
+       
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Mend-1-7)"
+       d="m 79.894559,18.186064 v 29.58986"
+       id="path853-70-9" />
+    <path
+       sodipodi:nodetypes="cc"
+       id="path853-7-9-36"
+       d="m 14.907024,66.297581 c 7.939251,8.629963 30.888562,19.336224 
50.433176,0"
+       
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart-5-2)"
 />
+    <path
+       
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow2Mstart-5-0-9)"
+       d="m 64.467963,59.114923 c -7.939257,-8.629965 -30.888578,-19.336226 
-50.433197,0"
+       id="path853-7-9-3-1"
+       sodipodi:nodetypes="cc" />
+    <text
+       id="text933"
+       y="60.612328"
+       x="79.368111"
+       
style="font-style:italic;font-size:5.64444px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif
 
Italic';letter-spacing:0px;word-spacing:0px;fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         
style="font-size:5.64444px;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583px"
+         y="60.612328"
+         x="79.368111"
+         id="tspan931"
+         sodipodi:role="line">Disk</tspan><tspan
+         id="tspan935"
+         
style="font-size:5.64444px;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583px"
+         y="67.667877"
+         x="79.368111"
+         sodipodi:role="line">Image</tspan></text>
+  </g>
+</svg>
-- 
2.26.2


reply via email to

[Prev in Thread] Current Thread [Next in Thread]