Ich wollte ein Image meines alten USB-Laufwerks erstellen. Ich hatte gute Gründe anzunehmen, dass auf dem Gerät einige Blöcke mit Nullen gefüllt waren. Um etwas Platz zu sparen, habe ich die folgende conv=sparse
Option verwendet:
dd if=/dev/sdb of=myusb.img conv=sparse bs=32M
Es hat mir jedoch nichts gerettet:
$ ls -hls myusb.img
250M -rw-r--r-- 1 root root 250M Oct 18 21:31 myusb.img
Ich bin sicher, dass sich auf dem Gerät mit Nullen gefüllte Blöcke befinden.Warum wurde kein dd conv=sparse
Platz gespart?
Beachten Sie, dass ich die Antwort bereits kenne (glaube ich). Ich poste sie unten. Die Frage dient zur späteren Bezugnahme.
Antwort1
Wenn Sie absolut sicher sind, dass es mit Nullen gefüllte Blöcke gab, dann war der Grund, warum Sie keinen Platz gespart haben, der große Puffer, den Sie verwendet haben. Von man dd
:
sparse
Versuchen Sie, die Ausgabe für NUL-Eingabeblöcke zu suchen, anstatt sie zu schreiben
Sie haben verwendet bs=32M
, sodass Sie einen ganzen 32-MiB-Block mit Nullen am richtigen Offset benötigten, damit die conv=sparse
Option ihre Aufgabe erfüllen konnte, wenn auch nur einmal.
Die Option bs
legt ibs
(Eingabeblockgröße) und obs
(Ausgabeblockgröße) fest. Während das Handbuch erwähntEingabeblöcke, es ist tatsächlich das, obs
was zählt.
Hier sind die Ergebnisse einiger Tests. (Da ich der OP bin, habe ich die Tests mit demselben Gerät durchgeführt.) Jede Datei ist nach einem <obs_used>.img
Muster benannt. Achten Sie auf die erste Spalte:
$ ls -hlst *.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 4M.img
250M -rw-r--r-- 1 root root 250M Oct 18 22:02 2M.img
249M -rw-r--r-- 1 root root 250M Oct 18 22:02 1M.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 512K.img
248M -rw-r--r-- 1 root root 250M Oct 18 22:01 256K.img
247M -rw-r--r-- 1 root root 250M Oct 18 22:00 128K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:57 64K.img
247M -rw-r--r-- 1 root root 250M Oct 18 21:56 32K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:55 16K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:54 8K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:53 4K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:52 2K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:51 1K.img
246M -rw-r--r-- 1 root root 250M Oct 18 21:44 512.img
Die Schlussfolgerung lautet: Sie sollten „large“ nicht obs
mit conv=sparse
der Option verwenden. Die übliche Sektorgröße beträgt 512 Bytes, bs=512
scheint also genau richtig. Ihr Befehl hätte lauten sollen:
dd if=/dev/sdb of=myusb.img conv=sparse bs=512