105 lines
7.3 KiB
XML
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>
|