Skip to content

Instantly share code, notes, and snippets.

@sujunmin
Created February 21, 2020 07:32
Show Gist options
  • Save sujunmin/0f3d6a04f4a139129e9c41bb4cc7fcf9 to your computer and use it in GitHub Desktop.
Save sujunmin/0f3d6a04f4a139129e9c41bb4cc7fcf9 to your computer and use it in GitHub Desktop.
NTFS 用 dd 備份還原的奇妙旅程
  1. 慘案發生經過

a. 要把一顆 M 牌的 500G SSD (上面是一個 Windows 10 NTFS) 弄到 I 牌的 480G SSD

b. 原來想用 dd 把原來的 SSD dump 出來再硬給他塞到新的 SSD 上

c. 結果空間不夠,也讀不到 partition

d. 後來想用 gparted 處理,結果發現原來的有做休眠,還有 MFT/Bitmap 一堆錯,無法在 GUI 裡頭縮小 partition

e. 用 usb 界面接到一台 Windows 10 修復他 (chkdsk /f /r)

f. 終於可以縮小 partition 了

g. 用 clonezilla 備份還原 (因為如果還要 dd 的話又是 500G 了)

h. 他說我的 GPT/MBR 有問題,不給備份

i. 用 gdisk 修復,GG 了

j. 然後想想,好吧,用 dd 倒回原來的 SSD

k. 啥,檔案空間已滿??? (原來的路回不去了)

l. 我現在有的就是一個壞的 SSD,一個不知道能不能用的 dd image,一個新的 SSD 但檔案系統有問題

  1. 最後的 workaround

a. 把 dd image 丟到 loop 上面 (先前要備份這個 dd image)

 sudo losetup /dev/loop0 /path/to/disk.img

b. 把這個 device 接到 pve 的 VM 裡 (該 Host 是原來作 dd 的機器)

 sudo qm set 100 -virtio2 /dev/loop0

c. 在 VM 100 那台先跑個 chkdsk 修復

d. 讓 /dev/loop0 脫離 VM

e. gparted /dev/loop0

f. 讓 partition 變小

g. 備份還原 MBR (/dev/sdi 是新硬碟)

 dd if=/dev/loop0 of=/dev/sdi bs=446 count=1

d. 讓 /dev/loop0 的 partition 跟 /dev/sdi 配置差不多 (因為有變小),那些系統內建的不要變大小

e. ntfsclone -s -o /media/BACKUP/backupX.img /dev/loop0pX 依序備份

f. ntfsclone -r -O /dev/sdiX /media/BACKUP/backupX.img 依序還原

g. 用 USB 插到 Windows 看看檔案還在不在

h. 插回原來的機器開機看看

i. 沒問題就能把 loop0 拿掉了

 sudo losetup --detach /dev/loop0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment