¿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?


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


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 :)


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 :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.