Wie richte ich ein erweiterbares Loopback-Gerät ein?

23

Ich weiß, dass ich ein Loopback-Gerät wie das folgende erstellen und verwenden kann:

# 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

In diesem Fall ist das Festplatten-Image jedoch auf 2 GB festgelegt. Es sind 2 GB, wenn es leer ist, und 2 GB, wenn es voll ist. Es wird nicht wachsen.

Gibt es eine Art Loopback-Gerät, das an Größe zunehmen kann? Oder gibt es eine Art Loopback-Gerät, das nur so viel Speicherplatz benötigt, wie es speichert?

phunehehe
quelle
1
Da die Datei spärlich ist, sollte sie nur so viel Speicherplatz belegen, wie in Ihrem Beispiel gespeichert ist.
Jordanien
Je nachdem, was Sie damit erreichen möchten, kann das Tool virt-make-fshilfreich sein. Es kann verwendet werden, um ext2-Images mit tar-Dateien zu erstellen.
Kotte

Antworten:

17

Erstellen Sie mit "dd" ein Gerät mit wenigen Dateien.

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

Referenz: Wikipedia-Artikel mit wenigen Dateien

Stephan
quelle
10

@ Jordanm's Kommentar hat es genagelt. Ich nahm an, dass die Dateigröße fest war, als ich mir die Ausgabe von ansah ls -lh disk.img. Wenn ich ls -s disk.imgwie in @ Stephans Antwort verwendet habe, wird die tatsächliche Dateigröße angezeigt. Als Test habe ich eine Image-Datei erstellt, die größer ist als meine Festplatte:

truncate test.img -s 1000G

Und es funktioniert einwandfrei, was bedeutet, dass die Antwort in der Frage liegt :)

phunehehe
quelle
Das Abschneiden funktioniert übrigens prima, ich dachte nur, ich würde einen alternativen Befehl zum Erstellen der Sparse-Datei anzeigen und (abhängig von Ihrer Linux-Distribution und dem Toolset), dass Sie nicht unbedingt losetup verwenden müssen, da es in der aktuellen Version 'mount' ist Inkarnation ist ziemlich klug, wenn es darum geht, sinnvolle Optionen zu setzen, wenn man sie braucht.
Stephan
Das bisschen über Berg ist interessant. Diesmal brauche ich nur LUKS (cryptsetup luksFormat / dev / loop0). Ich brauche losetup: D
phunehehe
Ein weiterer praktischer Linux-Befehl zum Erstellen der Sparse-Datei ist fallocate(1).
Lloeki
2

Sie können dies entweder manuell mit dd seek oder einfacher tun, da Sie truncate verwenden:

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

Ein 2-Liner für den Anbau, erfordert hier kaum Automatisierung, würde ich sagen :)

Malina Salina
quelle