我有一个 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 -l
或dmesg
找出设备位置,例如:/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 时遇到的错误”:我可以看到几种可能性。
- 请注意您输入的命令与接受的答案之间的差异;您
~
在前面缺少一个/USB_image
。换句话说,您试图输出文件系统的根目录,而不是主目录。 /dev/sdd
可能不是正确的驱动器。运行sudo fdisk -l
并将驱动器的大小与已知的 USB 驱动器大小进行比较。例如,我知道这是我的 USB 驱动器,因为它接近 16GBDisk /dev/sdf: 15.8 GB, 15805186048 bytes
:。