我如何创建与 USB 驱动器完全相同的图像?

我如何创建与 USB 驱动器完全相同的图像?

我有一个 U 盘,由于某种原因无法读取。我想制作一个镜像用于存储,以便以后可以尝试从镜像中检索数据。

我该如何创建与 USB 驱动器完全相同的图像?


这是我使用时遇到的错误dd

oshirowanen@desktop:~$ sudo dd if=/dev/sdd of=/USB_image
[sudo] password for oshirowanen: 
dd: reading `/dev/sdd': Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 1.00783 s, 0.0 kB/s
oshirowanen@desktop:~$ 

答案1

dd它!

sudo dd if=/dev/sdb of=~/USB_image用法类似于/dev/sdb您的 USB 驱动器是否如列表sudo fdisk -l所示〜/ USB_image是将要进行复制的映像文件(将创建映像文件的路径)。

要将映像还原到另一个 USB 驱动器,只需反转该过程:sudo dd if=~/USB_image of=/dev/sdb将恢复〜/ USB_image到设备安全数据库。只需确保新的 USB 驱动器与原来的一样大或更大即可。

您还可以将刚刚创建的映像文件挂载到路径中,而无需先将其还原到另一个 USB 驱动器mount ~/USB_image /mnt/USB_image -o loop

答案2

使用ddrescue。出现错误后它将继续,而出现错误的地方dd将会失败。

此外,ddrescue在 repos 中。在 13.04 上,我输入sudo apt-get install gddrescue 了 install。

使用sudo fdisk -ldmesg找出设备位置,例如:/dev/sdb,然后运行如下命令

ddrescue /dev/sdb /home/user/desktop/bkp.img

有很多选项ddrescue,你可能需要阅读这些man页面。另外,我不确定你的硬件为什么会出现故障,并转储dd。一个坏块可能会导致dd退出,但间歇性电源故障也可能导致退出。dmesg可能会告诉你更多有关你可能遇到的硬件故障的信息。

确保设备未安装!当您尝试进行数据恢复、映像等操作时,这可能会导致问题。

数据恢复过程中有很多事情可能会出错。如果遇到问题,请回复。testdisk一旦获得映像,它就是一个很好的数据恢复实用程序。

只是为了清楚起见,这是一个 USB 硬盘还是 USB(固态存储器)设备?

I/O 错误通常表示硬件故障而不是文件系统损坏。

如果可用,还可以尝试获取设备的 SMART 数据分析。这可能会告诉您设备是否过热、长时间通电、有坏扇区、暴露于超过 X 个 G 等情况。

答案3

dd就像之前的发帖者提到的那样,这是原生的方式。不过,你会希望它在出现错误时继续运行,所以你可以这样开始:

dd if=<usb device> of=<new file on disk with enough space> bs=<should match your blocksize> conv=noerror,sync 

最重要的部分是最后一个:conv=sync告诉 dd 用零填充所有它只能部分读取的块,因此生成的图像可能有几个太多的零,但在结构上等于不稳定磁盘减去其读取错误。conv=noerror 处理了这些读取错误,告诉 dd 继续下一个块。此时,块大小很重要,因为如果它大于跳过错误所需的大小,可读数据将在此处丢失。块大小应始终是二的倍数 - 如果有疑问,512k应该可以解决问题。

那么我建议:

  • 将该图像的未修改副本存储在安全的地方
  • fsck 磁盘映像的副本
  • 挂载磁盘映像
  • 检查你的文件 - 它们现在可以毫无问题地读取,但有些可能丢失或被截断
  • 如果设备本身根本无法读取,那么你可能就倒霉了。另外,如果设备恰好包含一些专有软件,则可能会设置为在第一个块中访问时返回读取错误。

(部分引用我自己 2010 年写的一篇文章)

如果你不需要保持原生,你可以尝试一些可以简化这个过程的工具,比如 ddrescue (包gddrescue) 及其配套工具ddrescueview(源码) 来可视化错误。

答案4

关于您的问题的后半部分“这是我使用 dd 时遇到的错误”:我可以看到几种可能性。

  1. 请注意您输入的命令与接受的答案之间的差异;您~在前面缺少一个/USB_image。换句话说,您试图输出文件系统的根目录,而不是主目录。
  2. /dev/sdd可能不是正确的驱动器。运行sudo fdisk -l并将驱动器的大小与已知的 USB 驱动器大小进行比较。例如,我知道这是我的 USB 驱动器,因为它接近 16GB Disk /dev/sdf: 15.8 GB, 15805186048 bytes:。

相关内容