谁能给我一个简单的例子吗?分区大小为 4 MB,但里面的数据为 3.1 MB。我只需要dd
3.1 MB。
dd if=/dev/block/partition of=/tmp/3.1mb.img bs= skip=
bs
我对和感到困惑skip
。
答案1
我的 Android 版本上的 dd 操作似乎与大多数 Linux 发行版类似。因此,对于解释其功能的文档,我会查看 dd 手册页(您可以通过谷歌搜索)。
bs
手册页中有关于、count
和 的说明skip
:
bs=BYTES read and write up to BYTES bytes at a time (default: 512); overrides ibs and obs count=N copy only N input blocks skip=N skip N ibs-sized blocks at start of input
如果您正在寻找确切的字节数,则需要确定您需要 3.1MB 还是 3.1MiB。也就是说你的兆字节是1000*1000字节还是1024*1024字节?我将在以下示例中假设后者:
dd if=/dev/block/partition of=/tmp/3.1mb.img count=6349
如上所述,dd 的默认块大小是 512 字节。因此,以下将从分区开头开始复制出略多于 3.1MiB 的内容。它有点多,因为 3.1MiB 不能计算为整数字节 (
3.1*1024*1024 = 3250585.6
)。使用 6349 是因为3.1 * 1024*1024 / 512 (blocksize) = 6348.8
然后我四舍五入以确保检索到至少 3.1MiB 的数据。请记住,dd 仅读取和写入块大小倍数的数据,因此在这种情况下向上舍入会添加额外的 102 个字节。如果您关心实际获得的字节数,这将向您展示一些需要考虑的事情。dd if=/dev/block/partition of=/tmp/3.1mb.img bs=1 count=3250586
如果您想要一个确切的字节数,但您不知道该字节数是某个数字的倍数,则可以将块大小设置为
1
您count
想要的确切字节数。dd if=/dev/block/partition of=/tmp/3.1mb.img skip=1K count=6349
假设您要复制到分区的数据为半兆字节(512KiB,或 512*1024 字节)。然后就可以像上面一样使用skip了。使用 1K 是因为
K
dd 中的后缀表示 1024 字节。由于块大小是默认的 512,这意味着我们将 512KiB 或 512 * 1024 字节跳过到分区中。跳过意味着将从输入文件(在我们的例子中为分区)开头开始跳过一定数量的块,以到达输入文件中 dd 开始读取的位置。dd if=/dev/block/partition of=/tmp/3.1mb.img bs=1 skip=524288 count=3250586
为了在跳过初始 512KiB 的同时获得准确的字节数,我们可以将前面的示例重写为上面的示例。
请记住,由于您要复制一定数量的字节,因此count
应始终给出该选项。否则,dd 会一直读取,直到无法读取为止,这可能会读取比您想要的多得多的数据。
答案2
简单算术:
dd if=/dev/block/partition of=/tmp/partition.img bs=1K count=3100
1 KB 乘以 3100 = 3.1 MB,或多或少。
您确定所讨论的分区非常小吗?