使用 DD 仅复制可移动设备的一半(部分)

使用 DD 仅复制可移动设备的一半(部分)

我曾有一个32GB SD 卡具有这种结构(或非常接近):

luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 29.2 GiB, 31393316864 bytes, 61315072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec4e4f57

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1             1   125000   125000   61M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3      33292288 61315071 28022784 13.4G 83 Linux

和我转入(来自另一台计算机,所以设备在sdasdb)它到(我选择错误的)64GB SD 卡通过dddcfldd实际上):

# dcfldd if=/dev/sda of=/dev/sdb bs=1M

现在,我的新 64GB SD 卡是:

luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 59.5 GiB, 63864569856 bytes, 124735488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec4e4f57

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1             1   125000   125000   61M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3      33292288 61315071 28022784 13.4G 83 Linux

好吧,现在没问题,但现在我不再有源 32 GB SD 卡,只剩下 64 GB SD 卡,我想再次将其转移到一些空的 32 GB SD 卡。
在这种情况下,我假设我不能使用dddcfldd

我可以做什么?我可以使用dddcfldd吗?当转账到达时会发生什么32 GB 边界目标 SD 卡上(数据完整性问题)?

进一步说明

  • 任何其他方法克隆 SD 卡就可以了,但我有一个问题:这种情况是一些 SD 卡启动驱动器树莓派2,并且通过partimage或进行克隆gparted不起作用(Raspberry 无法启动)。看起来只有dd克隆没有缺陷。

  • 相似的问题,但我认为不一样。

  • dcfldd工具具有与 相同的语法和行为dd。它只是提供更多信息(进度...等)。这里是手册页

答案1

假设 sda 是您的 64GB 源 SD 卡,sdb 是您的 32GB 目标 SD 卡。您可以使用以下命令将 dd 限制为仅复制所需扇区的数量:

dd if=/dev/sda of=/dev/sdb bs=512 count=61315072

答案2

我已经对硬盘做过很多次了:只需将dd大硬盘放到小硬盘上即可。当达到 32 GB 时就会失败,但没关系。

如果您仍然有疑问,我建议您尝试在您手边的旧 USB 记忆棒/硬盘上执行此操作。

答案3

您可以使用任何工具来制作副本,例如catdd没有任何优点cat,只有缺点)。当到达目标磁盘末尾时它将停止。这种简单方法的缺点是很难判断您感兴趣的部分的副本是否成功。

为了确保复制命令在成功复制要复制的内容时返回成功状态,否则会出错,请使用复制适量数据的命令。要复制文件的前 N ​​个字节,请使用head -c.要复制的字节数是扇区数乘以扇区大小(fdisk列表中为 512 字节)。不要忘记扇区从 0 开始(扇区 0 包含分区表),因此要复制的扇区总数是最大的“结束”值加一。

head -c $((61315071*512+512)) /dev/sdSOURCE >/dev/sdDESTINTATION

sdSOURCE将和替换sdDESTINATION为适当的设备名称。运行fdisk -l /dev/sdDESTINATIONand grep sdDESTINATION /proc/partitionsandfile -s /dev/sdDESTINATION以及您认为有用的任何其他命令,以确保您要覆盖的设备是您想要覆盖的设备。

相关内容