--- /dev/null
+<?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="185.64258mm"
+ height="83.899208mm"
+ viewBox="0 0 185.64258 83.899208"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+ sodipodi:docname="3000-disk-images-1.svg">
+ <defs
+ id="defs2">
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect913"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect909"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect905"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect901"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect897"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect847"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect843"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="336.81604"
+ inkscape:cy="185.78454"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ fit-margin-top="1"
+ fit-margin-left="1"
+ fit-margin-bottom="1"
+ fit-margin-right="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
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-18.616953,-15.049745)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect833"
+ width="72.857269"
+ height="13.868065"
+ x="71.58432"
+ y="16.182245" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777px;line-height:1.25;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="77.63871"
+ y="25.352041"
+ id="text837"><tspan
+ sodipodi:role="line"
+ id="tspan835"
+ x="77.63871"
+ y="25.352041"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';stroke-width:0.264583">fedora-33.img</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect839"
+ width="172.96991"
+ height="13.868065"
+ x="25.570292"
+ y="44.790016" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 60.320189,44.921183 c 0.02761,4.548783 0.05522,9.097297 0.08283,13.645547"
+ id="path841"
+ inkscape:path-effect="#path-effect843"
+ inkscape:original-d="m 60.320189,44.921183 c 0.02787,4.548781 0.05548,9.097295 0.08283,13.645547"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 124.34953,44.921183 c 0.0276,4.548783 0.0552,9.097297 0.0828,13.645547"
+ id="path845"
+ inkscape:path-effect="#path-effect847"
+ inkscape:original-d="m 124.34953,44.921183 c 0.0279,4.548781 0.0555,9.097295 0.0828,13.645547"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777px;line-height:1.25;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="28.555611"
+ y="54.142452"
+ id="text851"><tspan
+ sodipodi:role="line"
+ x="28.555611"
+ y="54.142452"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';stroke-width:0.264583"
+ id="tspan853">/boot</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777px;line-height:1.25;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="65.597313"
+ y="54.142452"
+ id="text859"><tspan
+ sodipodi:role="line"
+ x="65.597313"
+ y="54.142452"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';stroke-width:0.264583"
+ id="tspan857">root</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777px;line-height:1.25;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="130.68477"
+ y="54.142452"
+ id="text863"><tspan
+ sodipodi:role="line"
+ x="130.68477"
+ y="54.142452"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Red Hat Text';-inkscape-font-specification:'Red Hat Text';stroke-width:0.264583"
+ id="tspan861">/home</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect865"
+ width="183.37758"
+ height="13.868065"
+ x="19.749453"
+ y="83.948387" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect867"
+ width="34.771164"
+ height="12.444077"
+ x="20.828735"
+ y="84.709534" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect869"
+ width="49.021343"
+ height="12.444077"
+ x="56.282936"
+ y="84.709534" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect871"
+ width="96.254074"
+ height="12.444077"
+ x="106.02465"
+ y="84.709534" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="24.378477"
+ y="93.517654"
+ id="text881"><tspan
+ sodipodi:role="line"
+ id="tspan879"
+ x="24.378477"
+ y="93.517654"
+ style="stroke-width:0.264583">data</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="59.30352"
+ y="93.517654"
+ id="text889"><tspan
+ sodipodi:role="line"
+ id="tspan887"
+ x="59.30352"
+ y="93.517654"
+ style="stroke-width:0.264583">deleted</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 58.509532,90.242299 c 13.287121,0.04331 26.573978,0.08661 39.860571,0.129918"
+ id="path895"
+ inkscape:path-effect="#path-effect897"
+ inkscape:original-d="m 58.509532,90.242299 c 13.28712,0.04357 26.573977,0.08688 39.860571,0.129918" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.793749, 0.793749;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 25.570291,44.790015 C 40.908464,39.876728 56.246473,34.963493 71.584319,30.050311"
+ id="path899"
+ inkscape:path-effect="#path-effect901"
+ inkscape:original-d="M 25.570291,44.790015 C 40.908565,39.877044 56.246574,34.963809 71.584319,30.050311" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.793749, 0.793749;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 198.54021,44.790016 C 180.38728,39.876868 162.23403,34.963634 144.08045,30.050311"
+ id="path903"
+ inkscape:path-effect="#path-effect905"
+ inkscape:original-d="M 198.54021,44.790016 C 180.38723,39.877048 162.23398,34.963814 144.08045,30.050311"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.793749, 0.793749;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 203.12703,83.948387 C 176.89579,75.487941 150.66423,67.02739 124.43233,58.56673"
+ id="path907"
+ inkscape:path-effect="#path-effect909"
+ inkscape:original-d="M 203.12703,83.948387 C 176.89574,75.488102 150.66418,67.027551 124.43233,58.56673"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.793749, 0.793749;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 19.749453,83.948387 C 33.300671,75.487816 46.851869,67.027258 60.403019,58.56673"
+ id="path911"
+ inkscape:path-effect="#path-effect913"
+ inkscape:original-d="M 19.749453,83.948387 C 33.300864,75.488126 46.852062,67.027567 60.403019,58.56673"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
--- /dev/null
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Disk images</h1>
+
+<img src="3000-disk-images-1.svg"
+ width="80%"/>
--- /dev/null
+<?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="189.57765mm"
+ height="61.617233mm"
+ viewBox="0 0 189.57765 61.617233"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+ sodipodi:docname="3100-disk-metadata-1.svg">
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="marker1963"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1961" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1959"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lend"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1678" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1673"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect913"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect909"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect905"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect901"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect897"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect847"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect843"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="383.78033"
+ inkscape:cy="176.7742"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ fit-margin-top="1"
+ fit-margin-left="1"
+ fit-margin-bottom="1"
+ fit-margin-right="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
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-16.472672,7.0685583)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect865"
+ width="183.37758"
+ height="13.868065"
+ x="19.749453"
+ y="25.210831" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect867"
+ width="34.771164"
+ height="12.444077"
+ x="20.828735"
+ y="25.971977" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect869"
+ width="49.021343"
+ height="12.444077"
+ x="56.282936"
+ y="25.971977" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect871"
+ width="96.254074"
+ height="12.444077"
+ x="106.02465"
+ y="25.971977" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="24.378477"
+ y="34.780098"
+ id="text881"><tspan
+ sodipodi:role="line"
+ id="tspan879"
+ x="24.378477"
+ y="34.780098"
+ style="stroke-width:0.264583">data</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="59.30352"
+ y="34.780098"
+ id="text889"><tspan
+ sodipodi:role="line"
+ id="tspan887"
+ x="59.30352"
+ y="34.780098"
+ style="stroke-width:0.264583">deleted</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 58.509532,31.504762 c 13.287121,0.04331 26.573978,0.08661 39.860571,0.129918"
+ id="path895"
+ inkscape:path-effect="#path-effect897"
+ inkscape:original-d="m 58.509532,31.504762 c 13.28712,0.04357 26.573977,0.08688 39.860571,0.129918" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect1657"
+ width="94.843269"
+ height="21.882935"
+ x="17.604963"
+ y="21.978741" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect1659"
+ width="17.451328"
+ height="21.882935"
+ x="187.46671"
+ y="21.978741" />
+ <rect
+ style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect1661"
+ width="73.053322"
+ height="21.882935"
+ x="113.38419"
+ y="21.978741" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke:#ff0000;stroke-width:0.264583"
+ x="115.64815"
+ y="1.5685236"
+ id="text1665"><tspan
+ sodipodi:role="line"
+ id="tspan1663"
+ x="115.64815"
+ y="1.5685236"
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.264583">allocated</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#00ff00;stroke:#00ff00;stroke-width:0.264583"
+ x="120.36406"
+ y="53.276512"
+ id="text1669"><tspan
+ sodipodi:role="line"
+ id="tspan1667"
+ x="120.36406"
+ y="53.276512"
+ style="fill:#00ff00;stroke:#00ff00;stroke-width:0.264583">hole</tspan></text>
+ <path
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 116.64807,3.6727812 C 108.35576,9.7672914 100.06341,15.861832 91.771018,21.956404"
+ id="path1671"
+ inkscape:path-effect="#path-effect1673"
+ inkscape:original-d="M 116.64807,3.6727812 C 108.35598,9.7675892 100.06363,15.862129 91.771018,21.956404"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1963)"
+ d="m 161.86105,4.7969176 c 9.94352,5.3952414 19.88673,10.7903144 29.82964,16.1852244"
+ id="path1957"
+ inkscape:path-effect="#path-effect1959"
+ inkscape:original-d="m 161.86105,4.7969176 c 9.94347,5.3953334 19.88668,10.7904094 29.82964,16.1852244"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
--- /dev/null
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Disk metadata</h1>
+
+<img src="3100-disk-metadata-1.svg"
+ width="80%"/>
+
+<pre>
+ls -lsh
+filefrag -v
+qemu-img map
+nbdinfo --map
+</pre>
--- /dev/null
+<?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="194.16673mm"
+ height="99.769829mm"
+ viewBox="0 0 194.16673 99.769828"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+ sodipodi:docname="3200-sparsification-1.svg">
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lend"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1678" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2785"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2763"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <marker
+ style="overflow:visible"
+ id="marker1963"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1961" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1959"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect1673"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect913"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect909"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect905"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect901"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect897"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect847"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect843"
+ is_visible="true"
+ lpeversion="1"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="419.68511"
+ inkscape:cy="201.87787"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ fit-margin-top="1"
+ fit-margin-left="1"
+ fit-margin-bottom="1"
+ fit-margin-right="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
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-11.883594,-10.311698)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect865"
+ width="183.37758"
+ height="13.868065"
+ x="19.749453"
+ y="25.210831" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect867"
+ width="34.771164"
+ height="12.444077"
+ x="20.828735"
+ y="25.971977" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect869"
+ width="49.021343"
+ height="12.444077"
+ x="56.282936"
+ y="25.971977" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect871"
+ width="96.254074"
+ height="12.444077"
+ x="106.02465"
+ y="25.971977" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="24.378477"
+ y="34.780098"
+ id="text881"><tspan
+ sodipodi:role="line"
+ id="tspan879"
+ x="24.378477"
+ y="34.780098"
+ style="stroke-width:0.264583">data</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="59.30352"
+ y="34.780098"
+ id="text889"><tspan
+ sodipodi:role="line"
+ id="tspan887"
+ x="59.30352"
+ y="34.780098"
+ style="stroke-width:0.264583">deleted</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 58.509532,31.504762 c 13.287121,0.04331 26.573978,0.08661 39.860571,0.129918"
+ id="path895"
+ inkscape:path-effect="#path-effect897"
+ inkscape:original-d="m 58.509532,31.504762 c 13.28712,0.04357 26.573977,0.08688 39.860571,0.129918" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect1657"
+ width="94.843269"
+ height="21.882935"
+ x="17.604963"
+ y="21.978741" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect1659"
+ width="17.451328"
+ height="21.882935"
+ x="187.46671"
+ y="21.978741" />
+ <rect
+ style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect1661"
+ width="73.053322"
+ height="21.882935"
+ x="113.38419"
+ y="21.978741" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke:#ff0000;stroke-width:0.264583"
+ x="20.889309"
+ y="18.94878"
+ id="text1665"><tspan
+ sodipodi:role="line"
+ id="tspan1663"
+ x="20.889309"
+ y="18.94878"
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.264583">allocated</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#00ff00;stroke:#00ff00;stroke-width:0.264583"
+ x="115.60157"
+ y="19.409813"
+ id="text1669"><tspan
+ sodipodi:role="line"
+ id="tspan1667"
+ x="115.60157"
+ y="19.409813"
+ style="fill:#00ff00;stroke:#00ff00;stroke-width:0.264583">hole</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke:#ff0000;stroke-width:0.264583"
+ x="160.17931"
+ y="19.298647"
+ id="text2743"><tspan
+ sodipodi:role="line"
+ id="tspan2741"
+ x="160.17931"
+ y="19.298647"
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.264583">allocated</tspan></text>
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2745"
+ width="183.37758"
+ height="13.868065"
+ x="19.749453"
+ y="90.298393" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2747"
+ width="34.771164"
+ height="12.444077"
+ x="20.828735"
+ y="91.05954" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2749"
+ width="49.021343"
+ height="12.444077"
+ x="56.282936"
+ y="91.05954" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2751"
+ width="96.254074"
+ height="12.444077"
+ x="106.02465"
+ y="91.05954" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="24.378477"
+ y="99.867661"
+ id="text2755"><tspan
+ sodipodi:role="line"
+ id="tspan2753"
+ x="24.378477"
+ y="99.867661"
+ style="stroke-width:0.264583">data</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="59.30352"
+ y="99.867661"
+ id="text2759"><tspan
+ sodipodi:role="line"
+ id="tspan2757"
+ x="59.30352"
+ y="99.867661"
+ style="stroke-width:0.264583">deleted</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 58.509532,96.592303 c 13.287121,0.04331 26.573978,0.08661 39.860571,0.129918"
+ id="path2761"
+ inkscape:path-effect="#path-effect2763"
+ inkscape:original-d="m 58.509532,96.592303 c 13.28712,0.04357 26.573977,0.08688 39.860571,0.129918" />
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect2765"
+ width="40.601089"
+ height="21.882935"
+ x="17.604963"
+ y="87.066299" />
+ <rect
+ style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-dasharray:0.79375, 0.79375"
+ id="rect2769"
+ width="144.43636"
+ height="21.882935"
+ x="59.938324"
+ y="87.066299" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;stroke:#ff0000;stroke-width:0.264583"
+ x="12.422641"
+ y="84.036339"
+ id="text2773"><tspan
+ sodipodi:role="line"
+ id="tspan2771"
+ x="12.422641"
+ y="84.036339"
+ style="fill:#ff0000;stroke:#ff0000;stroke-width:0.264583">allocated</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#00ff00;stroke:#00ff00;stroke-width:0.264583"
+ x="61.626534"
+ y="83.968208"
+ id="text2777"><tspan
+ sodipodi:role="line"
+ id="tspan2775"
+ x="61.626534"
+ y="83.968208"
+ style="fill:#00ff00;stroke:#00ff00;stroke-width:0.264583">hole</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="m 109.75667,48.983555 c -0.0173,8.046613 -0.0346,16.092959 -0.0519,24.139045"
+ id="path2783"
+ inkscape:path-effect="#path-effect2785"
+ inkscape:original-d="m 109.75667,48.983555 c -0.017,8.046614 -0.0343,16.09296 -0.0519,24.139045"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:9.87777px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
+ x="113.19865"
+ y="61.988869"
+ id="text2815"><tspan
+ sodipodi:role="line"
+ id="tspan2813"
+ x="113.19865"
+ y="61.988869"
+ style="stroke-width:0.264583">"sparsification"</tspan></text>
+ </g>
+</svg>
--- /dev/null
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Sparsifying disk images</h1>
+
+<img src="3200-sparsification-1.svg"
+ width="80%"/>
+
+<br/>
+<br/>
+
+<pre>
+ioctl(fd, FITRIM, ...)
+fstrim
+virt-sparsify --in-place
+</pre>
--- /dev/null
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Sparsifying into a snapshot</h1>
+
+<pre>
+┌───────────────┐ssh ┌────────────┐
+│ fedora-33.img │───▶│ qcow2 file │◀─── virt-sparsify --in-place
+└───────────────┘ └────────────┘ ┌───────────┐
+ ───▶ qemu-img convert ────▶│ local.img │
+ └───────────┘
+</pre>
--- /dev/null
+#!/bin/bash -
+
+source functions
+
+# Title.
+export title="Sparsification + copying"
+
+# History.
+remember 'qemu-img create -f qcow2 -F raw -b ssh://kool/mnt/scratch/pipes/fedora-33.img snapshot.qcow2'
+remember 'virt-sparsify --in-place snapshot.qcow2'
+remember 'qemu-img convert -f qcow2 snapshot.qcow2 -O raw local.img -p'
+
+terminal
needed by the operating system but also isn't zeroes.
-Meta-data
+Disk metadata
----------------------------------------------------------------------
DIAGRAM:
unset https_proxy
unset ftp_proxy
+# Don't use libvirt.
+export LIBGUESTFS_BACKEND=direct
+
+# Pre-cache libguestfs appliance.
+guestfish -a /dev/null run &
+
# Clean up after previous run.
talkdir=$PWD ./restore