
Ich versuche, eine Sparse-Datei auf Android zu erstellen. Dazu verwende ich den Android Terminal Emulator. Ich habe Busybox installiert, damit ich den Befehl dd verwenden kann. Andere Befehle wie truncate sind nicht installiert. Meine Frage: Weiß jemand, wie man mit einem Android-Terminal eine Sparse-Datei erstellt?
Ich habe einige Befehle ausprobiert, die ich im Internet gefunden habe:
dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"
Es wurde jedoch keine Datei erstellt. Ich habe auch Folgendes versucht:
dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1.
Ich erhalte jedoch die folgende Fehlermeldung:
dd "path of if" invalid argument
Weiß jemand, wie man es richtig macht?
Antwort1
Ich habe die Antwort bereits selbst gefunden.
dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"
Es würde keine Datei erstellt, da die Größe auf dem Laufwerk durch die Blockgröße und -anzahl bestimmt wird. Wenn Sie die Anzahl auf 0 setzen, wäre die Datei 0 Byte groß und würde daher nicht existieren.
dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1
Würde den folgenden Fehler ausgeben:
dd "path of if" invalid argument
Das Problem dabei ist, dass es eine Begrenzung für die Blockgröße gibt. Sie kann nicht so groß eingestellt werden. Ich musste die Anzahl für die gewünschte Blockgröße berechnen. Ich habe 64 KB gewählt. Dies ist der funktionierende Befehl zum Erstellen einer 512 MB großen Sparse-Datei:
dd if=/dev/zero of=/sdcard/file.img bs=64k count=8192
Die Verwendung von „seek“ ist optional.
Antwort2
Der folgende Befehl erstellt eine 5 Gigabyte große Sparse-Datei auf meinem Gerät
dd of=sparse.img bs=1 count=0 seek=5G
dd ist ein Programm zum Kopieren von Byteblöcken.
if=
wird verwendet, um die Eingabedatei anzugeben. Wird hier nicht benötigt.
of=
wird benötigt, um die Ausgabedatei anzugeben.
bs=
wird benötigt, um die Blockgröße anzugeben, d. h. Bytes pro Lesen oder Schreiben.
seek=
wird benötigt, um die Anzahl der zu überspringenden Ausgabeblöcke anzugeben.
count=
wird verwendet, um die Anzahl der zu kopierenden Blöcke anzugeben.
Das Standardverhalten, wenn count
nicht angegeben ist, besteht darin, die gesamte Eingabedatei zu kopieren (die standardmäßig auf stdin eingestellt ist). bs
sollte normalerweise auf die optimale Lese-/Schreibgröße der Geräte eingestellt werden, aber in diesem Fall 1
können wir durch die Einstellung auf für Menschen lesbare Zahlen für verwenden seek
. Beide seek
und count
nehmen ihre Werte in Blöcken wie durch definiert, bs
sodass bytes=bs*(count+seek)
.
Eine Sparse-Datei wird erstellt, indem count=0
und verwendet werden, anstatt seek
die Dateigröße festzulegen. Die akzeptierte Antwort erstellt überhaupt keine Sparse-Datei, sondern füllt die Datei mit Nullen.