使用GParted和dd指令達成Windows 10新舊電腦資料遷移

lx.chen
2022 年 10 月 20 日 14:10:17 · Fetching Views...

Photo by Karolina Grabowska on Pexels.com

前言

最近組了一台新電腦,由於想要連硬碟一起更換,我也不想花時間在全新安裝的作業系統中重建原有的設定和開發環境,於是有了搬遷資料的想法。

這個搬遷資料的動作相當於把原本的作業系統複製到新的硬碟,並插在新的主機板上。如果只想把安裝在舊硬碟的Windows 10遷移到新的硬碟,也能採取這篇文章的步驟。不過這篇文章的目的只在於記錄過程和分享經驗,在不同硬體和作業系統的情況下,不見得能得到和我相同的結果。如果要參考本文章,請確實做好資料備份。

**注意** 我的舊硬碟安裝的是Windows 10 21H2,因此我只能確定下述步驟在該作業系統的情況下可以正常運作。如果你也想嘗試,不妨注意備份以免資料遺失。

**注意** 關於Windows 10的授權,我有購買正版的Windows彩盒版授權,且授權已經綁定在我的微軟帳號。當資料遷移完畢後,Windows會偵測到硬體已改變 (因為主機板不同了),所以會需要按照微軟官方的這個步驟遷移授權。授權遷移完畢後,舊硬碟上的Windows 10授權應該就會啟動失敗。如果你的Windows是使用隨機版序號,我不確定能不能進行這篇文章的操作。

新舊電腦的規格

以下我列出一些主要的配備:

配備舊電腦新電腦
主機板華碩 TROOPER B85華碩 TUF GAMING B660M-PLUS WIFI D4
硬碟BURST 2.5″ SSD SATA III 240G美光 Crucial P5 Plus 1TB/M.2 PCIe
CPUIntel Xeon (詳細規格待補)Intel i7-12700F
作業系統Windows 10 家用版 21H2

遷移步驟

概述

GParted是一個分割編輯器(partition editor),它可以用來管理硬碟的磁碟區(disk partitions)。在資料遷移的過程中,GParted主要可以用來移動和調整磁碟區的大小,而dd指令則負責用來複製硬碟中的資料 (含磁碟區分割的資料)。

這篇文章我將使用GParted Live,執行資料遷移的任務。GParted Live是一個可開機的Linux distribution,我將其安裝在一個USB隨身碟當,並將新舊硬碟和該USB隨身碟都插在同一部電腦上,最後使用USB隨身碟來開機,執行資料搬移的工作。

如果你有一個裝有Linux的電腦,且能夠插上你的新舊硬碟,實際上也可以用該電腦執行下資料遷的的工作。

步驟

**警告** 操作錯誤可能導致資料遺失且不能回復,請事先備份資料,或不要繼續進行以下步驟。

[提示] 建議在遷移之前將Windows 10的版本更新到最新。

1. 下載GParted Live CD/USB/HD/PXE Bootable Image: https://gparted.org/download.php。下載完畢後,你應該會得到一個.iso檔。

2. 準備一個空白的USB隨身碟,將該iso檔安裝進去。

[提示] 關於USB開機碟的製作,可以使用Rufus這套軟體。

3. 此步驟假設新電腦當中已安裝一個空白的硬碟。將舊電腦當中裝有Windows 10的硬碟拔下裝到新電腦當中。並且插入剛剛製作完成的USB開機碟。

4. 開機時選擇使用該USB隨身碟開機。通常是在電腦開啟後連續敲擊鍵盤Del鍵或F1鍵,進入UEFI或BIOS模式,在該模式中可以選擇使用該USB碟開機。每個主機板的UEFI和BIOS模式介面有所不同,建議查看說明書或上網搜尋。

5. 如果成功使用USB碟開機,應該可以看到啟動GParted Live的選項。在此畫面選擇 GParted Live (Default settings)選項。

6. 接著會詢問Keymap的設定,這邊選擇Don’t touch keymap。

