Backup and Restore GNU/Linux System in VirtualBox

VirtualBox 作業系統的備份與還原

【摘要】敘述將作業系統的備份檔還原到 VirtualBox 虛擬硬碟的步驟,以及把虛擬硬碟中的系統複製到隨身碟或製成備份檔的方法。


【目錄】

    【前言
    【新增共用資料夾
    【將備份檔還原到虛擬硬碟
    【在 VB 製作備份檔
    【從 VB 複製到隨身碟
    【後語

【前言】

一、前面網誌已談過「用 dd 指令備份和還原 Debian GNU/Linux 10 作業系統」,其中有製作備份檔的方法。本文敘述將此等備份檔還原到 VirtualBox(VB)虛擬硬碟的步驟。

二、本文的重點是系統的備份與還原,所以就不詳細說明 VB 的操作了。

三、本例使用的作業系統是自製的 FluxBox Debian GNU/Linux 10

四、因為要把備份檔放在共用資料夾(Shared Folder),所以先談新增共用資料夾的方法。


【新增共用資料夾】

一、先決條件:客系統要先安裝補充包(Guest Additions)。方法請見「在 Debian GNU/Linux 10 安裝 VirtualBox 6.1」。


二、假設要共用的目錄是自家的 Public。

  ⒈ 選取 Machine 後,點選右上方的 [Settings]

a1-machine-settings

  ⒉ 點選左方的 [Shared Folders]

a2-shared-folders-add

  ⒊ 點選右上方的新增資料夾圖示

  ⒋ 在 [Folder Path] 下拉清單中選 [Other…]

  ⒌ 選自家的 Public 目錄

a3-choose-folder

  ⒍ 勾選 [Auto-mount]

  ⒎ [Mount Point] 填入掛載點名稱,本例用 /media/HostPublic 示範

  ⒏ 點選右下方的 [OK]

  ⒐ 再點選右下方的 [OK]


三、啟動客系統,開啟檔案管理員,在 /media 目錄中應該有新增 HostPublic 目錄

a4-host-public

【將備份檔還原到虛擬硬碟】

一、將備份檔(假設叫 backup.xz)移到主系統的 Public 目錄(這是共用資料夾)。


二、假設 VB 原有一 Machine 叫 Debian10,現新增一個,叫 Debian10-1。


三、在 Debian10 加掛 Debian10-1 的虛擬硬碟。

  ⒈ VB 主視窗左欄選 Debian10,然後點選右上方 [Settings] 圖示

  ⒉ [Storage] > [Controller 新增硬碟圖示] > 選 Debian10-1.vdi > [Choose]

b1-storage-controller
b2-choose

  ⒊ [OK]

可以看到 [Controller] 增加了 Debian10-1.vdi。

b3-result

四、啟動 Debian10。

這虛擬硬碟是 sda,而 Debian10-1 的是 sdb。


五、準備目標硬碟 sdb。

用 Gparted 新增 sdb1。


六、還原。

先執行 lsblk 確認 sdb1 沒有被掛載;如果有,要先卸下:

sudo umount /dev/sdb1

然後在 sda1 執行:

xz -cd /media/HostPublic/backup.xz | sudo dd of=/dev/sdb1 bs=1M status=progress

  -c:輸出到 standard output。
  -d:解壓縮(Decompress)。
  /media/HostPublic/backup.xz:備份檔的路徑(這是共用資料夾)。
  of:輸出檔(Output File)。用目標分割區為輸出檔。
  bs:讀寫一次的尺寸。預設值是 512 Bytes,速度太慢。用 512K 也可以,但 1M 比較簡單好記。
  status=progress:顯示進度。一個作業系統通常非常地大,要很長的時間,不知道進度會很不耐煩的。


七、修正檔案系統、改 UUID、改名。

啟動 Gparted,

  1. 選 sdb1,[Partition] > [Check]
  2. 選 sdb1,[Partition] > [New UUID]
  3. 選 sdb1,[Partition] > [Label File System]
  4. 執行
  5. 選 sdb1,[Partition] > [Information],將 UUID 複製到剪貼簿

八、掛載 sdb1。

若 sdb1 已掛載,但不是在 /mnt,自行修改下面指令;或是先卸下,再掛在 /mnt。此目錄必需原本是空的。

sudo mount /dev/sdb1 /mnt

九、修改 fstab 檔。

以 root 權限,用文書程式開啟 /mnt/etc/fstab 檔,修改 UUID。存檔後,關閉文書程式。

改 fstab 檔,以前用 Ubuntu 系統是必要的,但今在 Debian 系統,似乎不改也沒關係,其它系統就不一定了。不過還是建議改一下,畢竟都一樣比較不容易出錯。


十、sdb 安裝 Grub。

sudo grub-install --boot-directory=/mnt/boot /dev/sdb

  --boot-directory:指定開機檔所在的目錄。
  最後一項是要用來開機的裝置;提醒:此處是 sdb 而非 sdb1。


十一、更新開機清單。

  ⒈ 接下來要改 sdb1 的開機清單,必需在 sdb1 做。但是不用 sdb1 開機而要讓系統認為是用 sdb1 開機,必需用模擬的方式,所以掛上一些模擬要用的目錄。

sudo mount --bind /dev /mnt/dev
sudo mount --bind /sys /mnt/sys
sudo mount --bind /proc /mnt/proc

  ⒉ 切換到 sdb1:

sudo chroot /mnt

  ⒊ 更新 sdb1 的開機清單:

sudo update-grub

十二、再更新 sdb1 的開機清單。

因為之前的更新包含了 Debian10 的虛擬硬碟,而且 Debian10-1 是在 sdb1,現在要去掉 Debian10 並把 Debian10-1 改成 sda1。

Debian10 關機,用 Debian10-1 開機。

sudo update-grub

十三、確認無誤後,將 Debian10 之前加掛的 Debian10-1 去掉。


【在 VB 製作備份檔】

方法和實體硬碟雷同,因為是要複製正在運轉的系統,建議用 Rsync 程式,步驟請見「用 rsync 指令備份和還原 Debian GNU/Linux 10 作業系統」。


【從 VB 複製到隨身碟】

將虛擬硬碟分割區複製到隨身碟的方法和實體硬碟雷同,只差在要 VB 找到隨身碟而已。在 VB 使用隨身碟要安裝擴充包,方法請見「Debian GNU/Linux 10 安裝 VirtualBox 6.1 的方法」。


一、在 VB 中用某一 Machine 開機後,插入隨身碟。


二、在上方選單列選 [Devices] > [USB] > 勾選剛插入的隨身碟。

虛擬硬碟是 sda,隨身碟是 sdb。


三、複製。

因為是要複製正在運轉的系統,建議用 Rsync 程式,步驟請見「用 rsync 指令備份和還原 Debian GNU/Linux 10 作業系統」。


【後語】

虛擬硬碟中的某些參數和實體硬碟不同,譬如網路界面的名稱,所以請多注意。


發表留言