dd vs. fallocate vs. truncate ...

Der Standardweg war bisher, einen solchen Container bzw. eine solche Datei mit dem Kommando
dd
zu erzeugen. Das kann zuweilen schon einmal einige Zeit benötigen, wie hier auf einem Testserver zu sehen ist:dirk@testserver:~$ sync ; time (dd if=/dev/zero of=10gig.dd bs=1024 count=10485760 ; sync)
10485760+0 records in
10485760+0 records out
10737418240 bytes (11 GB) copied, 20.7891 s, 516 MB/s
real 1m42.645s
user 0m0.942s
sys 0m19.807s
10485760+0 records in
10485760+0 records out
10737418240 bytes (11 GB) copied, 20.7891 s, 516 MB/s
real 1m42.645s
user 0m0.942s
sys 0m19.807s
Die Dauer resultiert daher, dass
dd
jeden einzelnen Block schreibt (bzw. kopiert) und 10 GiB schreiben, dauert ein wenig ...Insbesondere ist spannend zu sehen, dass das
dd
-Kommando bereits nach etwa 21 Sekunden fertig ist, es aber weitere 80 Sekunden dauert bis alles auf der Festplatte ist.Ein Arbeitskollege wies mich jetzt auf
fallocate
hin, was ich bisher noch nicht kannte. dirk@testserver:~$ sync ; time (fallocate -l 10G 10gig.fallocate ; sync)
real 0m0.165s
user 0m0.000s
sys 0m0.013s
real 0m0.165s
user 0m0.000s
sys 0m0.013s
Das Programm ist so schnell, weil nicht 10 GiB an Daten geschrieben werden, sondern nur der Platz für die Datei reserviert wird. Das ist völlig ausreichend für nahezu alle Anwendungsfälle.
Die Filesysteme, die
fallocate
unterstützt sind btrfs, ext4, ocfs2 und xfs.Das dritte Programm im Bund ist
truncate
.dirk@testserver:~$ sync ; time (truncate -s 10G 10gig.truncate ; sync)
real 0m0.087s
user 0m0.000s
sys 0m0.007s
real 0m0.087s
user 0m0.000s
sys 0m0.007s
Es ist noch ein wenig schneller als
fallocate
, weil es mogelt. Es erzeugt ein "sparse file" und gaukelt dem Betriebssystem vor, dass dort eine Datei mit lauter Nullen zu finden ist. Spätestens wenn man eine bestimmte Position in der Datei springen oder etwas verändern will, werden die I/O-Operationen durchgeführt, die man anfänglich vermieden hat.Aus Sicht des Nutzers sehen alle drei Dateien gleich aus.
dirk@testserver:~$ ls -lah 10gig.*
-rw-r--r--. 1 dirk dirk 10G Jan 10 15:46 10gig.dd
-rw-r--r--. 1 dirk dirk 10G Jan 10 15:48 10gig.fallocate
-rw-r--r--. 1 dirk dirk 10G Jan 10 15:50 10gig.truncate
-rw-r--r--. 1 dirk dirk 10G Jan 10 15:46 10gig.dd
-rw-r--r--. 1 dirk dirk 10G Jan 10 15:48 10gig.fallocate
-rw-r--r--. 1 dirk dirk 10G Jan 10 15:50 10gig.truncate
Die Empfehlung ist aber, in jedem Fall
fallocate
zu nutzen und nicht dd
oder truncate
oder anders ausgedrückt, Ihr solltet wissen, was die drei Programme tun und dann das passende für Euren Zweck auswählen.
Trackbacks
Netz - Rettung - Recht am : Wellenreiten 01/2015
Vorschau anzeigen
Wer als “Websurfer†metaphorisch auf den Wellen des Netzes reitet, findet dabei zwar keine paradiesischen Inseln, manchmal aber immerhin ganz interessante Lektüre. Im Januar 2015 kann ich u.a. folgende Fundstücke empfehlen und der werten Leserschaft ans
Dirks Logbuch am : Benchmarking ...
Vorschau anzeigen
Man kann viel über Tools lernen, wenn man nachvollziehbare Messungen macht. Für mich hat sich als sinnvoll erwiesen, fünf Mal zu messen. Die beste und die schlechteste Messung wird gelöscht ("Ausreisser") und aus den verbleibenden drei Messungen nehme ich
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Ulf am :
dd if=/dev/zero of=FILE bs=1 count=0 seek=8G
Dirk Deimeke am :
Danke!