使用 Clonezilla live 建立自動備份、還原隨身碟

以往使用 Clonezilla Live 來建立或還原系統印象映像檔,都必須一個個步驟依照畫面指示來完成,這篇文章是為了建立一支有如下圖選單的 Clonezilla Live 開機隨身碟,可以全自動或半手動備份及還原 Windows 系統。

IMG_6198

 

✳️【隨身碟分割】

因為我要將系統印象映像檔備份到隨身碟裡,準備了一支 64GB 隨身碟,使用 Windows 磁碟管理將隨身碟分割成 2 個磁區。

  • 【磁區1】要放 Clonezilla 檔案,1GB 就夠用了,我這裡切了 4GB。檔案類型必須是 FAT32,等一下才能將磁區 1 設定為可開機。
  • 【磁區2】要放系統印象映像檔,檔案類型必須是 NTFS ,才能放 4GB 以上的檔案。
    image

✳️【建立Clonezilla live 隨身碟

以前我都是下載 .iso 檔,再以 Rufus 建立可開機隨身碟,但用 Rufus 必須使用整個隨身碟來建立系統,無法只建立在單一磁區。也因為使用了整個隨身碟,使用 Clonezilla 來備份映像檔時,是無法將檔案寫入目前正在使用的 Clonezilla 隨身碟裡的。

我目前都改用下載 zip 檔案,而且日後要更新 Clonezilla 檔案也方便,只要下載新檔案再丟進隨身碟就可以完成更新。

這裡我使用 20231005-lunar ,下載 zip 檔案。

  1. Clonezilla 檔案解壓縮後放到磁區 1。

  2. 進入 utils\win64 資料夾,找到 makeboot64.bat 檔案,滑鼠右鍵【以系統管理員分執行】,執行後就能讓隨身碟變成可開機模式。
    image
    image           

✳️【建立開機選單】

Clonezilla live 可開機隨身碟建立好之後,以文字編輯器 (必須支援 UTF-8 格式) 去修改開機選單檔案

  • 較舊型電腦 Legacy Boot ,修改 /syslinux/syslinux.cfg
  • 較新型電腦 UEFI Boot+disable csm ,修改 /boot/grub/grub.cfg
  • 本文是修改  /boot/grub/grub.cfg
  • 如下圖選單有 5 個我新增的中文選項,其他英文選項是 Clonezilla 原本的內容。每一個選項就是 grub.cfg 檔案裡的一個 menuentry 裡。
  • 我的 我的 /boot/grub/grub.cfg 檔案連結

IMG_6198

 

選項 1:Clonezilla live

menuentry "Clonezilla live (VGA 800x600)" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user hostname=lunar config quiet loglevel=0 noswap edd=on nomodeset enforcing=0 noeject locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

 這是 Clonezilla 預設的選項之一,我保留放在第一位。

另外,在 grub.cfg 檔案最前面有 2 行程式

✅ set default="0"
就是指進入選單畫面預設選項會停留在第一個   menuentry "Clonezilla live (VGA 800x600)"上,若是要讓預設選項停留在如上圖的第2行 "整顆硬碟【備份到】......" ,就改成 set default="1"

✅ set timeout="30"
進入選單畫面 30秒後都未選擇選項,系統會自動進入上面 set default 選項來執行程式,這秒數你也可以自行修改。

 

選項 2:整顆硬碟【備份到】隨身碟-映像檔自動取名、自動關機 ( 注意 mount /dev/sda2 )

menuentry "整顆硬碟【備份到】隨身碟-映像檔自動取名、自動關機 ( 注意 mount /dev/sda2 )" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset enforcing=0 locales=zh_TW.UTF-8 keyboard-layouts=NONE ocs_prerun="" ocs_prerun1="sleep 2" ocs_prerun2="sudo mount /dev/sda2 /home/partimag" ocs_live_run="sudo /usr/sbin/ocs-sr -q2 -batch -j2 -z9p -i 4096 -sfsck -scs -senc -p poweroff  savedisk  autoproductname all"  ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

 

