So erstellen Sie mit Terminal eine Sparse-Datei auf Android

So erstellen Sie mit Terminal eine Sparse-Datei auf Android

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 countnicht angegeben ist, besteht darin, die gesamte Eingabedatei zu kopieren (die standardmäßig auf stdin eingestellt ist). bssollte normalerweise auf die optimale Lese-/Schreibgröße der Geräte eingestellt werden, aber in diesem Fall 1können wir durch die Einstellung auf für Menschen lesbare Zahlen für verwenden seek. Beide seekund countnehmen ihre Werte in Blöcken wie durch definiert, bssodass bytes=bs*(count+seek).

Eine Sparse-Datei wird erstellt, indem count=0und verwendet werden, anstatt seekdie Dateigröße festzulegen. Die akzeptierte Antwort erstellt überhaupt keine Sparse-Datei, sondern füllt die Datei mit Nullen.

verwandte Informationen