我需要從 16GB Lexar 隨身碟中復原檔案。印刷電路板似乎沒有任何損壞,所以我希望可以恢復。當我將 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 是一個非常強大的工具,您可以在手動的。 請密切關注第三章!選擇錯誤的檔案或裝置進行輸出肯定會毀掉你的一天。
獲得生成的映像後,我們可以對其運行測試和恢復程序,而不會對故障或故障設備造成任何進一步的壓力。
最終 ddrescue 將在終端螢幕上輸出「Finished」。如果 errsize 很高並且您覺得可能想要嘗試恢復更多,您可以重新運行命令並應用開關來重試失敗的塊,甚至反向讀取(在固態設備上可能沒有幫助) by: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 鍵選擇影像,然後選擇分割區類型,如果偵測到類型,它將提示您如何繼續。請注意,這通常是閃存驅動器上的英特爾。
您可以選擇「分析」來搜尋遺失的分割區,或直接進入「進階」以使用檔案系統工具選擇已知或已復原的分割區。選擇分區後,您將看到一個文件列表,其中包含有關如何選擇要複製的文件等的說明。如果有任何不清楚的地方您可以給我留言,我會回覆您。