<?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>Gpart on inetshell</title><link>https://inet.sh/es/tags/gpart/</link><description>Recent content in Gpart on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/gpart/index.xml" rel="self" type="application/rss+xml"/><item><title>FreeBSD: reemplazar un disco del mirror ZFS de arranque (zroot) con gpart</title><link>https://inet.sh/es/posts/zfs/freebsd-reemplazar-disco-mirror-arranque/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/zfs/freebsd-reemplazar-disco-mirror-arranque/</guid><description>Cambiar un disco muerto de un mirror zroot en FreeBSD 13/14: clonar la tabla de particiones con gpart backup | gpart restore, reinstalar el bootcode BIOS (pmbr + gptzfsboot) y poblar la ESP con loader.efi para UEFI (boot1.efi ya está obsoleto), zpool replace o attach con la partición correcta, swap y resilver.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p>Disco bueno <code>ada0</code>, disco nuevo <code>ada3</code>, el muerto era <code>ada1</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><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><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</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">zpool status zroot                                  <span class="c1"># ada1p4 FAULTED / UNAVAIL</span>
</span></span><span class="line"><span class="cl">gpart backup ada0 <span class="p">|</span> gpart restore -F ada3           <span class="c1"># clona la tabla de particiones</span>
</span></span><span class="line"><span class="cl">gpart show ada3                                     <span class="c1"># p1 efi, p2 freebsd-boot, p3 freebsd-swap, p4 freebsd-zfs</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Bootcode BIOS: el índice es el de la partición freebsd-boot</span>
</span></span><span class="line"><span class="cl">gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i <span class="m">2</span> ada3
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># UEFI: rellena la ESP</span>
</span></span><span class="line"><span class="cl">newfs_msdos -F <span class="m">32</span> -c <span class="m">1</span> /dev/ada3p1
</span></span><span class="line"><span class="cl">mount -t msdosfs /dev/ada3p1 /mnt
</span></span><span class="line"><span class="cl">mkdir -p /mnt/EFI/BOOT /mnt/EFI/FREEBSD
</span></span><span class="line"><span class="cl">cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.EFI
</span></span><span class="line"><span class="cl">cp /boot/loader.efi /mnt/EFI/FREEBSD/LOADER.EFI
</span></span><span class="line"><span class="cl">umount /mnt
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># El disco nuevo entra al mirror en el lugar del muerto</span>
</span></span><span class="line"><span class="cl">zpool replace zroot ada1p4 ada3p4
</span></span><span class="line"><span class="cl">zpool status zroot                                  <span class="c1"># resilver en curso</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Cuando <code>zpool status</code> diga <code>ONLINE</code> en los dos, prueba a arrancar <strong>solo</strong> con el disco nuevo.</p>
<h2 id="antes-de-empezar">Antes de empezar</h2>
<ul>
<li><strong>Identifica el disco.</strong> <code>zpool status</code> nombra el miembro muerto (<code>ada1p4</code>, o un GUID largo si ya no está). <code>camcontrol devlist</code> lista los discos con modelo y serie para saber cuál bahía tocar.</li>
<li><strong>Si el disco malo sigue conectado</strong>, sácalo del pool antes de tirar del cable: <code>zpool offline zroot ada1p4</code>.</li>
<li><strong>Layout.</strong> Una instalación por defecto de FreeBSD 13/14 con zroot crea, por disco: <code>p1</code> <code>efi</code>, <code>p2</code> <code>freebsd-boot</code>, <code>p3</code> <code>freebsd-swap</code>, <code>p4</code> <code>freebsd-zfs</code>. Instalaciones antiguas o a mano varían: mira <code>gpart show ada0</code> y ajusta los índices. El <code>-i</code> del bootcode es el de <code>freebsd-boot</code>.</li>
<li><strong>El disco nuevo tiene que ser igual o mayor.</strong> <code>gpart restore</code> copia tamaños exactos; si es mayor, el resto queda libre y lo puedes usar después.</li>
</ul>
<h2 id="por-qué-particiones-y-no-el-disco-entero">Por qué particiones y no el disco entero</h2>
<p>En un pool de arranque cada disco lleva las particiones de boot además de la de ZFS. Si haces <code>zpool replace zroot ada1p4 ada3</code> con el disco crudo, el mirror funciona pero ese disco <strong>no puede arrancar</strong>: el día que <code>ada0</code> muera, tendrás los datos y ningún cargador. Por eso el orden es: particionar igual, bootcode, y solo entonces <code>zpool replace</code> con la partición.</p>
<h2 id="paso-a-paso">Paso a paso</h2>
<p><strong>1. Clonar la tabla de particiones.</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">gpart backup ada0 <span class="p">|</span> gpart restore -F ada3
</span></span><span class="line"><span class="cl">gpart show ada3
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>-F</code> destruye lo que hubiera en <code>ada3</code>. Si el pool usa etiquetas GPT (<code>gpt/zfs0</code> en <code>zpool status</code>) en vez de nombres <code>adaXpY</code>, ponle la suya al nuevo: <code>gpart modify -i 4 -l zfs1 ada3</code>, y usa <code>gpt/zfs1</code> en el <code>zpool replace</code>.</p>
<p><strong>2. Bootcode.</strong> Instala los dos: así arranca tanto si la placa está en modo BIOS/CSM como en UEFI.</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"><span class="c1"># BIOS: MBR protector + gptzfsboot en la partición freebsd-boot (p2 en el layout por defecto)</span>
</span></span><span class="line"><span class="cl">gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i <span class="m">2</span> ada3
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># UEFI: la ESP (p1) es un FAT32 con loader.efi en las rutas estándar</span>
</span></span><span class="line"><span class="cl">newfs_msdos -F <span class="m">32</span> -c <span class="m">1</span> /dev/ada3p1
</span></span><span class="line"><span class="cl">mount -t msdosfs /dev/ada3p1 /mnt
</span></span><span class="line"><span class="cl">mkdir -p /mnt/EFI/BOOT /mnt/EFI/FREEBSD
</span></span><span class="line"><span class="cl">cp /boot/loader.efi /mnt/EFI/BOOT/BOOTX64.EFI
</span></span><span class="line"><span class="cl">cp /boot/loader.efi /mnt/EFI/FREEBSD/LOADER.EFI
</span></span><span class="line"><span class="cl">umount /mnt
</span></span></code></pre></td></tr></table>
</div>
</div><p>Las guías viejas dicen <code>gpart bootcode -p /boot/boot1.efifat -i 1</code>; <code>boot1.efi</code> está obsoleto en FreeBSD actual y el camino documentado en <code>loader.efi(8)</code> es copiar <code>loader.efi</code> a la ESP. Si quieres una entrada propia en el firmware: <code>efibootmgr -c -l /mnt/EFI/FREEBSD/LOADER.EFI -L FreeBSD-ada3 -a</code>.</p>
<p><strong>3. Reemplazar en el pool.</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zpool replace zroot ada1p4 ada3p4
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si el miembro muerto ya no aparece y el mirror quedó con un solo disco, en vez de <code>replace</code> se <strong>añade</strong> al superviviente: <code>zpool attach zroot ada0p4 ada3p4</code>.</p>
<p><strong>4. Resilver.</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">zpool status zroot           <span class="c1"># scan: resilver in progress ... % done</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Horas, según lo lleno que esté el pool. Opcional, para que el resilver no ceda tanto el turno a la carga normal:</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">sysctl vfs.zfs.resilver_min_time_ms<span class="o">=</span><span class="m">5000</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>5. Swap.</strong> Si <code>/etc/fstab</code> tenía <code>/dev/ada1p3</code> como swap, cámbialo a <code>/dev/ada3p3</code> (o mejor, a etiquetas <code>gpt/swapN</code> que no cambien con el nombre del disco) y <code>swapon -a</code>.</p>
<p><strong>6. Comprobar el arranque.</strong> Con el resilver terminado, apaga, desconecta <code>ada0</code> (o cambia el orden de arranque) y arranca desde el nuevo. Si entra, vuelve a conectar y <code>zpool status</code> debe seguir <code>ONLINE</code> sin quejas. Una <code>zpool scrub zroot</code> de cierre no está de más.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong><code>gpart restore -F</code> no pregunta.</strong> Revisa dos veces cuál es el disco nuevo; <code>camcontrol devlist</code> y <code>diskinfo -v ada3</code> (serie) antes de escribir.</li>
<li><strong>Bootcode de un solo tipo</strong> deja el disco arrancable solo en un modo de firmware. Pon los dos.</li>
<li><strong>Sector físico distinto</strong> (512 vs 4K) puede hacer que <code>zpool replace</code> se queje del <code>ashift</code>; en un mirror moderno con <code>ashift=12</code> un disco 4Kn entra sin problema, uno con <code>ashift=9</code> no.</li>
<li><strong>Disco más grande</strong>: tras el resilver, <code>gpart resize -i 4 ada3</code> y <code>zpool online -e zroot ada3p4</code>; cuando los dos discos del mirror sean grandes, el pool crece.</li>
<li><strong>Los nombres <code>adaX</code> cambian</strong> al quitar discos; las etiquetas GPT y los GUID no. Para la operación usa lo que muestre <code>zpool status</code> en ese momento.</li>
</ul>
<h2 id="ver-también">Ver también</h2>
<ul>
<li><a href="/es/posts/zfs/reemplazar-discos/">Reemplazar un disco en un pool ZFS</a> — la versión Linux/Proxmox, sin particiones de arranque.</li>
<li><a href="/es/posts/zfs/importar-pool-despues-apagado/">Importar un pool después de un apagón</a>.</li>
<li>FreeBSD: <code>man 8 loader.efi</code>, <code>man 8 gpart</code>, y el <a href="https://farrokhi.net/posts/2020/05/replacing-a-faulty-disk-in-zfs/">artículo de Babak Farrokhi</a> sobre el reemplazo en BIOS.</li>
</ul>
]]></content:encoded></item></channel></rss>