
我正在嘗試在 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
使用查找是可選的。
答案2
以下命令將在我的裝置上建立一個 5 GB 的稀疏文件
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
來設定檔案大小。接受的答案根本不會創建稀疏文件,而是用零填充文件。