把上面幾個參數簡單說明一下,完整的說明請看官網上的「 Clonezilla live的開機參數(boot parameters)」。


sudo mount /dev/sda2 /home/partimag
把隨身碟上的 sda2 磁區掛載為 partimag ,以便儲存映像檔。
1️⃣ 若原電腦硬碟是 M.2 PCIe SSD 硬碟,這電腦硬碟在Clonezilla 裡面會是 nvme0n1 之類的名稱,所以掛載的隨身碟第 2 個磁區名稱會是 sda2

2️⃣ 若原電腦硬碟是傳統機械硬碟,這電腦硬碟在Clonezilla 裡面會是 hda1 之類的名稱,所以掛載的隨身碟第 2 個磁區名稱也會是 sda2

3️⃣ 若原電腦硬碟是一般 SSD 硬碟,這電腦硬碟在Clonezilla 裡面會是 sda1 之類的名稱,所以掛載的隨身碟第 2 個磁區名稱就會變成是 sdb2、sdf2等,不一定的名稱。

所以假如 /home/partimg 掛載失敗,就是要修改 /dev/sda2 這裡的名稱

–batch
依照原本步驟操作 Clonezilla 時,最後系統會問 1-2 次是否確定要執行程式。
原本參數是 -c ,改成 –batch ,就會跳過最後 Y/N 的步驟。
 
poweroff 
Clonezilla 程式執行完成,要讓電腦關機就是 poweroff  ,要讓電腦重新開機就是 reboot
 
savedisk 
savedisk 就是將整顆硬碟儲存為印象映像檔。(若是部分磁區就是用 saveparts,這裡略過)
 
autoproductname all  (IMAGENAME DEVICENAME )

這 2 個參數
前面是「IMAGENAME 」,映像檔的名稱
後面是「DEVICENAME 」硬碟裝置的名稱。

詳細資料請看官網這一篇文章
 📚
📚📚再生龍指令ocs-sr的保留字串,供印象檔與裝置檔使用

1️⃣  這裡映像檔名稱的參數我設定為 【autoproductname

印象檔(IMAGENAME)名稱,包含"ask_user", "autoname", "autohostname", 與 "autoproductname"。

使用 autoproductname ,備份後會自動產生如下圖後面 3 個映像檔資料夾名稱,系統會自動抓取電腦廠牌資料為名稱。

因為【autoproductname】適用於儲存或者還原印象檔模式,所以日後我若要還原時,還原的映像檔參數也用 autoproductname,系統就會自動去抓同一型號電腦的映像檔來還原。

image

 

2️⃣  硬碟裝置的名稱參數我設定為 【all

Clonezilla 會自動找尋未被掛載使用的裝置來備份,若電腦裡只有一顆硬碟要備份,不用去管它是 hda 、nvme0n1 還是 sda ,只要用 【all】就好。
若是有多顆硬碟或多磁區,要讓系統出現選單讓我們選擇,參數就用【ask_user】。


選項3:整顆硬碟【備份到】遠端共用資料夾-映像檔自動取名、自動關機

menuentry "整顆硬碟【備份到】遠端共用資料夾-映像檔自動取名、自動關機" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset enforcing=0 locales=zh_TW.UTF-8 keyboard-layouts=NONE ocs_prerun="dhclient -v eth0" ocs_prerun1="sleep 2" ocs_prerun2="sudo mount -t cifs //172.16.7.100/images/ /home/partimag -o user=super,password=0000" ocs_live_run="sudo /usr/sbin/ocs-sr -q2 -batch -j2 -z9p -i 4096 -sfsck -scs -senc -p poweroff savedisk  autoproductname all"  ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}


我是在另一台 Win11 電腦新增一個 images 資料夾,再設定【共用】,帳號、密碼就是該台 Win11 的使用者帳密,就可以將這資料夾掛載為 partimag。
若學校有 nas 機器,也是一樣的設定共用資料夾就可以了。

