Android / Linux dd

Android / Linux dd

谁能给我一个简单的例子吗?分区大小为 4 MB,但里面的数据为 3.1 MB。我只需要dd3.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字节?我将在以下示例中假设后者:

  1. 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 个字节。如果您关心实际获得的字节数,这将向您展示一些需要考虑的事情。

  2. dd if=/dev/block/partition of=/tmp/3.1mb.img bs=1 count=3250586

    如果您想要一个确切的字节数,但您不知道该字节数是某个数字的倍数,则可以将块大小设置为1count想要的确切字节数。

  3. dd if=/dev/block/partition of=/tmp/3.1mb.img skip=1K count=6349

    假设您要复制到分区的数据为半兆字节(512KiB,或 512*1024 字节)。然后就可以像上面一样使用skip了。使用 1K 是因为Kdd 中的后缀表示 1024 字节。由于块大小是默认的 512,这意味着我们将 512KiB 或 512 * 1024 字节跳过到分区中。跳过意味着将从输入文件(在我们的例子中为分区)开头开始跳过一定数量的块,以到达输入文件中 dd 开始读取的位置。

  4. 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,或多或少。

您确定所讨论的分区非常小吗?

相关内容