Comment configurer un périphérique de bouclage évolutif?

23

Je sais que je peux créer et utiliser un périphérique de bouclage comme celui-ci:

# 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

Cependant, dans ce cas, l'image disque est fixée à 2 Go. Il est de 2 Go lorsqu'il est vide et de 2 Go lorsqu'il est plein. Il ne grandira pas.

Existe-t-il une sorte de périphérique de bouclage qui peut grossir? Ou, existe-t-il une sorte de périphérique de bouclage qui n'a besoin que de l'espace qu'il stocke?

phunehehe
la source
1
Étant donné que le fichier est clairsemé, il ne doit utiliser autant d'espace que celui stocké dans votre exemple.
jordanm
Selon ce que vous essayez d'accomplir avec cela, l'outil virt-make-fspeut être utile. Il peut être utilisé pour créer des images ext2 à l'aide de fichiers tar.
Kotte

Réponses:

17

Créez un périphérique à fichier fragmenté, à l'aide de 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 :)'

Référence: wikipedia sparse file article

Stephan
la source
10

Le commentaire de @ jordanm l'a cloué. J'ai supposé que la taille du fichier était fixe lorsque j'ai regardé la sortie de ls -lh disk.img. Lorsque j'ai utilisé ls -s disk.imgcomme dans la réponse de @ Stephan, la taille réelle du fichier est affichée. À titre de test, j'ai créé un fichier image plus grand que mon disque dur:

truncate test.img -s 1000G

Et cela fonctionne très bien, ce qui signifie que la réponse est dans la question :)

phunehehe
la source
Truncate fonctionne très bien, btw, je pensais simplement que je montrerais une autre commande pour créer ledit fichier clairsemé et (selon votre distribution Linux et votre ensemble d'outils) que vous n'avez pas nécessairement besoin d'utiliser losetup, car 'mount' dans son courant l'incarnation est assez intelligente pour définir des options sensibles lorsque vous en avez besoin.
Stephan
Le bit sur le montage est intéressant. C'est juste que cette fois parce que j'ai aussi besoin de LUKS (cryptsetup luksFormat / dev / loop0), j'ai besoin de losetup: D
phunehehe
Une autre commande Linux pratique pour créer le fichier clairsemé est fallocate(1).
Lloeki
2

Vous pouvez le faire manuellement avec dd cherche, ou plus facilement, car vous utilisez tronquer:

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 liner 2 pour le cultiver, ne demande guère d'automatisation ici, j'oserais dire :)

Malina Salina
la source