分類: Linux

更換主機硬碟 - 使用 Clonezilla 克隆整個系統

No Comments

若我們想升級主機的硬碟,那就是換一顆硬碟(不然呢?)或加裝硬碟,欲使存取效能或空間變更大,功耗變更小等目的。然而換一顆硬碟涉及到整個作業系統的複製,其並非單純;在於 OS 所依存的檔案系統並非原生可移植的(natively portable);並非只要複製那麼單純。因此,升級硬碟作法很多而各涉及不同程序操作,而都有相當的複雜度,例如,直接重灌;直接手動修整整個目錄檔案去蕪存菁騰出空間;使用 dd command 複製至另一顆硬碟及九彎十八拐的指令操作;使用 GHOST;及本文採用的 Clonezilla。其由台灣的國網中心所開發的免費系統克隆軟體。而其操作,亦是複雜中的簡單了。而筆者將更簡單地重點式描述。主旨是將整個系統從一顆硬碟複製到另一顆新硬碟以使用之。省(簡)略了的東西例如,我們只假定新舊硬碟都是只有(透過 fdisk 已製作好了)兩個分割區,ext4(系統) 及 swap(交換區);關於新硬碟的分割區的製作,及其他省略掉的東西請自行谷歌。

準備的軟硬體工具

  • 新硬碟。
  • 製作 Ubuntu 的開機安裝碟。我們當初灌 Ubuntu 所使用的安裝光碟片或 USB 安裝隨身碟,其藉由 unetbootin 所製作。筆者使用建立出來的 ubuntu 可開機可安裝 USB 隨身碟,簡稱 Ubuntu USB boot drive。
  • 製作 Clonezilla Live 可開機可克隆的工具碟。其藉由 Tuxboot 所製作。其是 unetbootin 的修改版,其可製作出筆者所使用的 clonezilla live 可開機可克隆 USB 隨身碟,簡稱 Clonezilla USB boot drive。
  • 新硬碟可接上主機的介面。例如若主機可插上第二顆硬碟便可,不然的話可使用外接硬碟盒例如 SATA 轉 USB 3.0 或 mSATA 轉 USB 3.0 等等。
  • (非必要)準備另一台電腦。事實上筆者在(當成伺服器的)主機上做 clonezilla 是失敗的。兩顆硬碟都拿到另一台台牌主機上操作才成功。其原因是該主機的 BIOS 有 bug;淘牌主機不意外早有心裏準備。
  • (非必要)網路環境/可上網。

步驟

  • 製作 ubuntu usb boot drive
  • 製作 clonezilla live usb boot drive
  • 主機上同時接有兩顆新舊硬碟
  • 使用 clonezilla live usb boot drive 開機
  • 選擇分割區到分割區直接複製。筆者原先使用,先從舊硬碟製成 image file 再來還原到新硬碟。但接著卻發現。。。按,遍尋不著還原的選項。。。是筆者眼殘了嗎 XD
  • 2020/0808 補充:透過映像檔來還原的選項確實有在的,當選擇”選取寫入或讀取映像檔的分割區“之後,會再出現選擇路徑的選單,在所選擇的該路徑下若有已製成的存放映像檔的目錄,那麼再下一步的選單中就會出現還原的選項了。
  • 克隆完成後,關機,拔掉舊硬碟只留新的。
  • 再由 ubuntu usb boot drive 開機,並選擇“Try Ubuntu without installing”;我們目的是新硬碟內的 ubuntu 系統尚須在 umount 的狀態下做些設定修改:
  • 查詢新硬碟的 swap 區的 uuid。並修改 fstab。
  • 重新安裝 grub。關機。
  • 新硬碟的系統克隆便成功完成。拿到目的主機上取代舊硬碟。

做法細節

製作 ubuntu USB 碟

使用 ubuntu,留存一支 ubuntu USB 系統安裝隨身碟是必要的。當系統錯誤,檔案系統毀損或無法開機等,很多時候就需靠它來救援。
筆者在 ubuntu 上執行 unetbootin 有無法顯示視窗的問題,故轉至使用 Windows 版本來製作則沒有問題。

製作 clonezilla live USB 碟

Clonezilla 網站所提供的 clonezilla 版本筆者覺得有點亂,也嘗試過不同版本,但初期一直失敗是因主機 BIOS 之故所以也沒有結論使用哪一版最合適。
Clonezilla 提供不同的克隆及附加功能,含網路,相當完善,有興趣者請細察官網。
筆者使用 Clonezilla Live 版,版號如圖,下載下來的名稱是 clonezilla-live-20200703-focal-amd64.zip
毌需解開,之後 Tuxboot 可直接存取。

接著再下載 Tuxboot。並使用之;請點擊此參考官網其操作。在其執行界面下選取本地端的已下載的 clonezilla 檔案。clonezilla-live-20200703-focal-amd64.zip

使用 clonezilla live 開機,及克隆

一。選擇預設的第一行
二。使用中文
三。使用預設鍵盤配置
四。使用名字有點聳的再生龍
五。選擇直接複製/on-the-fly
六。初學者
七。選擇對象是分割區到分割區
八。選擇來源分割區
九。選擇目的分割區
十。略過檢查來源分割區的檔案系統是否有損壞
十一。選擇當克隆完成,再決定下一步為何。停頓用以確認成功,及它的關機或重啟可能會卡住不成功,所以屆時完成後我們進入命令列模式,下 halt -p –poweroff(注意 – – po),若無法關機再手動長按電源鍵關機或直接拔插頭
十二。它會有如何直接下指令的提示
十三。按 y 開始克隆,並等待完成。筆者的 50G 大概 15 分鐘

使用 ubuntu 碟開機,並選擇由光碟/隨身碟載入系統

