恢复闪存驱动器文件

恢复闪存驱动器文件

我需要从 16GB Lexar 闪存驱动器中恢复文件。PCB 似乎没有任何损坏,所以我希望可以恢复。当我将 USB 插入 Windows 计算机时,它会将其识别为驱动器,但提示我插入磁盘。经过几天尝试让这个东西正常工作后,我决定在 Ubuntu 上试一试。

运行lsusb命令:

Bus 002 Device 003: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 8086:0186 Intel Corp. WiMAX Connection 2400m
Bus 001 Device 003: ID 0bda:5801 Realtek Semiconductor Corp. 
Bus 001 Device 007: ID 058f:1234 Alcor Micro Corp. Flash Drive
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

该闪存驱动器被识别为 Alcor Micro Corp。到目前为止一切顺利。但是,当我运行sudo fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb43778ae

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     3074047     1536000   27  Hidden NTFS WinRE
/dev/sda2         3074048   921657343   459291648    7  HPFS/NTFS/exFAT
/dev/sda3       954587136   976773119    11092992   17  Hidden HPFS/NTFS
/dev/sda4       921659390   954587135    16463873    5  Extended
/dev/sda5       921659392   954587135    16463872   83  Linux

Partition table entries are not in disk order

驱动器未被识别。最后,我运行tail -f

==> /var/log/syslog <==
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.398762] usb 1-1.2: new high-speed USB device number 9 using ehci-pci
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.644599] usb 1-1.2: New USB device found, idVendor=058f, idProduct=1234
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.644610] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.644616] usb 1-1.2: Product: Mass Storage Device
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.644621] usb 1-1.2: Manufacturer: Alcor Micro
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.645100] usb-storage 1-1.2:1.0: USB Mass Storage device detected
Mar 24 08:55:10 danny-Satellite-E305 kernel: [ 6791.645183] scsi13 : usb-storage 1-1.2:1.0
Mar 24 08:55:11 danny-Satellite-E305 kernel: [ 6792.642812] scsi 13:0:0:0: Direct-Access     Generic  USB Flash Disk   7.76 PQ: 0 ANSI: 4
Mar 24 08:55:11 danny-Satellite-E305 kernel: [ 6792.643071] sd 13:0:0:0: Attached scsi generic sg2 type 0
Mar 24 08:55:11 danny-Satellite-E305 kernel: [ 6792.647022] sd 13:0:0:0: [sdb] Attached SCSI removable disk

有什么恢复数据的方法吗?提前谢谢!

答案1

使用以下命令制作有问题的设备的图像ddrescue- 您将需要足够的存储空间来容纳整个驱动器,无论您在其上存储了多少数据(或曾经存储过多少数据),在这种情况下,您似乎需要 16GB 来存储 /dev/sdb 的克隆。

ddrescue 是执行该工作的程序,如果尚未安装,我们需要使用以下命令进行安装sudo apt-get install gddrescue(注意,g 是 GNU 的缩写)

打开终端CtrlAltT并切换到要存储图像文件的目录,然后发出命令sudo ddrescue -d /dev/sdb sdb.img sdb.logfile

-d 直接访问驱动器(忽略缓存)/dev/sdb 是我们用于输入的设备 sdb.img 是我们用于输出的文件 sdb.logfile 正在跟踪我们的位置以及我们的结果是什么。

如果由于任何原因,该过程在完成之前停止,则日志文件允许我们从上次中断的地方继续进行。

成像将开始,你会看到类似这样的内容:

救援

Rescued 表示成功读取的数据量,errsize 表示无法读取的数据量。随着过程的继续,我们希望看到前者增加,而后者趋近于零。我记得 ddrescue 使用一种称为数据雕刻的过程,其中失败的块被减半并重新尝试。

ddrescue 是一款非常强大的工具,您可以在手动的。 请密切关注第3章!!选择错误的文件或设备进行输出绝对会毁了你的一天。

获得生成的图像后,我们可以对其进行测试和恢复程序,而无需对出现故障或失败的设备施加任何进一步的压力。

最终,ddrescue 将在终端屏幕上输出“Finished”。如果 errsize 很高,并且您觉得可能需要尝试恢复更多数据,则可以重新运行该命令并应用开关来重试失败的块,甚至可以反向读取(在固态设备上可能没有用):sudo ddrescue -d --try-again --retrim --reverse /dev/sdb sdb.img sdb.logfile或上述手册中您认为可能有用的任何其他开关组合。尝试恢复所有数据后,是时候看看我们有什么了。

发出命令fdisk -l sdb.img或任何你为映像命名的名称。运气好的话,你会得到类似这样的输出,表明分区表完好无损。

Disk sdb.img: 4013 MB, 4013948928 bytes
1 heads, 24 sectors/track, 326656 cylinders, total 7839744 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000174fe

  Device Boot      Start         End      Blocks   Id  System
sdb.img1   *        2048     7839743     3918848    b  W95 FAT32

注意“开始”数字,这意味着文件系统从扇区 2048 开始。

有了这些信息和一些基本的数学技能或计算器,我们就可以得出需要尝试我们的进程的偏移量。2048 个扇区 X 512 个字节 = 1048576

由于我们因故障而创建了此映像,因此我们将首先尝试修复文件系统

发出命令sudo losetup --offset 1048576 /dev/loop2 sdb.img在循环设备上设置图像。

然后发出命令sudo fsck /dev/loop2

在我们尽力修复系统之后,我们将创建一个挂载点,sudo mkdir /mnt/loop并挂载之前设置的循环设备sudo mount /dev/loop2 /mnt/loop

现在希望我们有一些可以复制到另一个驱动器的数据。让我们看看:

ls /mnt/loop
autorun.inf  casper-rw  ldlinux.sys  pool                smart-fail.txt
boot         dists      md5sum.txt   preseed             syslinux
casper       install    pics         README.diskdefines  wubi.exe

看起来我有一些。希望你也有!复制完文件后,我卸载了循环设备sudo umount /dev/loop2

如果这种方法不太成功,我还可以尝试使用命令“sudo testdisk sdb.img(或您为映像文件命名的任何名称)”进行 testdisk。按 Enter 选择映像,然后选择分区类型(如果检测到类型,它会提示您如何继续)。请注意,这通常是闪存驱动器上的英特尔。

您可以选择“分析”来搜索丢失的分区,或者直接进入“高级”以使用文件系统工具选择已知或已恢复的分区。选择分区后,您将看到一个文件列表,其中包含有关如何选择要复制的文件等的说明。这部分相当不言自明,可能在其他地方也有介绍,所以我就此打住,并承诺如果您有任何不清楚的地方,可以给我留言,我会回复您。

相关内容