我曾有一个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
和我转入(来自另一台计算机,所以设备在sda
和sdb
)它到(我选择错误的)64GB SD 卡通过dd
(dcfldd
实际上):
# 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 卡。
在这种情况下,我假设我不能使用dd
或dcfldd
我可以做什么?我可以使用dd
或dcfldd
吗?当转账到达时会发生什么32 GB 边界目标 SD 卡上(数据完整性问题)?
进一步说明:
答案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
您可以使用任何工具来制作副本,例如cat
(dd
没有任何优点cat
,只有缺点)。当到达目标磁盘末尾时它将停止。这种简单方法的缺点是很难判断您感兴趣的部分的副本是否成功。
为了确保复制命令在成功复制要复制的内容时返回成功状态,否则会出错,请使用复制适量数据的命令。要复制文件的前 N 个字节,请使用head -c
.要复制的字节数是扇区数乘以扇区大小(fdisk
列表中为 512 字节)。不要忘记扇区从 0 开始(扇区 0 包含分区表),因此要复制的扇区总数是最大的“结束”值加一。
head -c $((61315071*512+512)) /dev/sdSOURCE >/dev/sdDESTINTATION
sdSOURCE
将和替换sdDESTINATION
为适当的设备名称。运行fdisk -l /dev/sdDESTINATION
and grep sdDESTINATION /proc/partitions
andfile -s /dev/sdDESTINATION
以及您认为有用的任何其他命令,以确保您要覆盖的设备是您想要覆盖的设备。