<?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>Badblocks on inetshell</title><link>https://inet.sh/es/tags/badblocks/</link><description>Recent content in Badblocks 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/badblocks/index.xml" rel="self" type="application/rss+xml"/><item><title>badblocks en discos grandes: 'Value too large for defined data type (must be 32-bit value)'</title><link>https://inet.sh/es/posts/linux/badblocks-discos-grandes-32-bit/</link><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/linux/badblocks-discos-grandes-32-bit/</guid><description>badblocks muere al instante en discos de más de 4 TB con &amp;#39;Value too large for defined data type invalid end block: must be 32-bit value&amp;#39; porque cuenta bloques en un entero de 32 bits. Con -b 4096 llega a 16 TiB y -b 8192 más allá. Qué modo usar (lectura, -n, -w), cuánto tarda, y cuándo es mejor un test SMART largo.</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">badblocks -b <span class="m">4096</span> -sv /dev/sdX          <span class="c1"># solo lectura: no toca datos</span>
</span></span><span class="line"><span class="cl">badblocks -b <span class="m">4096</span> -nsv /dev/sdX         <span class="c1"># lectura + escritura no destructiva (el doble de lento)</span>
</span></span><span class="line"><span class="cl">badblocks -b <span class="m">4096</span> -wsv /dev/sdX         <span class="c1"># DESTRUCTIVO: escribe patrones y borra todo el disco</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>-b 4096</code> sube el techo de 4 TiB a 16 TiB. Para discos de más de 16 TiB, <code>-b 8192</code>.</p>
<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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">badblocks: Value too large for defined data type invalid end block (7814026584): must be 32-bit value
</span></span></code></pre></td></tr></table>
</div>
</div><p>Sale antes de leer un solo sector. El número es la cantidad de bloques del disco con el tamaño de bloque por defecto (1 KiB): 7 814 026 584 bloques son 8 TB.</p>
<h2 id="por-qué-pasa">Por qué pasa</h2>
<p><code>badblocks</code> numera los bloques con un entero de <strong>32 bits</strong>: como mucho 4 294 967 295. Con el bloque por defecto de 1 KiB eso son <strong>4 TiB</strong> (unos 4.4 TB comerciales); cualquier disco mayor desborda el contador. Subir el tamaño de bloque multiplica el techo:</p>
<table>
  <thead>
      <tr>
          <th><code>-b</code></th>
          <th>Techo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>1024 (por defecto)</td>
          <td>4 TiB</td>
      </tr>
      <tr>
          <td>4096</td>
          <td>16 TiB</td>
      </tr>
      <tr>
          <td>8192</td>
          <td>32 TiB</td>
      </tr>
      <tr>
          <td>16384</td>
          <td>64 TiB</td>
      </tr>
  </tbody>
</table>
<p>4096 es además el tamaño natural: coincide con el sector físico de los discos actuales (<code>blockdev --getpbsz /dev/sdX</code> lo confirma) y con el bloque por defecto de ext4, que es lo que importa si vas a pasarle la lista a <code>e2fsck</code>.</p>
<h2 id="qué-modo-usar">Qué modo usar</h2>
<table>
  <thead>
      <tr>
          <th>Modo</th>
          <th>Qué hace</th>
          <th>Cuándo</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>-sv</code> (por defecto)</td>
          <td>Lee todo el disco una vez</td>
          <td>Disco con datos; chequeo rápido</td>
      </tr>
      <tr>
          <td><code>-nsv</code></td>
          <td>Lee, escribe un patrón, restaura el original, bloque a bloque</td>
          <td>Disco con datos que quieres probar en escritura. Desmontado; un corte de luz a medias pierde el bloque en curso</td>
      </tr>
      <tr>
          <td><code>-wsv</code></td>
          <td>Cuatro pasadas de escritura (0xaa, 0x55, 0xff, 0x00) con verificación</td>
          <td>Disco nuevo o de segunda mano <strong>antes</strong> de meterle datos (<em>burn-in</em>)</td>
      </tr>
  </tbody>
</table>
<p>Tiempo: una pasada de lectura tarda capacidad ÷ velocidad (un disco de 8 TB a 180 MB/s, unas 13 horas); <code>-w</code> son ocho pasadas (cuatro de escritura y cuatro de lectura), varios días en discos grandes. Lánzalo dentro de <code>tmux</code> o <code>screen</code>.</p>
<p>Opciones útiles:</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">badblocks -b <span class="m">4096</span> -c <span class="m">1024</span> -wsv /dev/sdX          <span class="c1"># -c: bloques por pasada (más memoria, algo más rápido)</span>
</span></span><span class="line"><span class="cl">badblocks -b <span class="m">4096</span> -sv -o /root/sdX-bad.txt /dev/sdX   <span class="c1"># -o: lista de bloques malos</span>
</span></span><span class="line"><span class="cl">e2fsck -f -l /root/sdX-bad.txt /dev/sdX1              <span class="c1"># marcarlos en un ext4 (mismo -b que el bloque del fs)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="lo-que-un-disco-moderno-no-te-dice-con-badblocks">Lo que un disco moderno no te dice con badblocks</h2>
<p>Los discos remapean sectores defectuosos por su cuenta: si <code>badblocks</code> llega a encontrar alguno, es que el disco ya agotó o está agotando la reserva. Antes y después de cualquier pasada, mira SMART:</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">smartctl -A /dev/sdX <span class="p">|</span> grep -E <span class="s1">&#39;Reallocated_Sector|Current_Pending|Offline_Uncorrectable&#39;</span>
</span></span><span class="line"><span class="cl">smartctl -t long /dev/sdX          <span class="c1"># test largo dentro del propio disco, sin tráfico por el bus</span>
</span></span><span class="line"><span class="cl">smartctl -l selftest /dev/sdX      <span class="c1"># resultado cuando termine (horas)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Para decidir si un disco de segunda mano entra al pool, <code>smartctl -t long</code> más los atributos 5, 197 y 198 dicen más que <code>badblocks</code> en una fracción del tiempo. <code>badblocks -w</code> sigue teniendo sentido como <em>burn-in</em> de un disco nuevo, porque fuerza escritura en toda la superficie.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong><code>-w</code> sobre el dispositivo equivocado borra el disco equivocado.</strong> <code>lsblk -o NAME,SIZE,MODEL,SERIAL</code> antes de escribir la orden, y nunca sobre uno montado.</li>
<li><strong>Puentes USB-SATA que se reinician</strong> a mitad de una pasada de días: si puedes, conecta el disco a SATA directo. Un reinicio del puente aborta el test y no deja resultado parcial.</li>
<li><strong><code>mkfs.ext4 -c</code></strong> ejecuta <code>badblocks</code> por ti con el bloque del sistema de archivos (4 KiB), así que no desborda; pero es un <code>mkfs</code>, destructivo por definición.</li>
<li><strong>Controladoras HPE Smart Array</strong>: los discos detrás de la controladora se consultan por SMART con <code>smartctl -d cciss,N /dev/sda</code>; <code>badblocks</code> ve el volumen lógico, no cada disco.</li>
<li><strong>En ZFS</strong> no uses <code>badblocks</code> sobre un miembro del pool: <code>zpool scrub</code> hace la comprobación con checksums reales de los datos.</li>
</ul>
<p>Referencias: <a href="https://wiki.archlinux.org/title/Badblocks">badblocks</a> en la ArchWiki y <code>man 8 badblocks</code>.</p>
]]></content:encoded></item></channel></rss>