Linux

複製 NTFS 磁碟

  • November 9, 2020

我需要使用 Debian GNU/Linux 複製一個失敗的 2TB 磁碟,該磁碟包含一個 NTFS 分區。磁碟有許多不可重定位的壞扇區,所以我知道部分數據已經失去;但是我需要複製磁碟才能嘗試使用testdisk.

我發出複製它的命令是:

dd if=/dev/sdc of=/dev/md2 bs=512 conv=noerror status=progress

大約花了 2 天時間完成,在此期間它發現了大約 3GB、66GB 和 88GB 的​​壞扇區。故障磁碟很舊而且不是高級格式,所以我知道它的扇區肯定是 512 字節。

問題是嘗試testdisk /dev/sdc讀取目錄(但由於壞扇區而無法恢復文件),而 tryngtestdisk /dev/md2甚至沒有列出目錄內容。該磁碟僅包含 NTFS 分區,它跨越了整個可用空間。為什麼複製與原始不一樣,至少在未損壞的扇區上?我是否以一種不好的方式複製,我應該以其他方式複製它,例如不同的命令或選項?

感謝Michael Hampton的建議,我發現myrescue,類似於dd_rescue,但有更好的文件記錄(至少這是我的印象)。

我首先複製了磁碟以myrescue相反的順序讀取它(從最後一個扇區到第一個扇區),然後以正常順序再次讀取失去的扇區。全部完成禁用每個預讀和記憶體。我一嚐試就發現它需要 50 多天才能完成,所以我寫了一個腳本myrescue,在很長一段時間內可能出現電源線停電後,自動從上次中斷的地方重新啟動。

它恢復了我需要的一切,但請注意:YMMV 和故障磁碟對您的數據來說不是開玩笑,因此請閱讀myrescue文件並在對磁碟執行任何操作之前三思而後行,包括執行我的腳本。

如果您碰巧沒有其他選擇(或沒有其他更好的選擇),只能執行 myrescue,這是我編寫的腳本,以防萬一有人感興趣:

#!/bin/bash

SOURCE=/dev/disk/by-id/ata-ST2000DM001-1ER164_Z4Z4Z3EQ
DESTINATION=/dev/disk/by-id/ata-ST2000DM008-2FR102_WFL1GF5H

if [ "$1" == "bgrun" ] ; then
 hdparm -a 0 "$SOURCE"  # read-ahead del kernel a zero
 hdparm -A0 "$SOURCE" # read-ahead del disco disabilitato
 myrescue -b 512 -B /root/myrescue.bitmap -R -f 1 "$SOURCE" "$DESTINATION"
else
 if [ "$1" == "bgdebug" ] ; then
   touch /tmp/startrescuedebugflag.deleteme
 else
   set -x
   RUNNING=$(ps axu | grep myrescue | grep -v -e grep -e SCREEN | wc -l)
   if [ $RUNNING -lt 1 ] ; then
     screen -S bgrescue -d -m $0 bgrun
   else
     screen -S bgdebug -d -m $0 bgdebug
   fi    
 fi
fi

引用自:https://serverfault.com/questions/1026103