1
0
Fork 0
virtualbox/doc/manual/en_US/dita/topics/diffimages.dita
Daniel Baumann 2b3ba1f3e4
Merging upstream version 7.1.8-dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-24 20:41:59 +02:00

105 lines
7.3 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="diffimages">
<title>Differencing Images</title>
<body>
<p>The previous section mentioned differencing images and how they are used with snapshots, immutable images, and
multiple disk attachments. This section describes in more detail how differencing images work. </p>
<p>A differencing image is a special disk image that only holds the differences to another image. A differencing
image by itself is useless, it must always refer to another image. The differencing image is then typically
referred to as a <i>child</i>, which holds the differences to its <i>parent</i>. </p>
<p>When a differencing image is active, it receives all write operations from the virtual machine instead of its
parent. The differencing image only contains the sectors of the virtual hard disk that have changed since the
differencing image was created. When the machine reads a sector from such a virtual hard disk, it looks into the
differencing image first. If the sector is present, it is returned from there. If not, <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> looks into the parent. In other words, the parent becomes
<i>read-only</i>. It is never written to again, but it is read from if a sector has not changed. </p>
<p>Differencing images can be chained. If another differencing image is created for a virtual disk that already has
a differencing image, then it becomes a <i>grandchild</i> of the original parent. The first differencing image
then becomes read-only as well, and write operations only go to the second-level differencing image. When reading
from the virtual disk, <ph conkeyref="vbox-conkeyref-phrases/product-name"/> needs to look into the second
differencing image first, then into the first if the sector was not found, and then into the original image. </p>
<p>There can be an unlimited number of differencing images, and each image can have more than one child. As a
result, the differencing images can form a complex tree with parents, siblings, and children, depending on how
complex your machine configuration is. Write operations always go to the one <i>active</i> differencing image that
is attached to the machine, and for read operations, <ph conkeyref="vbox-conkeyref-phrases/product-name"/> may
need to look up all the parents in the chain until the sector in question is found. You can view such a tree in
the Virtual Media Manager. </p>
<fig id="fig-diff-images">
<title>Differencing Images, Shown in Virtual Media Manager</title>
<xref href="images/differencing-images.png" format="png" platform="htmlhelp">
<image href="images/differencing-images.png" width="14cm" placement="break">
<alt>Differencing Images, Shown in Virtual Media Manager</alt>
</image>
</xref>
<image platform="ohc" href="images/differencing-images.png" width="14cm" placement="break">
<alt>Differencing Images, Shown in Virtual Media Manager</alt>
</image>
</fig>
<p>In all of these situations, from the point of view of the virtual machine, the virtual hard disk behaves like any
other disk. While the virtual machine is running, there is a slight runtime I/O overhead because <ph
conkeyref="vbox-conkeyref-phrases/product-name"/> might need to look up sectors several times. This is not
noticeable however since the tables with sector information are always kept in memory and can be looked up
quickly. </p>
<p>Differencing images are used in the following situations: </p>
<ul>
<li>
<p><b outputclass="bold">Snapshots.</b> When you create a
snapshot, as explained in the previous section, <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
<i>freezes</i> the images attached to the
virtual machine and creates differencing images for each image
that is not in <i>write-through</i> mode. From
the point of view of the virtual machine, the virtual disks
continue to operate before, but all write operations go into
the differencing images. Each time you create another
snapshot, for each hard disk attachment, another differencing
image is created and attached, forming a chain or tree.
</p>
<p>In the above screenshot, you see that the original disk image is now attached to a snapshot, representing the
state of the disk when the snapshot was taken. </p>
<p>If you <i>restore</i> a snapshot, and want to go back to the exact machine state that was stored in the
snapshot, the following happens: </p>
<ul>
<li>
<p><ph conkeyref="vbox-conkeyref-phrases/product-name"/> copies the virtual machine settings that were
copied into the snapshot back to the virtual machine. As a result, if you have made changes to the machine
configuration since taking the snapshot, they are undone. </p>
</li>
<li>
<p>If the snapshot was taken while the machine was running, it contains a saved machine state, and that
state is restored as well. After restoring the snapshot, the machine will then be in Saved state and
resume execution from there when it is next started. Otherwise the machine will be in Powered Off state
and do a full boot. </p>
</li>
<li>
<p>For each disk image attached to the machine, the differencing image holding all the write operations
since the current snapshot was taken is thrown away, and the original parent image is made active again.
If you restored the root snapshot, then this will be the root disk image for each attachment. Otherwise,
some other differencing image descended from it. This effectively restores the old machine state. </p>
</li>
</ul>
<p>If you later <i>delete</i> a snapshot in order to free disk space, for each disk attachment, one of the
differencing images becomes obsolete. In this case, the differencing image of the disk attachment cannot
simply be deleted. Instead, <ph conkeyref="vbox-conkeyref-phrases/product-name"/> needs to look at each sector
of the differencing image and needs to copy it back into its parent. This is called "merging" images and can
be a potentially lengthy process, depending on how large the differencing image is. It can also temporarily
need a considerable amount of extra disk space, before the differencing image obsoleted by the merge operation
is deleted. </p>
</li>
<li>
<p><b outputclass="bold">Immutable images.</b> When an
image is switched to immutable mode, a differencing image is
created as well. As with snapshots, the parent image then
becomes read-only, and the differencing image receives all the
write operations. Every time the virtual machine is started,
all the immutable images which are attached to it have their
respective differencing image thrown away, effectively
resetting the virtual machine's virtual disk with every
restart.
</p>
</li>
</ul>
</body>
</topic>