如何使用终端在 Android 上创建稀疏文件

如何使用终端在 Android 上创建稀疏文件

我正在尝试在 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允许我们使用人类可读的数字seekseek和都count按照定义的块形式获取它们的值,bs使得bytes=bs*(count+seek)

使用 创建一个稀疏文件count=0,而不是使用seek设置文件大小。接受的答案根本不会创建稀疏文件,而是用零填充文件。

相关内容