<?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>Lvm on inetshell</title><link>https://inet.sh/es/tags/lvm/</link><description>Recent content in Lvm 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/lvm/index.xml" rel="self" type="application/rss+xml"/><item><title>Crecer el disco de una VM Linux en caliente: rescan, growpart, pvresize, lvextend y xfs_growfs</title><link>https://inet.sh/es/posts/linux/crecer-disco-vm-linux-en-caliente/</link><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/linux/crecer-disco-vm-linux-en-caliente/</guid><description>Ya agrandaste el disco virtual en Proxmox, VMware o la nube y dentro de la VM sigue igual. Los cuatro pasos sin reiniciar: que el kernel vea el tamaño nuevo (virtio-blk solo; SCSI con rescan), growpart para la partición, pvresize + lvextend -r si hay LVM, y resize2fs o xfs_growfs. Con los errores típicos: NOCHANGE, locale, partición que no es la última.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p>Con el disco ya agrandado del lado del hipervisor (<code>qm resize 100 scsi0 +50G</code> en Proxmox, <em>Edit disk</em> en VMware, la consola de tu nube):</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><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</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"><span class="c1"># 1. Que el kernel vea el tamaño nuevo (virtio-scsi/SATA; virtio-blk lo detecta solo)</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="m">1</span> &gt; /sys/class/block/sda/device/rescan
</span></span><span class="line"><span class="cl">lsblk /dev/sda
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 2. Agrandar la partición (paquete cloud-guest-utils en Debian/Ubuntu, cloud-utils-growpart en RHEL)</span>
</span></span><span class="line"><span class="cl">growpart /dev/sda <span class="m">3</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3a. Con LVM: PV, LV y sistema de archivos</span>
</span></span><span class="line"><span class="cl">pvresize /dev/sda3
</span></span><span class="line"><span class="cl">lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv      <span class="c1"># -r: resize2fs o xfs_growfs según el fs</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 3b. Sin LVM</span>
</span></span><span class="line"><span class="cl">resize2fs /dev/sda3        <span class="c1"># ext4</span>
</span></span><span class="line"><span class="cl">xfs_growfs /               <span class="c1"># xfs: se indica el punto de montaje</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Sin reinicio. <code>df -h /</code> confirma.</p>
<h2 id="antes-de-empezar">Antes de empezar</h2>
<ul>
<li><strong>Snapshot o backup en el hipervisor.</strong> Crecer es seguro; equivocarse de partición no.</li>
<li><strong>Mira el layout</strong>: <code>lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS</code>. Ahí ves el número de partición, si hay LVM debajo y qué sistema de archivos toca.</li>
<li><strong>Nombres</strong>: virtio-blk es <code>/dev/vda</code>; virtio-scsi y SATA, <code>/dev/sda</code>; NVMe, <code>/dev/nvme0n1</code> con particiones <code>p1</code>, <code>p2</code>… (<code>growpart /dev/nvme0n1 1</code>).</li>
<li><strong>A veces el espacio ya está</strong>: Ubuntu Server crea el LV usando solo parte del VG. Si <code>vgs</code> muestra <code>VFree</code> grande, salta directo al <code>lvextend</code>.</li>
</ul>
<h2 id="1-que-el-kernel-vea-el-disco-nuevo">1. Que el kernel vea el disco nuevo</h2>
<table>
  <thead>
      <tr>
          <th>Bus</th>
          <th>Qué hacer</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>virtio-blk (<code>vda</code>)</td>
          <td>Nada: <code>dmesg | tail</code> muestra <code>[vda] new size: …</code></td>
      </tr>
      <tr>
          <td>virtio-scsi, SATA, IDE (<code>sda</code>)</td>
          <td><code>echo 1 &gt; /sys/class/block/sda/device/rescan</code></td>
      </tr>
      <tr>
          <td>Disco nuevo (no crecido)</td>
          <td><code>echo &quot;- - -&quot; &gt; /sys/class/scsi_host/host0/scan</code></td>
      </tr>
      <tr>
          <td>NVMe en nube</td>
          <td>Suele aparecer solo en un minuto; si no, <code>echo 1 &gt; /sys/class/nvme/nvme0/rescan_controller</code></td>
      </tr>
  </tbody>
