我正在尝试在 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 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
设置文件大小。接受的答案根本不会创建稀疏文件,而是用零填充文件。