Come configurare un dispositivo di loopback coltivabile?


23

So di poter creare e utilizzare un dispositivo di loopback come questo:

# 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

Tuttavia, in questo caso l'immagine del disco è fissa su 2 GB. È 2 GB quando è vuoto ed è 2 GB quando è pieno. Non crescerà.

Esiste un tipo di dispositivo di loopback che può aumentare di dimensioni? Oppure esiste una sorta di dispositivo di loopback che necessita solo dello spazio che memorizza?


1
Poiché il file è scarso, dovrebbe utilizzare solo lo spazio memorizzato nell'esempio.
Giordania,

A seconda di ciò che si sta tentando di ottenere con questo, lo strumento virt-make-fspotrebbe essere utile. Può essere usato per creare immagini ext2 usando i file tar.
Kotte,

Risposte:


17

Crea un dispositivo con file sparse, 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 :)'

Riferimento: articolo di file sparse di Wikipedia


10

@ commento di jordanm inchiodato. Ho assunto che la dimensione del file fosse corretta quando ho guardato l'output di ls -lh disk.img. Quando ho usato ls -s disk.imgcome nella risposta di @ Stephan viene mostrata la dimensione del file reale. Come test, ho creato un file di immagine più grande del mio disco rigido:

truncate test.img -s 1000G

E funziona bene, il che significa che la risposta è nella domanda :)


Truncate funziona benissimo, tra l'altro, ho pensato di mostrare un comando alternativo per creare il suddetto file sparse e (a seconda della distribuzione e del set di strumenti di Linux) che non è necessario utilizzare losetup, poiché 'mount' nella sua versione corrente l'incarnazione è piuttosto intelligente nell'impostare opzioni sensibili quando ne hai bisogno.
Stephan,

Il pezzo su mount è interessante. È solo che questa volta perché ho anche bisogno di LUKS (cryptsetup luksFormat / dev / loop0), ho bisogno di losetup: D
phunehehe

Un altro utile comando linux per creare il file sparse è fallocate(1).
Lloeki,

2

Puoi farlo manualmente con dd seek, o più semplice, poiché usi 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 liner 2 per coltivarlo, difficilmente richiede automazione qui, oserei dire :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.