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

Sop*_*rez 8 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
Run Code Online (Sandbox Code Playgroud)

(从另一台计算机,因此设备所在的位置sdasdb)传输到(我选择了错误的)64GB SD 卡通过ddddcfld事实上):

# ddcfld if=/dev/sda of=/dev/sdb bs=1M
Run Code Online (Sandbox Code Playgroud)

所以现在,我的新 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
Run Code Online (Sandbox Code Playgroud)

嗯,暂时没问题,但是现在我没有源 32 GB SD 卡了,只剩下 64 GB SD 卡了,我想再次将它转移到一些空的 32 GB SD 卡上。
在这种情况下,我假设我不能使用ddddcfld

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

进一步说明

  • 任何其他克隆 SD 卡的方法都可以,但我有一个问题:这种情况是Raspberry Pi 2 的一些 SD 卡启动驱动器,并且通过克隆partimagegparted不起作用(Raspberry 无法启动)。只有dd似乎做克隆,没有瑕疵。

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

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

小智 15

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

dd if=/dev/sda of=/dev/sdb bs=512 count=61315072
Run Code Online (Sandbox Code Playgroud)

  • @SopalajodeArrierez 当心,`count=61315071` 省略了最后一个扇区!您需要扇区 0 到 61315071,即 61315072 个扇区。 (2认同)