如何创建USB记忆棒的图像完全相同?


21

我有一个因某些原因无法读取的USB记忆棒。我想为其制作图像以供存储,以便以后尝试从图像中检索数据。

我将如何创建类似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:~$ 

您使用哪个十六进制编辑器?
AJMansfield

当您无法从/dev/sdx指向USB记忆棒的设备中读取数据时,这是一个严重的问题,我认为对于普通用户而言没有可用的工具可以使用。有关更多详细信息,请参见此链接,askubuntu.com/questions/144852/…;不要一次放弃。请尝试根据可能需要阅读的内容清单进行操作。也许您可以拉开USB随身碟,找到一个微型SD卡,根据@ ubfan1的评论(链接的答案),该SD卡仍在工作。
sudodus

您有2个解决问题的方法:第一个简单的方法:运行sudo su,然后以root身份运行dd命令第二个更熟练的版本以状态和''sudo bash -c'dd status = progress if = / dev / sd运行dd * | 的gzip>〜/备份- USB.img.gz”
WiKrIe

Answers:


39

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还原到设备sdb。只要确保新USB驱动器与原始USB驱动器一样大或更大即可。

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


如果fdisk -l看不到USB驱动器怎么办?但是,我可以从Disk Utility程序中以/ dev / sdd的形式看到它,但是当我尝试使用您的命令时,它似乎失败了。
oshirowanen 2013年

失败是什么错?
Bruno Pereira

将错误添加到原始问题,因为注释太多了。
oshirowanen 2013年

1
如果fdisk不显示设备,请使用dmesg查看插入设备时发生的情况。dmesg是内核交互的列表,因此,基本上,如果硬件在您的计算机上执行了某些操作,则dmesg中会有关于它的消息。
j0h

2
@Alex使用status='progress'dd 在Ubuntu,或找出你的PID dd指令并发送SIGUSR1信号。但是,不确定其他实现。
Sergiy Kolodyazhnyy

7

使用ddrescue。错误发生后它将继续,而在那里dd只会失败。

另外, ddrescue在回购中。在13.04,我键入sudo apt-get install gddrescue 要安装。

使用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否以上之类的问题。Gs等


USB棒,没有SMART数据分析...我也认为你需要使用sudoddrescue,*其中dd只会失败*是有点不是真的,因为你可以配置dd忽略读取错误。当您可以读取丢失的数据的扇区时(而不是在驱动器死机时),testdisk它真棒。
布鲁诺·佩雷拉

#是root的符号,因此不需要,不需要sudo。如果是$,那么是的。
2013年

我还想指出的是,如果ddrescue甚至dd失败,但是您能够生成映像,您仍然可以尝试对该映像进行数据恢复。
2013年

我建议的使用gddrescueddrescue因为gddrescue是更新,更能够做到这一点的工作ddrescue呢。
布鲁诺·佩雷拉

1
我什至不认识男人,读我的文章。gddrescue是程序包,ddrescue是命令。
j0h

2

您可以使用来创建USB记忆棒(或其他设备)的图像dd

例如

dd if=<usb device> of=usb.img

您可以添加更多参数来dd优化命令(例如bs)。


2

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(package gddrescue)及其配套工具ddrescueviewsourceforge)以可视化错误。


2

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

  1. 注意您键入的命令与接受的答案的区别;您~在前面缺少/USB_image。换句话说,您正在尝试输出文件系统的根目录而不是输出到主目录。
  2. /dev/sdd可能不是正确的驱动器。运行sudo fdisk -l并将驱动器的大小与USB记忆棒的已知大小进行比较。举例来说,我知道这是我的USB记忆棒,因为它靠近16GB: Disk /dev/sdf: 15.8 GB, 15805186048 bytes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.