<?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>Qcow2 on inetshell</title><link>https://inet.sh/es/tags/qcow2/</link><description>Recent content in Qcow2 on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Sat, 26 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/qcow2/index.xml" rel="self" type="application/rss+xml"/><item><title>Montar un disco qcow2 en el host con qemu-nbd (leer o reparar archivos de una VM apagada)</title><link>https://inet.sh/es/posts/linux/montar-qcow2-qemu-nbd/</link><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/linux/montar-qcow2-qemu-nbd/</guid><description>Un qcow2 no se puede montar con loop: qemu-nbd lo expone como dispositivo de bloques (/dev/nbd0) y de ahí salen las particiones. Cómo hacerlo en modo lectura o escritura, qué pasa si el disco de la VM lleva LVM (nombres de VG duplicados, vgimportclone), cómo montar un snapshot interno, guestmount como alternativa sin nbd, y por qué nunca con la VM encendida.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p>Con la VM <strong>apagada</strong>:</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><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</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">modprobe nbd <span class="nv">max_part</span><span class="o">=</span><span class="m">16</span>
</span></span><span class="line"><span class="cl">qemu-nbd --connect<span class="o">=</span>/dev/nbd0 /var/lib/vz/images/100/vm-100-disk-0.qcow2   <span class="c1"># añade -r para solo lectura</span>
</span></span><span class="line"><span class="cl">partprobe /dev/nbd0
</span></span><span class="line"><span class="cl">lsblk /dev/nbd0                                  <span class="c1"># nbd0p1, nbd0p2…</span>
</span></span><span class="line"><span class="cl">mount /dev/nbd0p2 /mnt/vm
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># ... leer, copiar o reparar ...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">umount /mnt/vm
</span></span><span class="line"><span class="cl">qemu-nbd --disconnect /dev/nbd0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Sin el <code>--disconnect</code> la VM no vuelve a arrancar: QEMU se encuentra la imagen bloqueada.</p>
<h2 id="por-qué-nbd">Por qué nbd</h2>
<p>Un <code>.qcow2</code> no es un volcado del disco: tiene cabecera, tabla de clusters, snapshots internos y a veces un archivo base detrás. <code>losetup</code> no lo entiende. <code>qemu-nbd</code> sí, y lo publica como un dispositivo de bloques a través del cliente NBD del kernel; a partir de ahí es un disco más para <code>lsblk</code>, <code>mount</code>, <code>fsck</code> o <code>dd</code>.</p>
<p><code>max_part</code> importa: sin él el kernel no crea los nodos <code>nbd0p1</code>, <code>nbd0p2</code>… <code>partprobe</code> los fuerza si tras el <code>--connect</code> no aparecen.</p>
<h2 id="si-el-disco-de-la-vm-lleva-lvm">Si el disco de la VM lleva LVM</h2>
<p>Lo normal en Ubuntu Server, RHEL y Fedora: dentro de la partición hay un VG. Actívalo, monta el LV y, al terminar, desactívalo antes de desconectar:</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><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</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">vgscan
</span></span><span class="line"><span class="cl">vgchange -ay                                   <span class="c1"># activa lo que encuentre en nbd0</span>
</span></span><span class="line"><span class="cl">lvs                                            <span class="c1"># ubuntu-vg/ubuntu-lv, rhel/root…</span>
</span></span><span class="line"><span class="cl">mount /dev/ubuntu-vg/ubuntu-lv /mnt/vm
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">umount /mnt/vm
</span></span><span class="line"><span class="cl">vgchange -an ubuntu-vg
</span></span><span class="line"><span class="cl">qemu-nbd --disconnect /dev/nbd0
</span></span></code></pre></td></tr></table>
</div>
</div><p>Trampa clásica: el host tiene un VG con el <strong>mismo nombre</strong> que el de la VM (<code>ubuntu-vg</code> contra <code>ubuntu-vg</code>, <code>pve</code> contra <code>pve</code>). LVM se niega a activar dos iguales. La herramienta para eso es <code>vgimportclone</code>, que renombra el VG del disco importado sin tocar el del host:</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">vgimportclone -n vm100-vg /dev/nbd0p3
</span></span><span class="line"><span class="cl">vgchange -ay vm100-vg
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si prefieres no cambiar nada dentro de la VM, <code>guestmount</code> (abajo) resuelve el LVM por su cuenta y no toca el LVM del host.</p>
<h2 id="windows-ntfs-y-snapshots-internos">Windows, NTFS y snapshots internos</h2>
<ul>
<li><strong>NTFS</strong>: <code>mount -t ntfs3 /dev/nbd0p3 /mnt/vm</code> (kernel 5.15+) o <code>ntfs-3g</code>. Si Windows quedó hibernado o con <em>Fast Startup</em>, NTFS solo se deja montar en lectura; apágalo bien desde dentro antes de escribir.</li>
<li><strong>Snapshot interno de qcow2</strong> (<code>qemu-img snapshot -l vm.qcow2</code>): <code>qemu-nbd -r -l antes-del-cambio --connect=/dev/nbd0 vm.qcow2</code> monta el estado de ese snapshot, solo lectura, sin tocar el disco actual.</li>
<li><strong>Otros formatos</strong>: <code>qemu-nbd</code> habla también vmdk, vhdx y vdi (<code>-f vhdx</code> si no lo detecta); <code>qemu-img convert -O raw</code> es la alternativa si vas a trabajar mucho tiempo con la imagen.</li>
</ul>
<h2 id="guestmount-lo-mismo-sin-nbd-ni-root">guestmount: lo mismo sin nbd ni root</h2>
<p>libguestfs monta la imagen por FUSE, detecta particiones y LVM solo, y no interfiere con el host:</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><span class="lnt">4
</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">apt install libguestfs-tools          <span class="c1"># dnf install guestfs-tools en Fedora/RHEL</span>
</span></span><span class="line"><span class="cl">virt-filesystems --long -h --all -a vm.qcow2      <span class="c1"># qué hay dentro</span>
</span></span><span class="line"><span class="cl">guestmount -a vm.qcow2 -i --ro /mnt/vm            <span class="c1"># -i: monta el sistema operativo que encuentre</span>
</span></span><span class="line"><span class="cl">guestunmount /mnt/vm
</span></span></code></pre></td></tr></table>
</div>
</div><p>Más lento que nbd para copiar gigas, pero imposible de dejar mal cerrado.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong>Nunca con la VM encendida.</strong> En escritura corrompes el sistema de archivos con seguridad; en <code>-r</code> ves un estado inconsistente (lo que el guest tiene en caché no está en disco). Si necesitas mirar una VM viva, haz un snapshot y monta el snapshot.</li>
<li><strong>La imagen queda bloqueada</strong> mientras <code>qemu-nbd</code> esté conectado: <code>qm start 100</code> falla con <code>Failed to get &quot;write&quot; lock</code>. <code>qemu-nbd -d /dev/nbd0</code> lo suelta; <code>ls /sys/block/nbd*/pid</code> dice cuáles siguen en uso.</li>
<li><strong><code>--disconnect</code> con &ldquo;device busy&rdquo;</strong>: queda algo montado o un VG activo (<code>vgchange -an</code>). <code>lsof /dev/nbd0*</code> lo encuentra.</li>
<li><strong>Proxmox con LVM-thin o ZFS</strong> no necesita nbd: el disco de la VM ya es un dispositivo de bloques (<code>/dev/pve/vm-100-disk-0</code>, <code>/dev/zvol/rpool/data/vm-100-disk-0</code>); <code>kpartx -av</code> sobre él saca las particiones. <code>qemu-nbd</code> es para qcow2 en storages de directorio y NFS.</li>
<li><strong>Archivos base</strong>: una imagen con <code>backing file</code> se monta igual; lo que escribas va a la capa superior. No muevas la base mientras esté conectada.</li>
</ul>
<p>Ver también: <a href="/es/posts/windows/disk2vhd-p2v-vhdx-maquina-encendida/">convertir una máquina física a VHDX</a> y el <a href="/es/posts/proxmox/plantillas-cloud-init/">import de discos en Proxmox</a>. Referencia: <a href="https://www.qemu.org/docs/master/tools/qemu-nbd.html">qemu-nbd</a> en la documentación de QEMU.</p>
]]></content:encoded></item></channel></rss>