
Android でスパース ファイルを作成しようとしています。このために、Android ターミナル エミュレーターを使用しています。Busybox をインストールしたので、dd コマンドを使用できます。truncate などの他のコマンドはインストールされていません。質問: Android ターミナルでスパース ファイルを作成する方法を誰か知っていますか?
インターネットで見つけたいくつかのコマンドを試してみました:
dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"
しかし、ファイルは作成されませんでした。次のことも試しました:
dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1.
しかし、次のエラーが発生します。
dd "path of if" invalid argument
それを正しいやり方で得る方法を誰か知っていますか?
答え1
私自身すでに答えを見つけました。
dd if=/dev/zero of=/sdcard/file.img bs=1 count=0 seek="wanted size"
ドライブ上のサイズはブロック サイズとカウントによって決まるため、ファイルは作成されません。カウントを 0 に設定すると、ファイルは 0 バイトになり、存在しなくなります。
dd if=/dev/zero of=/sdcard/file.img bs="wanted size" count=1
次のエラーが発生します:
dd "path of if" invalid argument
ここでの問題は、ブロック サイズに制限があることです。それほど大きく設定することはできません。必要なブロック サイズのカウントを計算する必要がありました。64k を選択しました。512 MB のスパース ファイルを作成するためのコマンドは次のとおりです。
dd if=/dev/zero of=/sdcard/file.img bs=64k count=8192
seek の使用はオプションです。
答え2
次のコマンドはデバイス上に5ギガバイトのスパースファイルを作成します
dd of=sparse.img bs=1 count=0 seek=5G
dd はバイトのブロックをコピーするプログラムです。 は
if=
入力ファイルを指定するために使用されます。ここでは必要ありません。 は出力ファイルを
of=
指定するために必要です。 は
bs=
ブロック サイズ (読み取りまたは書き込みあたりのバイト数) を指定するために必要です。 は
seek=
スキップする出力ブロックの数を指定するために必要です。 は
count=
コピーするブロックの数を指定するために使用されます。
count
が指定されていない場合のデフォルトの動作は、入力ファイル全体をコピーすることです (デフォルトでは stdin にコピーされます)。bs
は通常、デバイスの最適な読み取り/書き込みサイズに設定する必要がありますが、この場合は に設定することで、1
に人間が判読できる数値を使用できます。 とはseek
どちらも、 が定義するブロック単位で値を取得します。seek
count
bs
bytes=bs*(count+seek)
スパース ファイルはcount=0
、 と の代わりに を使用してseek
ファイル サイズを設定することで作成されます。受け入れられた回答では、スパース ファイルは作成されず、代わりにファイルがゼロで埋められます。