static-httpd

Sitio web estático (HTML + CSS) que sostiene el blog del autor
Log | Files | Refs

index.html (3623B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      5 <meta name="viewport" content="width=device-width, initial-scale=1" />
      6 <title>Sparse files</title>
      7 <link rel="icon" type="image/png" href="/favicon.png" />
      8 <link rel="stylesheet" type="text/css" href="../article.css" />
      9 </head>
     10 <body>
     11 <header>
     12 <p class="title">Dispersión de archivos (sparse files) como método eficiente de uso del espacio</p>
     13 <p class="date">20 de mayo de 2023 • fjbalon</p>
     14 </header>
     15 <p>En informática, un archivo disperso es un tipo que utiliza más eficientemente el espacio del sistema de archivos cuando los bloques asignados a los archivos están en su mayor parte vacíos. Esto se consigue escribiendo breves metadatos que representan los bloques vacíos en el disco en vez del verdadero espacio 'vacío' que constituye dicho bloque, y utilizando así menos espacio en disco.</p>
     16 <p>Cuando trabajamos clonando discos, a menudo nos surgen problemas de espacio en disco local, debido a que trabajamos con -normalmente- muchos gigabytes, e incluso terabytes hoy día. Los algoritmos de compresión nos ayudan a reducir considerablemente el uso que estas imágenes tienen del disco, permitiendo almacenar un número considerable. Sin embargo, existen ocasiones en las que requerimos trabajar con los discos sin compresión en local, por ejemplo, cuando necesitamos montar uno de ellos y trabajar sobre él. Para ello, la mejor técnica es emplear los conocidos «sparse files», que son un tipo de fichero con un tamaño específico, pero que no reserva dicho espacio en el sistema de ficheros.</p>
     17 <img class="color-invertible" src="resources/schema.png" />
     18 <p>dd permite guardar espacio con este tipo de ficheros usando el parámetro <emb>conv=sparse</emb>. Sin embargo, puede no ser tan optimizado debido al búfer utilizado (<emb>sparse try to seek rather than write the output for NUL input blocks</emb>). Por lo que si utilizamos un tamaño de bloque obs elevado, tendremos poca optimización. Para obviar este problema, podemos emplear directamente cp sobre el archivo comprimido:</p>
     19 <pre><code>gunzip -c /image.img.gz | cp --sparse=always /dev/stdin mini.img</code></pre>
     20 <p>O bien directamente sobre el disco obviando el uso de dd:</p>
     21 <pre><code>cp --sparse=always /dev/sdx mini.img</code></pre>
     22 <p>De tal forma que observamos una optimización general en función de los bits ocupados en disco, y teniendo como resultado una imagen completa sin apenas utilización de disco:</p>
     23 <pre><code>ls -hls
     24 
     25 4,8G -rw-r--r--  1 balon users 477G ene 17 10:03 mini.img
     26 2,3G -rw-r--r--  1 balon users  2,3G ene 13 12:26 sdd.img.gz</code></pre>
     27 <p>Si se quiere profundizar más en el tema puede ser de verdadera utilidad:</p>
     28 <ul>
     29 <li><a href="https://en.wikipedia.org/wiki/Dd_(Unix)">dd - Wikipedia</a> / <a href="https://wiki.archlinux.org/title/Dd">dd - Archlinux Wiki</a></li>
     30 <li><a href="http://blog.tdg5.com/tuning-dd-block-size/">Tuning dd block size</a>, tdg5</li>
     31 <li><a href="https://unix.stackexchange.com/questions/731487/mount-compressed-disk-image-or-clone-with-dd-respecting-free-space">Mount compressed disk image or clone with dd respecting free space</a>, Unix&Linux (Stack Exchange)</li>
     32 <li><a href="https://superuser.com/questions/1136357/why-didnt-dd-conv-sparse-save-space-as-i-expected">Why didn't `dd conv=sparse` save space as I expected?</a>, SuperUser (Stack Exchange)</li>
     33 <li><a href="https://superuser.com/questions/622541/what-does-dd-conv-sync-noerror-do/1075837#1075837">What does dd conv=sync,noerror do?</a>, SuperUser (Stack Exchange)</li>
     34 </ul>
     35 </body>
     36 </html>