我所做的是克隆一个具有三个分区的小型 32GB 闪存模块。我碰巧有一个 32GB USB,所以我想可能只是工作;它没。东芝的 32GB 似乎与 Sandisk 的 32GB 有点不同。
无论如何,然后使用 2TB 外部驱动器并做了完全相同的事情。具体来说,我做了以下事情:
dd if=/dev/sdX of=/dev/sdY bs=100M
在旁边最后一个块是否作为部分副本出现,或者如果首先到达 EOF,它会被删除吗?
从而从本质上克隆整个闪存模块——分区表等。 32GB -> 2TB 很容易,因为dd
实用程序在读完最后一个(第三个)分区的末尾后正确停止。
因此,我现在要做的只是创建一个包含整个 Flash 图像的简单二进制 blob。我的 2TB 驱动器现在与原始驱动器进行了相同的分区:sdx1, sdx2, sdx3
。因此,我再次采取dd
以下措施:
dd if=/dev/sdx of=firmware.bin bs=100M
这样做不仅会复制我感兴趣的第一个 32GB,而且还会继续克隆整个 2TB 驱动器,或者我尝试时是这样。我可以通过以下方式找到感兴趣的分区的确切字节长度:
$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 2000398933504 0 disk
├─sdc1 8:33 0 134217728 0 part
├─sdc2 8:34 0 2147483648 0 part
└─sdc3 8:35 0 29734297600 0 part
解决这个问题的一个明确方法是将块大小设置dd
为一个字节,然后将要读取的块数设置为上述三个大小的总和:
dd if=/dev/sdc of=firmware.bin bs=1 count=32015998976
但我无法想象这实际上需要多长时间。
编辑:对上述内容进行的好奇快速测试显示出可靠的约 150KB/s 的传输速率。
太长了;博士如何独占复制比分区大小总和大得多的磁盘的前三个分区?
答案1
只需复制您需要的分区和 MBR(如果您也需要)。
MBR 存储在磁盘的前 512 字节中。
dd if=/dev/sdX of=/path/to/mbr_file.img bs=512 count=1
复制每个分区
dd if=/dev/sdX1 of=/path/to/partition1.img bs=512
dd if=/dev/sdX2 of=/path/to/partition2.img bs=512
dd if=/dev/sdX3 of=/path/to/partition3.img bs=512