Archivos dispersos (sparse files)
“Permite usar más eficiente de almacenamiento y por consiguiente ahorro de costos”.
¿Qué son?
Son un tipos de archivos que prácticamente están vacíos (casi no usan espacio real de almacenamiento), y simulan un capacidad de almacenamiento alto. Se componen de mentadata y bloques de bytes con valor 0 cero.
Por ejemplo se puede crear y almacenar un disco vacío de 500GB para una máquina virtual, y el tamaño real de uso es 0 cero bytes.
En el disco, el contenido de los archivos es almacenado en bloques de tamaño fijo (usualmente 4KB). Cuando todos los bytes contenidos en ese bloque son 0, el sistema de archivo que implementa el soporte para “sparse files” no almacena el bloque en disco, en vez de eso mantiene la información en la meta data del archivo.
Las ventajas de usar archivos sparse.
Los bloques vacíos no usan espacio en disco. Solo los identificadores son almacenados en la metadato el cual usa muy poco espacio.
La lectura de bloques vacíos es inmediata, ya que el datos no es leído de disco.El sistema de archivos sabe que todos los bytes en ese bloque es 0, por lo que solo asigna el valor 0 en todos los bytes, haciendo que la información esté disponible de manera inmediata. No hay necesidad de acceder al lento sistema almacenamiento.
La escritura de bloques vacíos es inmediato, ya que el datos solo actualiza la meta data para agregar el ID del bloque a la lista de bloques con valor 0.
Soporte
La mayoría de los sistemas operativos modernos soportan estos archivos como Linux, Windows, BSD, MacOS etc.
Usos
El uso más común actualmente, es para almacenamiento virtual (Thin provisioning) como los discos de máquinas virtuales. Se entrega a la aplicación un almacenamiento generalmente grande sin que realmente se use esa cantidad real de datos en el sistema de almacenamiento, haciendo uso muy óptimo de ese recurso.
Creación de archivos sparse.
Usado el comando truncate. Crearemos un archivo de tamaño máximo de 500GB.
truncate -s 500G 500G-file.img
Usando dd, ejemplo:
dd if=/dev/zero of=1GB-file.img bs=1 count=0 seek=1G 0+0 records in 0+0 records out 0 bytes (0 B) copied, 1.3847e-05 s, 0.0 kB/s
Los archivos sparse tienen diferentes tamaños:
- Tamaño aparente: el cuál es el máximo tamaño que un archivo sparse puede crecer.
- Tamaño actual: La cantidad real de espacio usado.
Para saber el tamaño aparente usar.
du -sh --apparent-size 500G-file.img 500G 500G-file.img
Para saber el tamaño real usar:
du -sh 500G-file.img 0 500G-file.img
Ejemplo de uso:
Crear un sparse como sistema de archivo.
En este ejemplo crearemos un archivo sparse con un tamaño máximo de 1TB y se montara en el directorio /mnt/1024GB
truncate -s 1T TB-file.img
Verificamos el tamaño:
du -h --apparent-size TB-file.img 1.0T TB-file.img du -h TB-file.img 0 TB-file.img [email protected]~/test#
Creamos el sistema de archivos xfs por ejemplo:
mkfs.xfs TB-file.img
Montamos en /mnt/1024GB
mkdir /mnt/1024GB mount -o loop /root/test/TB-file.img /mnt/1024GB
Verificamos
[email protected]~/test#df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/lvmssse11sp3-root 79G 4.4G 71G 6% / udev 48G 428K 48G 1% /dev tmpfs 48G 0 48G 0% /dev/shm /dev/sda1 387M 42M 326M 12% /boot /dev/loop0 1.0T 33M 1.0T 1% /mnt/1024GB [email protected]~/test#
Escribimos datos, y verificamos el uso real del archivo sparse:
tar cf /mnt/1024GB/etc.tar /etc
El tamaño del archivo tar es:
du -sh /mnt/1024GB/etc.tar 70M /mnt/1024GB/etc.tar
El tamano aparente y real del sparse file es:
[email protected]~/test#du -h --apparent-size /root/test/TB-file.img 1.0T /root/test/TB-file.img [email protected]~/test#du -sh /root/test/TB-file.img 582M /root/test/TB-file.img [email protected]~/test#<br>
Para el sistema de archivo tenemos un disco de 1TB de espacio usable, sin embargo solo está usando 582 MB reales de almacenamiento.