</table>
<p><code>lsblk</code> tiene que mostrar el tamaño nuevo en el disco antes de seguir; si no lo muestra, <code>growpart</code> dirá <code>NOCHANGE</code>.</p>
<h2 id="2-growpart">2. growpart</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">growpart /dev/sda <span class="m">3</span>
</span></span><span class="line"><span class="cl"><span class="c1"># CHANGED: partition=3 start=4198400 old: size=… end=… new: size=… end=…</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>growpart</code> estira la partición hasta el final del disco, mueve la cabecera de respaldo de GPT y avisa al kernel de la tabla nueva aunque la partición esté montada (usa <code>partx --update</code>). Solo funciona con la <strong>última</strong> partición; si hay una de swap detrás de la raíz, quítala primero (<code>swapoff</code>, <code>fdisk</code> para borrarla, y la vuelves a crear al final).</p>
<p>Sin <code>growpart</code>: <code>parted /dev/sda resizepart 3 100%</code> hace lo mismo con una pregunta de confirmación.</p>
<h2 id="3a-lvm">3a. LVM</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><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">pvresize /dev/sda3                                  <span class="c1"># el PV ocupa la partición ya grande</span>
</span></span><span class="line"><span class="cl">vgs                                                 <span class="c1"># VFree &gt; 0</span>
</span></span><span class="line"><span class="cl">lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv   <span class="c1"># todo el espacio</span>
</span></span><span class="line"><span class="cl">lvextend -r -L +20G /dev/ubuntu-vg/ubuntu-lv        <span class="c1"># o solo una parte</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>-r</code> llama a <code>resize2fs</code> o <code>xfs_growfs</code> según lo que haya en el LV. Sin <code>-r</code>, hazlo tú: <code>resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv</code> o <code>xfs_growfs /</code>.</p>
<h2 id="3b-sin-lvm">3b. Sin LVM</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><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">resize2fs /dev/sda3                 <span class="c1"># ext4: online</span>
</span></span><span class="line"><span class="cl">xfs_growfs /                        <span class="c1"># xfs: online, sobre el punto de montaje</span>
</span></span><span class="line"><span class="cl">btrfs filesystem resize max /       <span class="c1"># btrfs</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="raspberry-pi-y-tarjetas-sd">Raspberry Pi y tarjetas SD</h2>
<p>Mismo guion con otros nombres (imagen de Fedora ARM con LVM):</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">growpart /dev/mmcblk0 <span class="m">3</span>
</span></span><span class="line"><span class="cl">pvresize /dev/mmcblk0p3
</span></span><span class="line"><span class="cl">lvextend -l +100%FREE /dev/fedora/root
</span></span><span class="line"><span class="cl">xfs_growfs -d /
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="trampas">Trampas</h2>
<ul>
<li><strong><code>growpart: NOCHANGE</code></strong>: el kernel todavía no vio el tamaño nuevo. Vuelve al paso 1.</li>
<li><strong><code>growpart</code> falla en un locale que no es inglés</strong> (parsea la salida de <code>sfdisk</code>): <code>LC_ALL=C growpart /dev/sda 3</code>.</li>
<li><strong><code>GPT PMBR size mismatch</code></strong> en <code>fdisk -l</code> después de crecer el disco: la cabecera de respaldo de GPT quedó donde terminaba el disco viejo. <code>growpart</code> la mueve; si lo hiciste a mano, <code>sgdisk -e /dev/sda</code>.</li>
<li><strong>La partición no es la última.</strong> Swap o <code>/home</code> detrás de la raíz: o mueves esas, o añades un disco nuevo y lo sumas al VG (<code>pvcreate /dev/sdb &amp;&amp; vgextend ubuntu-vg /dev/sdb</code>), que en LVM es más rápido que reordenar particiones.</li>
<li><strong>Encoger es otra historia</strong>: ext4 solo desmontado; XFS nunca. Piénsalo antes de dar 2 TB &ldquo;por si acaso&rdquo;.</li>
<li><strong>Windows</strong> se agranda desde <em>Administración de discos → Extender volumen</em>; no aplica nada de esto.</li>
</ul>
<h2 id="ver-también">Ver también</h2>
<ul>
<li><a href="/es/posts/proxmox/plantillas-cloud-init/">Plantillas cloud-init en Proxmox</a>: ahí el <code>qm resize</code> del lado del host.</li>
<li><a href="/es/posts/linux/lvm-activar-volume-group-corte-de-luz/">LVM: no se activa el volume group</a>, por si el paso 3 se pone raro.</li>
<li><a href="/es/posts/k3s/migrar-datos/">Mover los datos de k3s a otro disco</a>, la alternativa cuando lo que se llena es un servicio concreto.</li>
</ul>
]]></content:encoded></item><item><title>LVM: no se activa el volume group después de un corte de luz</title><link>https://inet.sh/es/posts/linux/lvm-activar-volume-group-corte-de-luz/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/linux/lvm-activar-volume-group-corte-de-luz/</guid><description>Tras un apagón el sistema cae en emergency mode o un VG no aparece: cómo diagnosticar con pvs/vgs/lvs, qué hacen vgchange -ay con --activationmode degraded y partial, cuándo usar lvconvert --repair para un thin pool, vgcfgrestore para metadatos rotos, y el archivo de dispositivos de LVM (system.devices) que oculta discos cuyo ID cambió.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</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><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</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">pvs<span class="p">;</span> vgs<span class="p">;</span> lvs -a -o +devices,lv_health_status     <span class="c1"># ¿falta un PV? ¿qué LV no activa y por qué?</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">vgchange -ay                                       <span class="c1"># intento normal</span>
</span></span><span class="line"><span class="cl">vgchange -ay --activationmode degraded             <span class="c1"># LVs raid1/raid5/raid6 de LVM con un PV ausente</span>
</span></span><span class="line"><span class="cl">vgchange -ay --activationmode partial              <span class="c1"># cualquier LV con PV ausente: SOLO para copiar datos, monta ro</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si el fallo es al arrancar (emergency shell porque <code>/</code> o <code>/home</code> no aparecen), los mismos comandos desde el prompt del initramfs, precedidos de <code>lvm</code> si no hay binarios sueltos (<code>lvm vgchange -ay</code>), y luego <code>exit</code>.</p>
<h2 id="qué-mirar-primero">Qué mirar primero</h2>
<table>
  <thead>
      <tr>
          <th>Comando</th>
          <th>Qué te dice</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>pvs</code></td>
          <td><code>WARNING: Couldn't find device with uuid …</code> o <code>[unknown]</code>: un PV no está. Disco muerto, controladora que no enumeró, cable, o un ID que cambió</td>
      </tr>
      <tr>
          <td><code>lvs -a -o +devices,lv_health_status</code></td>
          <td>Atributo <code>p</code> = <em>partial</em>; <code>lv_health_status</code> dice <code>partial</code>, <code>refresh needed</code>, <code>needs check</code>…</td>
      </tr>
      <tr>
          <td><code>dmesg | grep -iE 'sd[a-z]|nvme|error'</code></td>
          <td>¿El disco volvió tras el apagón? ¿Da errores de lectura?</td>
      </tr>
      <tr>
          <td><code>journalctl -b | grep -i lvm</code></td>
          <td>Qué intentó la autoactivación al arrancar y por qué falló</td>
      </tr>
      <tr>
          <td><code>ls /etc/lvm/archive/</code></td>
          <td>Copias de los metadatos anteriores a cada cambio; las necesitas si hay que restaurar</td>
      </tr>
  </tbody>
</table>
<p>Los tres modos de activación (<code>man vgchange</code>): <strong>complete</strong> (por defecto) solo activa LVs con todos sus PV presentes; <strong>degraded</strong> activa LVs RAID de LVM a los que les falta una pata; <strong>partial</strong> activa cualquier LV aunque falten PV, rellenando lo que falta con errores o ceros, y solo sirve para recuperar.</p>
<h2 id="casos">Casos</h2>
<h3 id="1-falta-un-pv">1. Falta un PV</h3>
<p>Arregla primero el hardware: reconecta, cambia de puerto, revisa la controladora. En cuanto <code>pvs</code> lo vea, <code>vgchange -ay</code> y listo.</p>
<p>Si el disco no vuelve y el LV era lineal sobre varios PV, lo que estaba en ese disco se perdió. Rescata el resto en <strong>solo lectura</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">vgchange -ay --activationmode partial
</span></span><span class="line"><span class="cl">mount -o ro /dev/vg01/datos /mnt/rescate
</span></span><span class="line"><span class="cl">rsync -a /mnt/rescate/ /otro/sitio/
</span></span></code></pre></td></tr></table>
</div>
</div><p>Y solo después de copiar, deja el VG limpio: <code>vgreduce --removemissing --force vg01</code>.</p>
<h3 id="2-lvs-raid-de-lvm-raid1-raid5-raid6">2. LVs RAID de LVM (raid1, raid5, raid6)</h3>
<p>Con una pata ausente arrancan en modo degradado:</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">vgchange -ay --activationmode degraded
</span></span></code></pre></td></tr></table>
</div>
</div><p>Después, reemplaza el PV: <code>vgextend vg01 /dev/sdX</code> con el disco nuevo y <code>lvconvert --repair vg01/datos</code>. Si el LV no se deja activar ni así (<code>reload ioctl … failed</code>, subvolúmenes <code>_rimage_</code> activos pero el LV no), estás en el escenario donde el tooling de LVM RAID se queda corto; la restauración desde backup es la salida honesta. Para RAID con paridad, <a href="/es/posts/linux/mdadm-anadir-disco-crecer-raid5/">mdadm</a> debajo de LVM da mejores herramientas de recuperación.</p>
<h3 id="3-thin-pool">3. Thin pool</h3>
<p>Los thin pools son los que más sufren un corte: al arrancar, <code>thin_check</code> encuentra la metadata inconsistente y LVM se niega:</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-text" data-lang="text"><span class="line"><span class="cl">Check of pool vg01/pool0 failed (status:1). Manual repair required!
</span></span></code></pre></td></tr></table>
</div>
</div><p>El arreglo es el que dice el mensaje, con el pool <strong>inactivo</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">lvconvert --repair vg01/pool0
</span></span><span class="line"><span class="cl">vgchange -ay vg01
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>--repair</code> reconstruye la metadata en un LV nuevo y deja la vieja como <code>pool0_meta0</code>; cuando compruebes que los volúmenes thin montan bien, <code>lvremove vg01/pool0_meta0</code>. Un thin pool con un PV ausente no se activa ni en modo <code>degraded</code>; ahí solo queda <code>partial</code> para copiar.</p>
<h3 id="4-metadatos-rotos-pvs-presentes-vg-incompleto-o-unknown">4. Metadatos rotos (PVs presentes, VG &ldquo;incompleto&rdquo; o &ldquo;unknown&rdquo;)</h3>
<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">vgcfgrestore --list vg01                                <span class="c1"># archivos en /etc/lvm/archive con fecha y motivo</span>
</span></span><span class="line"><span class="cl">vgcfgrestore -f /etc/lvm/archive/vg01_00042-1234567890.vg vg01
</span></span><span class="line"><span class="cl">vgchange -ay vg01
</span></span></code></pre></td></tr></table>
</div>
</div><p>Solo para metadatos: si lo que falta es un disco, restaurar la configuración no lo trae de vuelta.</p>
<h3 id="5-el-disco-está-pero-lvm-lo-ignora">5. El disco está, pero LVM lo ignora</h3>
<p>En RHEL 9, Fedora y derivados LVM solo mira los dispositivos listados en <code>/etc/lvm/devices/system.devices</code>. Si el apagón hizo que un disco volviera con otro identificador (cambio de controladora, WWID distinto, disco clonado), LVM no lo considera aunque <code>lsblk</code> lo muestre:</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">lvmdevices                          <span class="c1"># lista actual</span>
</span></span><span class="line"><span class="cl">lvmdevices --adddev /dev/sdc        <span class="c1"># añadir el dispositivo</span>
</span></span><span class="line"><span class="cl">vgimportdevices -a                  <span class="c1"># o importar todos los VG que encuentre</span>
</span></span><span class="line"><span class="cl">vgchange -ay
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="después-de-activar">Después de activar</h2>
<p>Un apagón rompe sistemas de archivos con más frecuencia que LVM. Antes de montar en escritura:</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">fsck -n /dev/vg01/datos        <span class="c1"># ext4: solo mirar</span>
</span></span><span class="line"><span class="cl">xfs_repair -n /dev/vg01/datos  <span class="c1"># xfs: solo mirar</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Y si el resultado da miedo, monta <code>ro</code>, copia, y repara después.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong><code>partial</code> no arregla nada</strong>: lo que falta se lee como ceros o errores y cualquier escritura ahí se pierde. Monta en solo lectura y copia.</li>
<li><strong>No hagas <code>vgreduce --removemissing</code> antes de copiar.</strong> Es lo último, no lo primero.</li>
<li><strong><code>/etc/lvm/backup</code> y <code>/etc/lvm/archive</code> valen oro</strong> y viven en el mismo disco que puede fallar. Cópialos fuera de la máquina de vez en cuando (<code>vgcfgbackup -f /ruta/externa/%s.vg</code>).</li>
<li><strong>En VMs el &ldquo;corte de luz&rdquo; es un stop forzado</strong>; misma receta. Y si lo que no arranca es el propio GRUB con root en LVM, es <a href="/es/posts/proxmox/grub-rescue-disk-lvmid-not-found/">otro problema</a>.</li>
</ul>
<p>Referencias: <code>man 8 vgchange</code>, <code>man 7 lvmthin</code> y <code>man 8 lvmdevices</code>.</p>
]]></content:encoded></item><item><title>Proxmox: error: disk 'lvmid/…' not found en grub rescue</title><link>https://inet.sh/es/posts/proxmox/grub-rescue-disk-lvmid-not-found/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/proxmox/grub-rescue-disk-lvmid-not-found/</guid><description>Un nodo Proxmox VE que arranca en &amp;#39;error: disk lvmid/... not found, grub rescue&amp;gt;&amp;#39; con root en LVM: es un bug de GRUB leyendo los metadatos de LVM cuando el ring buffer da la vuelta. Workaround desde la ISO (un cambio cualquiera en LVM) y arreglo permanente reinstalando el GRUB con el fix.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p>Arranca la <strong>ISO de Proxmox → Advanced Options → Install Proxmox VE (Debug mode)</strong>; en el primer shell pulsa <code>Ctrl+D</code> para llegar al segundo, que ya tiene LVM:</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">vgscan
</span></span><span class="line"><span class="cl">vgchange -ay
</span></span><span class="line"><span class="cl">lvcreate -L 4M pve -n grubtemp   <span class="c1"># cualquier cambio en los metadatos de LVM sirve</span>
</span></span><span class="line"><span class="cl">reboot
</span></span></code></pre></td></tr></table>
</div>
</div><p>Con el nodo ya arriba, limpia y deja el arreglo permanente:</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">lvremove pve/grubtemp
</span></span><span class="line"><span class="cl"><span class="o">[</span> -d /sys/firmware/efi <span class="o">]</span> <span class="o">&amp;&amp;</span> apt install grub-efi-amd64     <span class="c1"># UEFI</span>
</span></span><span class="line"><span class="cl"><span class="c1"># BIOS legacy: grub-install /dev/sdX &amp;&amp; update-grub        # el disco, no la partición</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="el-error">El error</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><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">error: disk &#39;lvmid/Xxxxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xxxxxx/Yyyyyy-yyyy-yyyy-yyyy-yyyy-yyyy-yyyyyy&#39; not found.
</span></span><span class="line"><span class="cl">Entering rescue mode...
</span></span><span class="line"><span class="cl">grub rescue&gt;
</span></span></code></pre></td></tr></table>
</div>
</div><p>El disco está bien, el VG <code>pve</code> está bien y los datos están bien. A veces el mismo bug avisa antes, durante un <code>apt full-upgrade</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">/usr/sbin/grub-probe: error: disk `lvmid/...&#39; not found.
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si ves eso en <code>update-grub</code>, aplica el arreglo <strong>antes</strong> de reiniciar.</p>
<h2 id="por-qué-pasa">Por qué pasa</h2>
<p>LVM guarda sus metadatos en disco en un <strong>ring buffer</strong>. Cada cambio (crear, borrar o redimensionar un LV) escribe una copia nueva más adelante en el buffer, y tarde o temprano el texto da la vuelta al final. GRUB 2.06 de Debian 11 (PVE 7, <code>2.06-3</code>) no sabe leer esa vuelta: no encuentra el VG, no encuentra el LV <code>pve/root</code> y cae a <code>grub rescue</code>.</p>
<p>Por eso &ldquo;arreglarlo&rdquo; es tan raro como hacer un cambio cualquiera en LVM: los metadatos se reescriben en otra posición, normalmente sin vuelta, y GRUB los vuelve a leer. Y por eso <strong>vuelve a pasar</strong> semanas o meses después, cuando el buffer da la vuelta otra vez, si el GRUB instalado en el disco sigue siendo el viejo.</p>
<p>En el lab el cambio que sacó del apuro fue <code>lvextend -L +1G /dev/pve/root</code>. Funciona igual, pero deshacerlo con <code>lvreduce</code> sobre el root montado es jugar con fuego; si lo hiciste así, mejor conserva el 1G (<code>resize2fs /dev/pve/root</code>) o usa el LV de usar y tirar del En corto.</p>
<h2 id="procedimiento-completo">Procedimiento completo</h2>
<ol>
<li>
<p><strong>Entra al sistema.</strong> Dos vías desde la ISO de Proxmox:</p>
<ul>
<li><strong>Rescue Boot</strong> (Advanced Options): la ISO busca la instalación y arranca su kernel saltándose el GRUB roto. Si funciona, ya estás dentro del sistema real y puedes pasar al paso 3.</li>
<li><strong>Debug mode</strong>: shell de rescate. <code>Ctrl+D</code> en el primer prompt; en el segundo ya están los módulos de LVM.</li>
</ul>
</li>
<li>
<p><strong>Dispara un cambio de metadatos</strong> (solo si entraste por Debug mode):</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">vgscan
</span></span><span class="line"><span class="cl">vgchange -ay
</span></span><span class="line"><span class="cl">lvcreate -L 4M pve -n grubtemp
</span></span><span class="line"><span class="cl">reboot
</span></span></code></pre></td></tr></table>
</div>
</div></li>
<li>
<p><strong>Ya en el sistema normal</strong>, quita el LV temporal y mira si los metadatos siguen dando la vuelta:</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">lvremove pve/grubtemp
</span></span><span class="line"><span class="cl">vgscan -vvv 2&gt;<span class="p">&amp;</span><span class="m">1</span> <span class="p">|</span> grep <span class="s1">&#39;Reading metadata&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Una salida que termina en <code>(+0)</code> significa sin vuelta; cualquier otro valor, que el problema va a repetirse hasta que reinstales GRUB.</p>
</li>
<li>
<p><strong>Reinstala el GRUB con el fix.</strong> El paquete de PVE 8 y 9 (<code>2.06-13</code> o más nuevo) ya lo trae, pero el binario que está en el ESP o en el MBR solo se reescribe cuando el paquete se (re)instala:</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"><span class="c1"># UEFI: en nodos actualizados desde PVE 7 suele estar grub-pc y no grub-efi-amd64</span>
</span></span><span class="line"><span class="cl">dpkg -l <span class="p">|</span> grep -E <span class="s1">&#39;^ii +grub-&#39;</span>
</span></span><span class="line"><span class="cl">apt install grub-efi-amd64
</span></span><span class="line"><span class="cl">efibootmgr -v            <span class="c1"># confirma la entrada &#34;proxmox&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># BIOS legacy</span>
</span></span><span class="line"><span class="cl">grub-install /dev/sdX
</span></span><span class="line"><span class="cl">update-grub
</span></span></code></pre></td></tr></table>
</div>
</div><p>En PVE 7 el arreglo de verdad es actualizar a PVE 8; el workaround solo te compra tiempo.</p>
</li>
</ol>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong><code>grub rescue&gt;</code> no te va a sacar de esta.</strong> <code>ls (lvm/pve-root)</code> no muestra nada porque el módulo <code>lvm</code> es precisamente el que no entiende los metadatos. No pierdas tiempo ahí.</li>
<li><strong>Root en ZFS no pasa por aquí.</strong> Los nodos con <code>rpool</code> arrancan con <code>proxmox-boot-tool</code>; ese es otro camino y otros errores.</li>
<li><strong>Apunta a las particiones correctas</strong> si haces <code>grub-install</code> a mano: el disco (<code>/dev/sda</code>), no <code>/dev/sda1</code>; el ESP montado en <code>/boot/efi</code> para UEFI.</li>
<li><strong>En clúster</strong>, arreglado un nodo revisa los demás con <code>vgscan -vvv | grep 'Reading metadata'</code>; la instalación es la misma y el buffer también.</li>
</ul>
<p>Referencias: <a href="https://pve.proxmox.com/wiki/Recover_From_Grub_Failure">Recover From Grub Failure</a> en la wiki de Proxmox y el <a href="https://forum.proxmox.com/threads/error-disk-lvmid-not-found-grub-rescue.123512/">hilo del foro</a>.</p>
]]></content:encoded></item></channel></rss>