使用 dd 复制 SD 卡不会完全复制

Fra*_*ver 6 dd sd-card disk-image

我正在尝试制作我的 SD 卡的副本,以便我可以将其移动到我的 64GB SD 卡上。我已经用树莓派的 SD 卡完成了这个,没有问题。

SD 卡由两个分区组成:BOOT (fat32) 和linux (ext4)

我尝试使用以下方法制作整个 SD 卡的图像:

sudo dd of=Images/orangepi.img if=/dev/sdd bs=1M status=progress
Run Code Online (Sandbox Code Playgroud)

并将其放回 SD 卡上:

sudo dd if=Images/orangepi.img of=/dev/sdd bs=1M status=progress
Run Code Online (Sandbox Code Playgroud)

我无法挂载映像,因为它由 2 个分区组成。因此,我使用以下方法分别对BOOTlinux进行了映像:

sudo dd of=linux.img if=/dev/sdd2 bs=1M status=progress 
sudo dd of=BOOT.img if=/dev/sdd1 bs=1M status=progress
Run Code Online (Sandbox Code Playgroud)

正如您在我添加的屏幕截图中看到的那样,从 SD 卡创建的图像(右侧)与 SD 卡(左侧)不匹配。

我的问题是:为什么会发生这种情况,我该如何制作 SD 卡的正确图像?

左边是 SD 卡上的 linux 分区,右边是挂载的映像

我的 SD 卡的主文件夹有一个名为Music的文件夹,其中包含带有 mp3 文件的文件夹。

我的图像有一个名为Music的 x-font.ttf 。文件夹在成像时似乎变成了随机文件。

SD 卡是我的 orangepi PC 的工作 Ubuntu 磁盘,目前正在工作。

$ sudo apt install dcfldd
$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk 
??sda2   8:2    0 465.8G  0 part /media/Shared
sdb      8:16   0 238.5G  0 disk 
??sdb1   8:17   0   500M  0 part 
??sdb2   8:18   0 116.8G  0 part 
??sdb3   8:19   0 117.3G  0 part /
??sdb4   8:20   0     1K  0 part 
??sdb5   8:21   0   3.9G  0 part [SWAP]
sdc      8:32   1   7.5G  0 disk 
??sdc1   8:33   1    64M  0 part /media/fhfs/BOOT
??sdc2   8:34   1   7.4G  0 part /media/fhfs/linux
sdg      8:96   0 465.8G  0 disk 
??sdg1   8:97   0 465.8G  0 part /media/fhfs/0c91eeb6-7199-47b6-a603-04432a091fdc
sr0     11:0    1  1024M  0 rom  
**ls -lha /dev | grep sd**
brw-rw----   1 root disk        8,   0 Oct 18 14:54 sda
brw-rw----   1 root disk        8,   2 Oct 18 14:54 sda2
brw-rw----   1 root disk        8,  16 Oct 18 14:54 sdb
brw-rw----   1 root disk        8,  17 Oct 18 14:54 sdb1
brw-rw----   1 root disk        8,  18 Oct 18 14:54 sdb2
brw-rw----   1 root disk        8,  19 Oct 18 14:54 sdb3
brw-rw----   1 root disk        8,  20 Oct 18 14:54 sdb4
brw-rw----   1 root disk        8,  21 Oct 18 14:54 sdb5
brw-rw----   1 root disk        8,  32 Oct 20 18:11 sdc
brw-rw----   1 root disk        8,  33 Oct 20 18:11 sdc1
brw-rw----   1 root disk        8,  34 Oct 20 18:11 sdc2
brw-rw----   1 root disk        8,  48 Oct 18 14:54 sdd
brw-rw----   1 root disk        8,  64 Oct 18 14:54 sde
brw-rw----   1 root disk        8,  80 Oct 18 14:54 sdf
brw-rw----   1 root disk        8,  96 Oct 18 14:54 sdg
brw-rw----   1 root disk        8,  97 Oct 18 14:54 sdg1

$ sudo dcfldd if=/dev/sdc2 of=linuxdcfl.img hash=md5,sha1 hashlog=hashlog.txt
242944 blocks (7592Mb) written.
243056+1 records in
243056+1 records out
**sudo dcfldd if=/dev/sdc2 vf=linuxdcfl.img verifylog=verify.log**
0 - 0: Mismatch
Total: Mismatch
Run Code Online (Sandbox Code Playgroud)

我试过dcfldd了,结果不匹配,但没有错误日志。verify.log是空的。hashlog只有 sha 和 md5 总和。

Eld*_*eek 5

dd在为位重复创建精确位方面有着悠久的历史。diff可以很容易地证明这一点

注意:您没有提到您正在运行的 Ubuntu 版本。唯一不同的原因是状态开关的使用发生了变化。

Ubuntu 14.04 摘录自 man dd

 status=WHICH
              WHICH info to suppress outputting to stderr; 'noxfer' suppresses
              transfer stats, 'none' suppresses all
Run Code Online (Sandbox Code Playgroud)

Ubuntu 16.04 摘录自 man dd

status=LEVEL
              The  LEVEL of information to print to stderr; 'none' suppresses everything but error messages, 'noxfer' suppresses
              the final transfer statistics, 'progress' shows periodic transfer statistics
Run Code Online (Sandbox Code Playgroud)

除此之外,我能想到的唯一事情会导致您的图像文件具有与您的源不同的位模式是:

用户错误:

A) 尝试对已安装的分区进行映像(一个非常糟糕的主意)

B) 未能sync将数据留在内核缓冲区中。

或者

硬件故障:

C) 存储图像的磁盘上的故障区域。这意味着驱动器即将发生故障(我希望你有备份,如果没有,跳到它!)

D) 不可靠的连接提供与源或目标媒体设备的不良连接

您最好检查存储图像的驱动器的智能状态

dcfldd也导致不匹配的事实使我相信您的电缆或存储介质出现故障(无论是在输入介质上还是在输出介质上)