7. 下一步選擇語言。這邊我使用預設的英文,直接按Enter即可。如果想替換成中文,可以找到相對應的編號,輸入後按Enter。

8. 接著選擇開啟 X。也就是使用GUI來操作GParted。

9. 接著當GUI跳出來之後,就可以開始使用GParted管理磁碟區了。你可以透過右上角的下拉式選單選擇硬碟。

10. 如果你的新硬碟比舊硬碟容量來得大,可以跳到步驟15。如果你的新硬碟比目前的硬碟還要小,請在GParted當中切換到你的舊硬碟,選擇Basic data partition這個磁碟分區,按下「右鍵」 → 「Resize / Move (重新調整大小 / 移動)」。

[提示] 可以透過硬碟容量大小、SATA或NVMe等等來區分硬碟。

11. 在跳出的對話視窗當中,你可以拖曳其中的綠色方框,來縮小磁碟分區。下圖擷取自GParted的說明文件

12. 請確保舊硬碟當中的unallocated以外的部分比新硬碟整體容量來的小。如果GParted無法將Basic data partition磁碟分區縮得更小,請回到舊硬碟的Windows當中,將不需要的程式或資料刪除,以騰出更多空間。

14. 完成Resize視窗的設定之後,請點擊GParted視窗上方的綠色勾勾 (Apply All Operations)。

15. 記下新舊硬碟的名稱。以我為例:

  • 新硬碟: /dev/nvme0n1
  • 舊硬碟: /dev/sda

16. 螢幕上緣應該會有一個Terminal的圖示,點兩下打開。接著輸入 dd 指令複製舊硬碟的資料到新硬碟:

sudo dd if=/dev/sda of=/dev/nvme0n1 bs=16M status=progress

**注意** 執行前請確保名稱填寫正確,錯誤的操作有可能會刪除你所有的資料!

dd 指令的說明如下:

  • if: 輸入的檔案,也就是舊硬碟。
  • of: 輸出的檔案,也就是新硬碟。
  • bs: 即block size。代表著一次讀和寫的最大Byte數。預設是512 Byte。我參考的文件當中是使用16M,所以我就沒有去做更動了。不同的Block size會影響傳輸的速度。如果真的在意速度的話,不妨做個實驗測試一下。

更多 dd 指令的說明可以參考Man Page這篇部落格

17. 指令執行完畢後,代表資料已複製完畢。接著可以回到GParted當中點擊Refresh Devices來檢查新硬碟當中是否已經有舊硬碟的磁碟分區。

18. 因為我的新硬碟比舊硬碟來得大,所以需要調整新硬碟當中Basic data partition磁碟分區的大小。對著要調整的磁碟分區按下「右鍵」→「Resize / Move」來調整大小。

19. 由上圖可以發現,我的Basic data partition磁碟分區右側還有一小塊磁碟分區。所以我需要執行的步驟是先將其向右移動到unallocated的底部。接著再將Basic data partition磁碟分區擴充到最大。

20. 最後按下GParted視窗上方的綠色勾勾 (Apply All Operations),資料遷移的部分就大功告成了。

21. 接著在Terminal當中輸入 sudo poweroff 指令來關機。

22. 移除USB開機碟和舊硬碟,接著就可以正常開機了。開機過程中建議插上網路線,讓Windows 10在開機之後能夠自動抓取新的驅動程式。

23. 關於Windows 10的授權啟動,可以打開「設定」→「更新與安全性」→「啟用」來確認。如果有顯示啟動失敗,在該頁面當中應該會有一個「疑難排解」的按鈕可以選擇。在疑難排解當中可以選擇你想從哪一部電腦轉移Windows 10的授權。詳細資料可以參考: 硬體變更之後重新啟用 Windows

後記

整體而言,這次資料遷移當中沒有碰到太多問題,到目前為止後續使用上也滿穩定的。如果未來有出現什麼問題,在回來更新在這篇文章當中。