<?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>Ext4 on inetshell</title><link>https://inet.sh/es/tags/ext4/</link><description>Recent content in Ext4 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/ext4/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></channel></rss>