image

ocs_prerun="dhclient -v eth0"
讓 Clonezilla 透過 DHCP 取得 ip。前一個  menuentry  是要備份到隨身碟,所以不需要網路,ocs_prerun 就留空。


 ocs_prerun2="sudo mount -t cifs //172.16.7.100/images/ /home/partimag -o user=super,password=0000"

將遠端共用資料夾掛載為 /home/partimag


選項4:從隨身碟 【還原】整顆硬碟 -手動選擇映像檔、重新開機 ( 注意 mount /dev/sda2 )

menuentry "從隨身碟        【還原】整顆硬碟 -手動選擇映像檔、重新開機 ( 注意 mount /dev/sda2 )" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset enforcing=0 locales=zh_TW.UTF-8 keyboard-layouts=NONE ocs_prerun="" ocs_prerun1="sleep 2" ocs_prerun2=
"sudo mount /dev/sda2 /home/partimag" ocs_live_run="sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -r -j2 -batch -scr -p reboot restoredisk ask_user all"  ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

 

sudo mount /dev/sda2 /home/partimag
如前面選項 2 的說明,要注意隨身碟掛載的名稱。

reboot
這裡我設定 Clonezilla 還原後【重新開機】。

restoredisk
 還原整顆硬碟。

ask_user
映像檔名稱的參數, 若使用 ask_user ,系統會跳出如下圖的選單,讓使用者自行選定要使用哪一個映像檔。
IMG_6197

 

若是使用參數 autoproductname ,系統就會自己找相同機器名稱的映像檔來作業。
        
 

選項5:從遠端共用資料夾【還原】整顆硬碟 -自動選取映像檔、重新開機

menuentry "從遠端共用資料夾【還原】整顆硬碟 -自動選取映像檔、重新開機" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset enforcing=0 locales=zh_TW.UTF-8 keyboard-layouts=NONE ocs_prerun="dhclient -v eth0" ocs_prerun1="sleep 2" ocs_prerun2="sudo mount -t cifs //172.16.7.100/images/ /home/partimag -o user=super,password=0000" ocs_live_run="sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -r -j2 -batch -scr -p reboot restoredisk autoproductname all"  ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

這選項就是掛載遠端共用資料夾來還原整顆硬碟 (restoredisk)

映像檔名稱使用 autoproductname ,所以會自動去抓取機器名稱的映像檔來還原。

     

選項6:從遠端共用資料夾【還原小硬碟到大硬碟】-手動選擇映像檔、重新開機


menuentry "從遠端共用資料夾【還原小硬碟到大硬碟】-手動選擇映像檔、重新開機" --id live-default {
  search --set -f /live/vmlinuz
  $linux_cmd /live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset enforcing=0 locales=zh_TW.UTF-8 keyboard-layouts=NONE ocs_prerun="dhclient -v eth0" ocs_prerun1="sleep 2" ocs_prerun2="sudo mount -t cifs //172.16.7.100/images/ /home/partimag -o user=super,password=0000" ocs_live_run="sudo /usr/sbin/ocs-sr -g auto -e1 auto -e2 -r -j2 -k1 -batch -scr -p reboot restoredisk ask_user all"  ocs_live_extra_param="" ocs_live_batch="no" vga=788 ip= net.ifnames=0  nosplash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1
  $initrd_cmd /live/initrd.img
}

 

這選項主要是加了參數【k1】,讓小硬碟的映像檔還原到大硬碟。新硬碟的每一個磁區空間會等比例放大。

image

圖片來源


例如原本 250GB  硬碟,假設在 Windows 裡看到 C 磁碟 230 GB,還原到新的 500GB 硬碟,C 磁碟就會變成 460 GB。

這方式很適合原本硬碟空間不足想要換大硬碟,但又不想重新安裝新系統時來使用。

  

🤖🤖完成。

 

留言

這個網誌中的熱門文章

讓 Win10 電腦開機就啟動 Numlock

使用教育雲端帳號啟用 @go.edu.tw