<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Zvol on inetshell</title><link>https://inet.sh/en/tags/zvol/</link><description>Recent content in Zvol on inetshell</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 19 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/en/tags/zvol/index.xml" rel="self" type="application/rss+xml"/><item><title>Export a ZFS ZVOL to a RAW image</title><link>https://inet.sh/en/posts/zfs/zvol-raw-image/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/en/posts/zfs/zvol-raw-image/</guid><description>dd if=/dev/zvol/pool/volume of=file.raw to dump a ZVOL (Proxmox VM disks) to RAW, and when to use qemu-img instead.</description><content:encoded><![CDATA[<h2 id="tldr">TL;DR</h2>
<p>ZVOL = block device: <code>dd if=/dev/zvol/pool/vol of=vm.raw</code>. Snapshot first if the VM is running.</p>
<p>On Proxmox a VM disk on ZFS is a <strong>ZVOL</strong> (<code>rpool/data/vm-101-disk-0</code>), not a file. To copy it to another hypervisor or a USB stick, dump a RAW.</p>
<p>Thread: <a href="https://forum.proxmox.com/threads/import-convert-export-raw-images-to-zfs-volume.21241/">Import/convert/export RAW images to ZFS volume</a>.</p>
<h2 id="snapshot-and-dd">Snapshot and dd</h2>
<p>If the VM is running, freeze the disk with a snapshot and read the snap (the <code>@snap</code> ZVOL shows up under <code>/dev/zvol/…</code>):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs snapshot rpool/data/vm-101-disk-0@export
</span></span><span class="line"><span class="cl">dd <span class="k">if</span><span class="o">=</span>/dev/zvol/rpool/data/vm-101-disk-0@export <span class="nv">of</span><span class="o">=</span>/mnt/backup/vm-101.raw <span class="nv">bs</span><span class="o">=</span>1M <span class="nv">status</span><span class="o">=</span>progress
</span></span><span class="line"><span class="cl">zfs destroy rpool/data/vm-101-disk-0@export
</span></span></code></pre></td></tr></table>
</div>
</div><p>VM off, you can read the live zvol:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">dd <span class="k">if</span><span class="o">=</span>/dev/zvol/rpool/data/vm-101-disk-0 <span class="nv">of</span><span class="o">=</span>/mnt/backup/vm-101.raw <span class="nv">bs</span><span class="o">=</span>1M <span class="nv">status</span><span class="o">=</span>progress
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>bs=1M</code> matters: the 512 B default takes forever.</p>
<h2 id="qemu-img-qcow2--vmdk">qemu-img (qcow2 / vmdk)</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">qemu-img convert -p -f raw -O qcow2 /mnt/backup/vm-101.raw /mnt/backup/vm-101.qcow2
</span></span></code></pre></td></tr></table>
</div>
</div><p>Or straight from the zvol:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">qemu-img convert -p -f raw -O qcow2 /dev/zvol/rpool/data/vm-101-disk-0 vm-101.qcow2
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="the-other-way-raw--zvol">The other way (RAW → ZVOL)</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zfs create -s -V 32G rpool/data/vm-101-disk-0
</span></span><span class="line"><span class="cl">dd <span class="k">if</span><span class="o">=</span>file.raw <span class="nv">of</span><span class="o">=</span>/dev/zvol/rpool/data/vm-101-disk-0 <span class="nv">bs</span><span class="o">=</span>1M <span class="nv">status</span><span class="o">=</span>progress
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>-s</code> = sparse. The RAW must not be larger than the zvol.</p>
<p>See also: <a href="/en/posts/zfs/basic-commands/">basic commands</a>.</p>
]]></content:encoded></item></channel></rss>