Como configurar um dispositivo de loopback cultivável?

23

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 2 GB quando estão cheios. Não vai crescer.

Existe um tipo de dispositivo de loopback que pode crescer em tamanho? Ou existe um tipo de dispositivo de loopback que precisa apenas do espaço que armazena?

phunehehe
fonte
1
Como o arquivo é escasso, ele deve usar apenas o espaço armazenado no seu exemplo.
Jordanm
Dependendo do que você está tentando realizar, a ferramenta virt-make-fspode ser útil. Pode ser usado para criar imagens ext2 usando arquivos tar.
Kotte

Respostas:

17

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 de arquivo esparso da wikipedia

Stephan
fonte
10

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

truncate test.img -s 1000G

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

phunehehe
fonte
Truncate funciona muito bem, btw, eu apenas pensei em mostrar um comando alternativo para criar o referido arquivo esparso e (dependendo da sua distribuição e conjunto de ferramentas linux) que você não precisa necessariamente usar losetup, como 'mount' a encarnação é bastante inteligente ao definir opções sensatas quando você precisar delas.
Stephan
O pouco sobre montagem é interessante. É só que desta vez, porque eu também preciso LUKS (cryptsetup luksFormat / dev / loop0), eu preciso losetup: D
phunehehe
Outro comando linux útil para criar o arquivo esparso é fallocate(1).
Lloeki
2

Você pode fazê-lo manualmente com dd seek ou mais fácil, desde que você use truncar:

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 liner 2 para cultivá-lo, dificilmente exige automação aqui, eu ousaria dizer :)

Malina Salina
fonte