Como configurar um dispositivo de loopback expansível?

20

Eu sei que posso criar e usar um dispositivo de loopback 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

No entanto, neste caso, a imagem do disco é fixada em 2 GB. São 2 GB quando estão vazios e são 2 GB quando estão cheios. Não vai crescer.

Existe algum tipo de dispositivo de loopback que pode crescer em tamanho? Ou existe algum tipo de dispositivo de loopback que precise de tanto espaço que armazene?

    
por phunehehe 12.12.2013 / 03:13

3 respostas

9

comentário do @ jordanm pregou. Presumi que o tamanho do arquivo foi corrigido quando observei a saída de ls -lh disk.img . Quando usei ls -s disk.img como na resposta do @ Stephan , o tamanho real do arquivo é mostrado. Como teste, criei um arquivo de imagem maior que meu disco rígido:

truncate test.img -s 1000G

E funciona muito bem, o que significa que a resposta está na pergunta:)

    
por 12.12.2013 / 04:37
15

Crie um dispositivo de arquivo esparso, usando 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 :)'

Referência: artigo sobre o arquivo esparso da wikipedia

    
por 12.12.2013 / 04:06
1

Você pode fazer isso manualmente com o dd seek, ou mais fácil, já que você usa o 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

Um 2 liner para cultivá-lo, dificilmente exige automação aqui, eu ousaria dizer :)

    
por 28.11.2014 / 18:12