¿Cómo configurar un dispositivo loopback ampliable?

23

Sé que puedo crear y usar un dispositivo de bucle invertido como este:

# Create the file
truncate disk.img --size 2G
# Create a filesystem
mkfs.ext4 disk.img
# Mount to use
mount disk.img /mnt
# Clean up
umount /mnt

Sin embargo, en este caso, la imagen del disco se fija en 2 GB. Tiene 2 GB cuando está vacío y 2 GB cuando está lleno. No va a crecer

¿Existe algún tipo de dispositivo de bucle invertido que pueda crecer en tamaño? O bien, ¿hay algún tipo de dispositivo de bucle invertido que solo necesite la cantidad de espacio que almacena?

phunehehe
fuente
1
Como el archivo es escaso, solo debe usar la cantidad de espacio almacenado en su ejemplo.
jordanm
Dependiendo de lo que intente lograr con esto, la herramienta virt-make-fspuede ser útil. Se puede usar para crear imágenes ext2 usando archivos tar.
Kotte

Respuestas:

17

Cree un dispositivo de archivo disperso, utilizando dd.

df -hm # to show where we started
dd of=sparse-file bs=1k seek=102400 count=0 # creates a 100Meg sparsefile
mkfs.ext4 sparse-file
mkdir blah
mount sparse-file blah
cp somefile blah
ls -lahts sparse-file  # The 's' option will report the actual space taken in the first column
ls -lahts blah
df -hm # doublecheck my work
echo 'profit :)'

Referencia: artículo de archivo escaso de Wikipedia

Stephan
fuente
10

El comentario de @ jordanm lo clavó. Supuse que el tamaño del archivo estaba fijo cuando miraba la salida de ls -lh disk.img. Cuando utilicé ls -s disk.imgcomo en la respuesta de @ Stephan, se muestra el tamaño real del archivo. Como prueba, creé un archivo de imagen que es más grande que mi disco duro:

truncate test.img -s 1000G

Y funciona bien, lo que significa que la respuesta está en la pregunta :)

phunehehe
fuente
Truncate funciona muy bien, por cierto, solo pensé en mostrar un comando alternativo para crear dicho archivo disperso y (dependiendo de su distribución de Linux y conjunto de herramientas) que no necesariamente necesita usar losetup, ya que 'montar' en su actual la encarnación es bastante inteligente para configurar opciones razonables cuando las necesita.
Stephan
La parte sobre el montaje es interesante. Es solo que esta vez porque también necesito LUKS (cryptsetup luksFormat / dev / loop0), necesito losetup: D
phunehehe
Otro comando práctico de Linux para crear el archivo disperso es fallocate(1).
Lloeki
2

Puede hacerlo manualmente con dd seek, o más fácil, ya que usa truncate:

truncate -s 100M file
mkfs.ext4 -m0 file
#mount, do whatever
umount /mountpoint
#let's grow it to 200 MB
truncate -s 200M file
e2fsck -f file && resize2fs file
#done

Un trazador de líneas 2 para crecer, casi no requiere automatización aquí, me atrevería a decir :)

Malina Salina
fuente