重新安裝 Grub 開機管理器及修改 fstab 設定

  • 重新安裝 Grub,請參考這篇文章
  • 假設我的硬碟是 /dev/sda,系統分割區是 /dev/sda1,交換區是 /dev/sda2
  • 貼來該篇文章的各指令,原則上依序執行即可
  • sudo mount /dev/sda1 /mnt
  • sudo mount –bind /dev /mnt/dev(注意是 – – b,以下亦然)
  • sudo mount –bind /dev/pts /mnt/dev/pts
  • sudo mount –bind /proc /mnt/proc
  • sudo mount –bind /sys /mnt/sys
  • sudo chroot /mnt
  • grub-install /dev/sda
  • grub-install –recheck /dev/sda(注意是 – -r)
  • update-grub
  • exit
  • sudo umount /mnt/sys
  • sudo umount /mnt/proc
  • sudo umount /mnt/dev/pts
  • sudo umount /mnt/dev
  • sudo umount /mnt
  • 下一步要修改 fstab 設定

假設新硬碟(假設為 /dev/sda)除了系統分割區(/dev/sda1)/已被克隆了,及只有一個交換分割區(/dev/sda2),那麼我們接下來要做的就是啟用這個交換分割區,並且修改 fstab 中原先所記錄的交換分割區的識別,改成新的交換分割區識別。

若該分割區還未被標示為交換分割區,則下如下指令(請對應使用您的硬碟裝置路徑):
sudo mkswap /dev/sda2


以下是補充,介於等號行內
==============================
若您不確定您的硬碟裝置路徑,則以下做法輔助您確認:
ls -l /dev/[sh]d*
則會列出所有磁碟。

我確認了硬碟對象是 sda,那麼接著下:
sudo fdisk -l /dev/sda

因此確認了交換區是 /dev/sda3 (這是在另一台電腦上操作的,請勿搞混)
接著,下:
sudo blkid

它會列出所有已可被檔案系統識別的檔案裝置,然而例如,其中有可能 /dev/sda3 交換區尚未可被識別,即,未被賦予 UUID,那麼它就不會有 UUID 被列出來,以致於我們須要賦予它一組 UUID 才可識別而下如下指令:
sudo mkswap /dev/sda3
==============================


接著,下:

sudo blkid

並且複製下來交換區的 UUID,
如圖例是
2ba92ae9-57e2-4be6-9b97-51a6ad42525e

接著要編輯 /etc/fstab

  • sudo mount /dev/sda1 /mnt
  • sudo vim /mnt/etc/fstab
  • 將原先 swap 區的舊 UUID 改為新的 UUID
  • 如圖,將該 UUID 字串換成新的 UUID 字串,並存檔離開
  • sudo umount /mnt
  • 大功告成,關機後,即可使用新硬碟開機;新硬碟與舊硬碟無異了。

總結

  • 20201018 補充:談一下關於 Windows 10 的備份還原。本節內容有助於往後遭遇到相關問題時的輔助處置(即,不限於對象是 windows)。
  • 筆者在後來又使用了映象檔的方式來測試備份還原,實例是針對 Windows 10。至少於此該注意的是 Clonezilla 當前只支援還原至不比原先(所備份的)分割區小的分割區;若還原至更小的分割區是必然失敗的。這是第一個問題。
  • 還原後,GRUB 有可能無法正確讀取到 Windows 的啟動磁區的。會顯示 invalid signature。這是第二個問題。(或者會出現找不到該分割區,或該分割區無法啟動等的訊息,則請檢查 BIOS SETUP 中與 boot 相關的設定)
  • 當讓 GRUB 順利跳至 Windows 啟動磁區作載入後,Windows 仍無法順利啟動,而是會出現 0xc000000e 錯誤碼的藍屏是最後一個須克服的問題。
  • 故事開始,
  • 當我們愈發習慣使用 Linux,便愈鮮少使用 Windows 了,因此原本開給 Windows 使用的空間是 100G,但實際使用只有 30G 就鮮少再增加。雖然 Clonezilla 做備份時只提取資料而會忽略未使用空間並且進行壓縮使得備份出來的映象檔例如只有 15G,但我們作還原時,不幸地仍需至少 100G 的空間。解決的方式很直覺,可在備份前,或還原後作定。使用 gparted 改變該分割區的大小,即,例如前提到的,使用空間有 30G,或許多預留 10G,即我們將該分割區從 100G 改為 40G 再進行 Clonezilla 備份。或於還原完再進行修改皆可;但顯然後者易造成困擾。
  • 關於第二個問題起因於(還原後/硬體上通常會異於原先之新存儲配置)我們是使用 Grub,多個磁碟,多個分割區,而還原後的 Windows 已不在原先它所認定的分割區地址索引。解法請參考後面的文章關於“主機與系統規劃”:首先重新執行 grub-install,接著執行 update-grub,通常 grub 就可以找到 Windows。若沒找到則再試著自訂追加 menuentry。
  • 最後一個問題筆者採用的解法,下載 windows 10 的安裝映象檔,官網已有公開免費提供下載安裝(,付費註冊即可升等成正式版,當然我們於此不需走到這步,我們僅是用它來做修復)。其次,下載 Ventoy,其是一個等同 unetbootin 但更簡單易用的 USB 開機工具(請參考它的 README 文件,透過它的 script file 制式地製作一張 USB 可開機隨身碟,並[可]將[不同的]映象檔直接複製至該碟上,如此來開機便會有[可供選取地]自動載入/執行某映象檔)。本案例是載入 windows 10 安裝光碟。接著的步驟,點選修復,點選麻煩速停,點選命令模式並下達 bootrec /rebuildbcd 如此即成。關於這一步請以關鍵字搜尋 “0xc000000e winload fix”。

Categories: Linux

Tags:

PHP Code Snippets Powered By : XYZScripts.com