Linux伺服器 Linux伺服器

資工所專業課程上課教材

資工所專業課程 > 課程內容 > 專題六 - 以 rootfs 備份、復原系統,以 grub4dos 處理多重選單

專題六 - 以 rootfs 備份、復原系統,以 grub4dos 處理多重選單

上次更新日期 2019/07/08

前一章節我們談到了 rootfs 這個好用的東西!另外也提到了實體機器可能會透過這種方式來進行備份、復原整體裸機環境的設計! 這節課,我們就實際透過 rootfs 來處理備份復原的情境,同時進行一些比較底層作業系統的處置方案,讓未來管理系統變得更簡單。 此外,如同資傳系的教室環境,我們都有多重作業系統的環境,那麼如何建置這種環境?如何處理子選單呢?如何做不同平台的選單處理呢? 這裡就讓我們繼續看下去!

  • 磁碟容量擴增與 Linux LVM 的利用
  • MSDOS 分割表的多重作業系統安裝流程以及 grub4dos 的選單製作
  • 使用 rootfs 搭配 partclone 進行備份、復原的任務
  • 參考資料

磁碟容量擴增與 Linux LVM 的利用

磁碟容量不足的時候,在實體機器的架構下,我們就使用更高容量的磁碟來『抽換』即可!雖然這個動作會花費很多很多時間與精力... 但是在虛擬機器的情況下呢?似乎不太需要啊~因為我們可以『直接增加磁碟容量』呢!

  1. 虛擬機器容量不足的解決方案
    1. 當初給予虛擬機器大約 40G 的容量,現在可能不夠用了!在 Linux 的環境架構下,如何進行容量的放大? 實體機大多使用直接增加磁碟的方案,虛擬機器並沒有實體磁碟~此時,可以透過放大磁碟檔案,就可以讓整顆硬碟的容量變大!
    2. # 1. 建立測試用的磁碟環境:
      # cd /vmdisk
      # vim create_vm_settings.sh
      ...
      vmnames="lvmsystem"
      ...
      
      # sh create_vm_settings.sh
      
      
      # 2. 更改 lvmsystem.img 由 snapshot 的模式改成 original 的模式! # qemu-img info lvmsystem.img image: lvmsystem.img file format: qcow2 virtual size: 40G (42949672960 bytes) disk size: 196K cluster_size: 65536 backing file: /vmdisk/demo.img <==使用的是 backing file!不要! Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false # cp /vmdisk/demo.img lvmsystem.img <==會複製稍久 # qemu-img info lvmsystem.img image: lvmsystem.img file format: qcow2 virtual size: 40G (42949672960 bytes) <==至於原本則是 40G 喔! disk size: 1.3G <==原始磁碟格式,容量會比較大! cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
      # 3. 在不變動檔案系統的情況下,讓磁碟容量增加成為 60G 看看 # qemu-img resize --shrink lvmsystem.img 60G Image resized. # qemu-img info lvmsystem.img image: lvmsystem.img file format: qcow2 virtual size: 60G (64424509440 bytes) <==容量就會放大囉! disk size: 1.3G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
      # 4. 啟動這個系統並且登入後,嘗試處理,將增加的容量整個以 LVM 的格式,掛載到 /data 中 # virsh create lvmsystem.xml # tail -f /var/log/messages <==用這個方法抓取系統的 IP May 24 10:42:33 myhostname dhcpd: DHCPDISCOVER from 52:54:00:ed:0e:cf via mybr0 May 24 10:42:34 myhostname dhcpd: DHCPOFFER on 192.168.19.15 to 52:54:00:ed:0e:cf via mybr0 May 24 10:42:34 myhostname dhcpd: DHCPREQUEST for 192.168.19.15 (192.168.19.254) from 52:54:00:ed:0e:cf via mybr0 May 24 10:42:34 myhostname dhcpd: DHCPACK on 192.168.19.15 to 52:54:00:ed:0e:cf via mybr0 # ssh 192.168.19.15 # 接下來的動作,就是在這個新的 VM 環境底下喔! # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom vda 252:0 0 60G 0 disk <==容量是有放大的! ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 39G 0 part ├─centos-root 253:0 0 37G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] # fdisk -l Disk /dev/vda: 64.4 GB, 64424509440 bytes, 125829120 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk label type: dos 磁碟識別碼:0x000c0cd4 所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/vda1 * 2048 2099199 1048576 83 Linux /dev/vda2 2099200 83886079 40893440 8e Linux LVM # fdisk /dev/vda # 將所有的容量設計為 primary ,並且提供給 /dev/vda3 使用 # fdisk -l /dev/vda Disk /dev/vda: 64.4 GB, 64424509440 bytes, 125829120 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk label type: dos 磁碟識別碼:0x000c0cd4 所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/vda1 * 2048 2099199 1048576 83 Linux /dev/vda2 2099200 83886079 40893440 8e Linux LVM /dev/vda3 83886080 125829119 20971520 8e Linux LVM <==我需要這個喔! # pvcreate /dev/vda3 # vgcreate mylvm /dev/vda3 # vgdisplay mylvm --- Volume group --- VG Name mylvm System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 20.00 GiB PE Size 4.00 MiB Total PE 5119 <==這個多個! Alloc PE / Size 0 / 0 Free PE / Size 5119 / 20.00 GiB VG UUID AqtC3w-4ISG-ajKq-IuyM-nofs-H3EB-F8cp5l # lvcreate -n varlv -l 5119 mylvm # lvdisplay /dev/mylvm/varlv --- Logical volume --- LV Path /dev/mylvm/varlv LV Name varlv VG Name mylvm LV UUID 9D9M7B-s3U9-lvtq-ZMf0-5PDU-dIXn-dYXWYF LV Write Access read/write LV Creation host, time localhost.localdomain, 2019-05-24 10:50:28 +0800 LV Status available # open 0 LV Size 20.00 GiB Current LE 5119 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 # mkfs.xfs /dev/mylvm/varlv # blkid /dev/mylvm/varlv /dev/mylvm/varlv: UUID="ca6d9578-9240-427d-9c35-bc0ed997a251" TYPE="xfs" # vim /etc/fstab /dev/mylvm/varlv /data xfs defaults 0 0 # mkdir /data # mount -a # df -Th /data 檔案系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/mylvm-varlv xfs 20G 33M 20G 1% /data # mkdir /data/testing # cp -a /etc /root /data/testing
    3. 若還需要將資料『固定放置於某個目錄』時,可以將該目錄重新設計掛載成為 LVM 的格式 (盡量不要使用到系統槽), 然後透過 LVM 的容量放大行為,就可以讓該目錄持續不斷的長大了!不過,這一開始就要好好的規劃!不然,未來還是得要重新格式化製作 LVM! 假設上面的 lvmsystem.img 你還要放大容量成為 100G 呢?該如何處理?
      # 1. 關閉 lvmsystem 這個虛擬機之後,增加容量成為 100G,先假設你在 VM 內,可以 poweroff 喔!
      # poweroff
      Connection to 192.168.19.15 closed by remote host.
      Connection to 192.168.19.15 closed.
      # 要注意!不要在實體機下達 poweroff !不然就糗了!
      
      # virsh list
      # 確認這個系統已經不在使用中!
      
      # lsof lvmsystem.img
      # 確認目前沒有任何程序有動到 lvmsystem.img 這個檔案!
      
      # qemu-img resize --shrink lvmsystem.img 100G
      # qemu-img info lvmsystem.img
      image: lvmsystem.img
      file format: qcow2
      virtual size: 100G (107374182400 bytes)   <==再次變大!
      disk size: 1.4G
      cluster_size: 65536
      Format specific information:
          compat: 1.1
          lazy refcounts: false
          refcount bits: 16
          corrupt: false
      
      
      # 2. 開始重新啟動 lvmsystem 虛擬機器,登入後將增加的容量再次的放入 /data 中! # virsh create lvmsystem.xml # lsof lvmsystem.img COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME qemu-kvm 13861 qemu 20u REG 259,2 1485899328 28861760 lvmsystem.img qemu-kvm 13861 qemu 21u REG 259,2 1485899328 28861760 lvmsystem.img # ssh 192.168.19.15 # 接下來就在 VM 裡面工作! # fdisk /dev/vda # 將所有容量放入到 extended 當中後,將所有容量都給予一個 logical 分割槽 # fdisk -l /dev/vda Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk label type: dos 磁碟識別碼:0x000c0cd4 所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/vda1 * 2048 2099199 1048576 83 Linux /dev/vda2 2099200 83886079 40893440 8e Linux LVM /dev/vda3 83886080 125829119 20971520 8e Linux LVM /dev/vda4 125829120 209715199 41943040 5 Extended /dev/vda5 125831168 209715199 41942016 8e Linux LVM <==就是要有他! # pvcreate /dev/vda5 # vgextend mylvm /dev/vda5 # vgdisplay mylvm --- Volume group --- VG Name mylvm System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 59.99 GiB PE Size 4.00 MiB Total PE 15358 Alloc PE / Size 5119 / 20.00 GiB Free PE / Size 10239 / 40.00 GiB VG UUID AqtC3w-4ISG-ajKq-IuyM-nofs-H3EB-F8cp5l # lvresize /dev/mylvm/varlv -l +10239 # lvdisplay /dev/mylvm/varlv --- Logical volume --- LV Path /dev/mylvm/varlv LV Name varlv VG Name mylvm LV UUID 9D9M7B-s3U9-lvtq-ZMf0-5PDU-dIXn-dYXWYF LV Write Access read/write LV Creation host, time localhost.localdomain, 2019-05-24 10:50:28 +0800 LV Status available # open 1 LV Size 59.99 GiB Current LE 15358 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 # xfs_growfs /data # df -Th /data 檔案系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/mylvm-varlv xfs 60G 69M 60G 1% /data # ll /data/testing/ drwxr-xr-x. 79 root root 8192 5月 24 10:52 etc dr-xr-x---. 4 root root 196 5月 24 10:52 root
      這樣,你的 /data 目錄,其實就有點像可以無限制放大的一個目錄所在囉!

即使如此,你應該還是會覺得很怪異!那就是,我們最終不是讓新增加的容量通通變成了 extended 的容量了?所以, 那 4 個 primary + extended 的限制已經飽和了!未來如果再增加容量,可能就會變成無法新增!怎辦?

其實你可以抄下 logical 的範圍,將 extended 刪除後,重建 extended 成為最大,然後再增加兩個 logical,這樣就好。 只是...沒有經驗的管理員,會很害怕失敗啊!其實...鳥哥也很害怕!那怎辦?可能得要重頭規劃系統喔!安裝時,處理分割表成為 GPT 的格式即可!不過,可能得要重新安裝才行啊!

MSDOS 分割表的多重作業系統安裝流程以及 grub4dos 的選單製作

一般知道 Linux / Windows 安裝流程的朋友,都會跟你說,要先安裝 windows 在安裝 Linux,這樣 Linux 才能接管開機管理程式。 但若是以本系的教學用教室環境來說,我們的系統安裝了多重作業系統,包括管理用 Linux 界面、上課用 windows 界面以及考試用 windows 界面等。 因為有多個系統,所以我們通常使用一個小型的檔案系統來管理開機選單。因此,使用的環境就是:

  • 一個小小的大約佔用 5G 容量的 Linux,重點在管理開機選單
  • 大約 100G 的 windows,上課專用的
  • 大約 30G 的 windows,考試環境專用的。

現在,就讓我們來完成這一個小小的案例吧!

  1. 建立所需要的虛擬環境,以及第一個 Linux 管理系統:
    1. 先進入 /vmdisk 後,建立一個大約 135G 容量的虛擬磁碟系統
      # 1. 先建立好 XML 的環境吧:
      # vim /vmdisk/create_vm_settings.sh
      .....
      vmnames="dicos"
      ...
      
      # sh create_vm_settings.sh
      # qemu-img create -f qcow2 dicos.img 135G
      # ll dicos.*
      -rw-r--r--. 1 root root 198768  5月 26 22:17 dicos.img
      -rw-r--r--. 1 root root   2612  5月 26 22:17 dicos.xml
      
      # qemu-img info dicos.img
      image: dicos.img
      file format: qcow2
      virtual size: 135G (144955146240 bytes)
      disk size: 196K
      cluster_size: 65536
      Format specific information:
          compat: 1.1
          lazy refcounts: false
          refcount bits: 16
          corrupt: false
      # 請確認 (1)容量與 (2)是否為原始磁碟格式!
      
      
      # 2. 修改 XML 檔案,讓光碟機可以進行開機行為 # vim dicos.xml ..... <disk type="file" device="cdrom"> <driver name="qemu" type="raw"/> <source file="/vmdisk/iso/CentOS-7-x86_64-DVD-1810.iso"/> <target dev="hda" bus="ide"/> <readonly/> </disk> ..... # virsh create dicos.xml
    2. 接下來,請在 spice 的環境下,將 CentOS 安裝妥當!大概需要注意的僅有:
      • 選擇中文-台灣語系
      • 選擇『最小型安裝』,但是增加『相容性函式庫』、『開發工具』、『系統管理工具』等
      • 安裝目的地,使用『標準分割』,不要 swap,不要 /boot,只需要 / 大約 5G,且為 EXT4 檔案系統
      • 關閉 KDUMP 吧!
      • 在網路與主機名稱的部份,直接啟用網路吧!
      • root 密碼以及你的個人帳號,就自由設定,但是不可以太簡單!
    3. 完成並且重新開機進入這個小型 Linux 管理系統,進行全系統升級,並且安裝需要的軟體:
      # yum -y update
      # yum install net-tools bash-completion vim-enhanced tcpdump bind-utils bridge-utils iptables-services
      # fdisk /dev/vda
      # 最終需要切出來 windows 也需要安裝的分割槽即可!一定要給予 System ID 為 NTFS 才行!
      
      # fdisk -l /dev/vda
      Disk /dev/vda: 145.0 GB, 144955146240 bytes, 283115520 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O 大小 (最小/最佳化):512 位元組 / 512 位元組
      Disk label type: dos
      磁碟識別碼:0x000c07c2
      
      所用裝置 開機      開始         結束      區塊   識別號  系統
      /dev/vda1            2048    10487807     5242880   83  Linux
      /dev/vda2        10487808   220203007   104857600    7  HPFS/NTFS/exFAT   <==這是上課用的 windows 10
      /dev/vda3       220203008   283115519    31456256    7  HPFS/NTFS/exFAT   <==考試才會用到的系統
      
      然後再次的在確認沒有任何怪異的問題之後,就直接關機,這樣就完成第一個系統了。
  2. 建立平時上課用的 Windows 10 系統:
    1. 目前 (2019/05) 使用的最新 windows 為 1809 版本,請從校內官網下載此版本,我們預計作為一個測試用的環境, 所以安裝完畢後,請不要開啟!直接安裝好就好。另外,也得下載 windows 專用的 virtio driver 才行! 所以,前驅軟體我們需要的有:
      • Windows 10 ISO (KSU FTP)
      • Virtio for windows (search here)
    2. 開始修改 xml 檔案,讓我們可以使用 windows 10 的 ISO 來進行安裝行為:
      # 1. 修改 dicos.xml 檔案內容:
      # vim /vmdisk/dicos.xml
          <disk type="file" device="cdrom">
            <driver name="qemu" type="raw"/>
            <source file="/vmdisk/iso/Win10_1809_64.iso"/>
            <target dev="hda" bus="ide"/>
            <readonly/>
          </disk>
      
      
      # 2. 啟動 dicos,不過你得要留意,開機時,大概只有數秒鐘按下 [enter] 來進入 windows 安裝喔! # virsh create dicos.xml
    3. 進入安裝程序後,你可以依序這樣選擇:
      • 確認安裝的語言,然後『下一步』
      • 按下『立即安裝』後,開始程序
      • 選擇『Windows 10 專業版』這一個版本
      • 接受授權條款後,下一步
      • 使用『自訂:只安裝 Windows』這個項目
      • 接下來,你會看到『找不到任何磁碟機』的畫面!不要懷疑!確實沒有磁碟機。
    4. 抽換光碟片,這個就需要在實體機器進行了!指令也很簡單:
      # virsh attach-disk dicos /vmdisk/iso/virtio-win-0.1.171.iso hda --type cdrom --mode readonly
      
      此時,請回到 spice 畫面,然後按下『載入驅動程式』的按鈕,再按下『瀏覽』就可以看到 D 槽了! 光碟標題會是『virtio-win-0.1....』這樣。最重要的是底下這幾個驅動程式要安裝:
      1. amd64/win10 --> Red Hat VirtIO SCSI controller
      2. NetKVM/win10/amd64 --> Red Hat VirtIO Ethernet Adapter
      3. qemufwcfg/win10/amd64 --> QEMU FWCfg Device
      4. qxldod/win10/amd64 --> Red Hat QXL controller
      5. viorng/win10/amd64 --> VirtIO RNG Device
      安裝驅動程式完畢後,還不能繼續!這時,請先將 Windows 10 的光碟片換回來:
      # virsh attach-disk dicos /vmdisk/iso/Win10_1809_64.iso hda --type cdrom --mode readonly
      
    5. 然後,你應該就會看到剛剛建立成功的 3 個分割槽,在 100G 左右的那個分割槽上面點一下,然後按『下一步』之後, 系統就開始自動安裝了!接下來就是持續不斷的等待而已。
    6. 再次的登入 windows 系統,比較重要的部份,在建立帳號的那個地方!大致上的本機帳號建置流程:
      • 選擇左下角『離線帳戶』
      • 不要使用 microsoft 帳戶,所以選擇『否』
      • 開始輸入你的帳號與密碼 (個人使用,可以不輸入密碼喔!)
      • 紀錄個人歷程可以選『否』,然後接受隱私權設定,就可以順利登入了!
      因為我們是暫時用來測試用的,因此,可以的話,請將 windows 的『設定』--> 『更新與安全性』--> 『進階選項』--> 全部都關閉!確認沒有問題!就可以關機了!
  3. 建立第二套 Windows 系統的手段
    1. 要先將存在的 windows 分割槽隱藏!基本上, windows 會找到前一個安裝好的 windows 系統作為開機管理主系統, 然後將之後安裝的系統的控制權,通通交給前一個!所以,如果第一個 windows 系統沒有隱藏的話,後來安裝的 windows 系統,就不會在 boot sector 上面安裝開機管理程式了。選擇了第一個 windows 之後,才會出現不同的選單啊! 所以,當然就需要將第一個 windows 隱藏了!隱藏的方法很簡單,就是製作一個 windows 不認識的 system id 即可。
      # 1. 開機進入 rootfs 的環境
      # vim /vmdisk/dicos.xml
        <os>
          <type arch="x86_64">hvm</type>
          <boot dev="network"/>
          <boot dev="cdrom"/>
          <boot dev="hd"/>
        </os>
      
      # virsh create dicos.xml
      
      
      # 2. 開始使用 spice 的環境,確認有進入 rootfs 的系統,然後再透過 ssh 的方式連線到 rootfs 系統內操作: # fdisk /dev/vda # 將 /dev/vda2 的 system ID 更改為 93 # 同時將 /dev/vda2 的 boot 取消掉喔! # fdisk -l /dev/vda Disk /dev/vda: 145.0 GB, 144955146240 bytes, 283115520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk label type: dos 磁碟識別碼:0x000c07c2 所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/vda1 2048 10487807 5242880 83 Linux /dev/vda2 10487808 220203007 104857600 93 Amoeba <==這裡要變成這樣! /dev/vda3 220203008 283115519 31456256 7 HPFS/NTFS/exFAT # poweroff
      # 3. 再次更新 dicos.xml,設計成為用 CD 開機囉! # vim /vmdisk/dicos.xml <os> <type arch="x86_64">hvm</type> <!--boot dev="network"/--> <boot dev="cdrom"/> <boot dev="hd"/> </os> # virsh create dicos.xml
      接下來,就會重新進入 windows 10 的安裝畫面程序中!
    2. 基本上,windows 常見的 partition system id 大致上有:
      • 07: NTFS 正常的系統
      • 17: 隱藏的 NTFS 檔案系統
      • 27: 給開發商使用的特別檔案系統
      • 93: 很怪的,windows 不認識的檔案系統
      一般,除了給予 93 這個怪異的 system ID 之外,也要將啟動旗標 (boot flag) 取消!這樣才不會讓安裝程式搞亂了!
    3. 依據前一套 windows 的安裝流程,持續進行安裝!只是,在處理安裝的磁碟畫面時,得要選擇 30G 的那一個分割槽才行! 接下來就持續安裝吧!同樣的,安裝完畢且可以登入後,就直接關機吧!
  4. 使用 rootfs 救援開機選單:
    1. 接下來,你需要重新處理整個系統的開機選單~當然,MBR 就得需要重新安裝才行!但是,因為 MBR 已經被第二個 windows 接管了, 因此,你可以使用:
      • 原版 CentOS 光碟,進入救援系統去重新處理選單與重裝 grub2
      • 使用 rootfs 進入管理系統去重新處理選單與重裝 grub2
      就以我們的環境來說,看起來 rootfs 應該是一個可行的方案啊!所以,重新處理一下囉:
      # vim /vmdisk/dicos.xml
        <os>
          <type arch="x86_64">hvm</type>
          <boot dev="network"/>
          <boot dev="cdrom"/>
          <boot dev="hd"/>
        </os>
      
      # virsh create dicos.xml
      
      接下來,就透過 ssh 或者是直接在 spice 的畫面中,直接處理 rootfs 系統的相關行為囉!
    2. 進入 rootfs 之後,我們得要先將原本的系統掛載回來~可以簡單的使用底下的指令來處理即可:
       mkdir /sysroot
       mount /dev/vda1 /sysroot
       mount --bind /proc /sysroot/proc
       mount --bind /sys /sysroot/sys
       mount --bind /dev /sysroot/dev
       chroot /sysroot/
      
      這時就進入了 chroot 的環境,也就是原本的第一個 CentOS 系統中。首先處理 partition 的類型,開放原本第一套 windows 的 partition system id 變成正常:
      # fdisk /dev/vda
      # 將原本的 93 ID 改回 7 ID 喔!
      
      # fdisk -l /dev/vda
      Disk /dev/vda: 145.0 GB, 144955146240 bytes, 283115520 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O 大小 (最小/最佳化):512 位元組 / 512 位元組
      Disk label type: dos
      磁碟識別碼:0x000c07c2
      
      所用裝置 開機      開始         結束      區塊   識別號  系統
      /dev/vda1            2048    10487807     5242880   83  Linux
      /dev/vda2        10487808   220203007   104857600    7  HPFS/NTFS/exFAT
      /dev/vda3       220203008   283115519    31456256    7  HPFS/NTFS/exFAT
      
    3. 接下來請處理開機的選單。我們需要注意的:
      • 要啟用的那個 windows 系統,必須要設定 (1)不隱藏分割 (2)設定為啟動 (boot flag)
      • 不啟用的那個 windows 系統,必須要設定 (1)隱藏分割 (2)設定為不啟動
      通常,我們設定 40_cuttom 這個項目即可!其他的保留預設值:
      # vim /etc/grub.d/40_custom
      #!/bin/sh
      exec tail -n +3 $0
      # This file provides an easy way to add custom menu entries.  Simply type the
      # menu entries you want to add after this comment.  Be careful not to change
      # the 'exec tail' line above.
      menuentry "Windows 10 - Class" {
              insmod chain
              insmod ntfs
              parttool hd0,msdos2 hidden- boot+
              parttool hd0,msdos3 hidden+ boot-
              set root='hd0,msdos2'
              chainloader +1
      }
      menuentry "Windows 10 - Exam" {
              insmod chain
              insmod ntfs
              parttool hd0,msdos2 hidden+ boot-
              parttool hd0,msdos3 hidden- boot+
              set root='hd0,msdos3'
              chainloader +1
      }
      
      
      # 另外,也增加開機選單的停留時間,原本只有 5 秒,我們改到 30 秒,方便我們的連線處理延遲 # vim /etc/default/grub GRUB_TIMEOUT=30 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rhgb quiet" GRUB_DISABLE_RECOVERY="true"
      之後,就可以重建 grub 選單,並且重新安裝 grub 到你的 MBR 囉:
      # grub2-mkconfig -o /boot/grub2/grub.cfg
      # grub2-install /dev/vda
      # poweroff
      
    4. 將光碟移除,並且將網路開機功能暫時取消,純粹用硬碟開機,就會出現各項選單囉!接下來就是一個一個的系統去測試開機! 三個系統都可以各自開機成功!那就是 OK 啦!正常的情況下,重新開機後,應該就會出現如下的選單才對:
  5. 使用 grub4dos 製作線上選單系統:
    1. 你應該會發現到一件事情,那就是,我們的 grub 選單可以在 Linux 管理系統上面進行處理,所以基本上, 只要用本機磁碟開機,那麼就可以進入 30 秒的選單挑選模式。問題是,我們得要移除網路的 iPXE 選單耶! 如果使用 iPXE 選單的話,那就得要進入兩層選單:
      • 一個是 iPXE 的選單,可以選擇進入 rootfs 或選擇利用虛擬磁碟開機
      • 要先選擇虛擬磁碟開機後,才能夠挑選不同的 windows 開機。
      喔!實在很麻煩!那麼,能不能直接透過 iPXE 進行個別的作業系統登入呢?基本上,單純的 iPXE 辦不到! 不過,有個名為 grub4dos 的軟體,可以在 iPXE 的環境下,模擬 grub 的設定值喔!這樣就能夠達成線上選單的製作了!
    2. iPXE 搭配 grub4dos 的相關參考資料,可以參考底下的連結:
      http://ipxe.org/appnote/boot_local_drive_with_grub4dos
      http://grub4dos.chenall.net/
      我們主要從官網下載 (2019/05) 最新的版本,為: grub4dos-0.4.6a-2019-05-12.7z。
    3. 因為下載的預編譯版本使用 .7z 作為壓縮軟體,因此,我們得要安裝好 7z 的壓縮軟體才行。
      # 1. 先安裝好 p7zip 這個支援的壓縮軟體:
      # yum --enablerepo=epel install p7zip
      
      # 開始下載 grub4dos
      # mkdir /vmdisk/rootfs/grub4dos
      # cd /vmdisk/rootfs/grub4dos
      # wget http://dl.grub4dos.chenall.net/grub4dos-0.4.6a-2019-05-12.7z
      
      
      # 2. 開始在 /var/www/html/ipxe 底下進行解壓縮: # mkdir /var/www/html/ipxe/grub # cd /var/www/html/ipxe/grub # 7za e /vmdisk/rootfs/grub4dos/grub4dos-0.4.6a-2019-05-12.7z
    4. 開始設定:要注意的是, grub4dos 使用的是 grub version 0.x 版,與目前的 version 2.0 是不一樣的! 同時,磁碟代號完全不一樣!兩者的差異是這樣的:
      • Linux / Grub4dos / Grub2
      • (/dev/vda) / (hd0) / (hd0)
      • (/dev/vda1) / (hd0,0) / (hd0,1)
      • (/dev/vda2) / (hd0,1) / (hd0,2)
      現在,就讓我們來做個簡單的設定吧!
      # 1. 處理一下 /var/www/html/ipxe/menu.php
      # vim /var/www/html/ipxe/menu.php
      ...
      :start
      menu iPXE ${version} Boot Menu (ip ${net0/ip}, mac ${net0/mac})
      item --gap -- ------------------------- Select your OS----------------------------------
      item diskless             Go To diskless
      item local                Go To Local HD booting
      item win10class           Go To Windows 10 Class
      item win10exam            Go To Windows 10 Exam
      ...
      
      :win10class
      echo Go To Windows 10 class
      set base-url http://${net0/gateway}/ipxe/grub
      chain ${base-url}/grub.exe --config-file=" hide (hd0,2); unhide (hd0,1); rootnoverify (hd0,1); chainloader +1; makeactive" || goto failed
      
      :win10exam
      echo Go To Windows 10 Exam
      set base-url http://${net0/gateway}/ipxe/grub
      chain ${base-url}/grub.exe --config-file=" hide (hd0,1); unhide (hd0,2); rootnoverify (hd0,2); chainloader +1; makeactive" || goto failed
      
      再次的重新開機,就會出現如下的模樣了:

透過這一大串的流程下來,我們的系統就可以擁有多個可以獨立執行的作業系統環境,也不用擔心考試的環境被影響!同時, 也可以直接透過 iPXE 搭配 grub4dos 的選單功能,進行一大堆的設定!相當的輕鬆愉快!如果你還有其他的想法, 甚至可以讓 iPXE 直接接管你的開機選單!

此外,如果這部主機搬移到其他沒有線上 iPXE 的選單處,同樣可以透過自己的 Linux 管理系統進行選單的管理! 有需要進行修改時,也能夠直接進入 Linux 系統去處理!對於熟悉 Linux 的網管人員來說,這樣的系統在管理上是相當方便的!

使用 rootfs 搭配 partclone 進行備份、復原的任務

在虛擬機器上面,我們可以簡單的透過複製磁碟映像檔來進行資料的移動,這種方式非常的快速有效!但是,其實一般的電腦教室, 大部分還是以實體機器處理相關的教學目的為主。因為虛擬機器的 Windows 桌面...確實效能方面有待加強 (這裡指的是圖形界面的顯示效果)

因此,當你在第一部實體機器上面,按照上面的流程建置好所有所需要的 Linux / Windows 上課 / Windows 考試的環境後, 能不能將這些系統,以類似虛擬機器的複製磁碟檔案的方式,完整的複製所需要的各項檔案系統資料呢?其實好像是沒問題的! 我們可以透過所謂的 partclone 來處理喔!

  1. 修改 rootfs 檔案系統,加入 nfs-utils 工具組:
    1. 當初製作 rootfs 的根目錄檔案系統時,忘記將 NFS 的工具組加進去了!為了避免未來每次都得要重新安裝 NFS 工具組, 所以,我們需要將 nfs-utils 這個軟體直接加入在 rootfs 根目錄當中。
    2. 直接前往 /vmdisk/rootfs/filesystem 目錄,然後這樣做即可:
      # 1. 先安裝 nfs-utils 這個軟體吧!
      # yum --installroot /vmdisk/rootfs/filesystem/ install nfs-utils
      # yum --installroot /vmdisk/rootfs/filesystem/ clean all
      
      
      # 2. 開始打包 rootfs 的根目錄系統 # cd /vmdisk/rootfs # sh create.initramfs.sh # ll initramfs.gz* -rw-r--r--. 1 root root 263825132 5月 21 15:51 initramfs.gz-20190521 -rw-r--r--. 1 root root 265351595 5月 28 08:53 initramfs.gz-20190528
      # 3. 開始移動到 /var/www/html/ipxe 底下,並且重新連結到正確的 initramfs 檔案: # cp initramfs.gz-20190528 /var/www/html/ipxe/ # cd /var/www/html/ipxe/ # rm initramfs.gz; ln -s initramfs.gz-20190528 initramfs.gz
      簡單快速的搞定 rootfs 根目錄的重建!
  2. 使用 rootfs 的 partclone 進行備份的行為
    1. 我們想要讓剛剛這個系統的磁碟進行備份的行為!最佳的備份方法,就是完整的備份下來! 這個可以透過國家高速網路中心開發的 partclone 來處理。上個專題我們處理的 rootfs 裡面預先安裝好了 partclone 了! 因此,我們可以將 VM 關機後,改以 rootfs 開機。
    2. 不過,最好將備份的資料放置到 server 統一管理比較好!既然是 Linux base 的系統,我們就以 NFS 開放 /vmdisk/backups/ 目錄分享, 來讓內部虛擬機器可以使用我們的檔案系統吧!
      # 1. 先建立目錄,並且處理設定檔:
      # mkdir /vmdisk/backups
      # vim /etc/exports.d/backup.exports  <==副檔名一定要 .exports 喔
      /vmdisk/backups 127.0.0.0/8(rw,no_root_squash,async,insecure) 192.168.19.0/24(rw,no_root_squash,async,insecure)
      
      
      # 2. 開始啟動 NFS server ,同時自我測試觀察一下: # systemctl start nfs-server # systemctl enable nfs-server # showmount -e localhost Export list for localhost: /vmdisk/backups 192.168.19.0/24,127.0.0.0/8
      # 3. 自我測試掛載看看有沒有問題,同時看一下掛載參數囉! # mount -t nfs 127.0.0.1:/vmdisk/backups /mnt # nfsstat -m Flags: rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1 # umount /mnt
    3. 接下來就是處理用戶端電腦的備份工作!請修改開機選單,讓 dicos 可以在 rootfs 裡面啟動才好:
      # 1. 確認你的 XML 裡面, network 開機是最優先的情況:
      # vim /vmdisk/dicos.xml
        <os>
          <type arch="x86_64">hvm</type>
          <boot dev="network"/>
          <boot dev="cdrom"/>
          <boot dev="hd"/>
        </os>
      
      
      # 2. 啟動虛擬機器,並且觀察確定 IP: # virsh create /vmdisk/dicos.xml # tail -f /var/log/messages # ssh 192.168.19.18
      # 3. 開始在 rootfs 的環境下,開始掛載來自 Server 的 NFS 檔案系統: # showmount -e 192.168.19.254 Export list for 192.168.19.254: /vmdisk/backups 192.168.19.0/24,127.0.0.0/8 # mount -t nfs 192.168.19.254:/vmdisk/backups /mnt # df -Th 檔案系統 類型 容量 已用 可用 已用% 掛載點 tmpfs tmpfs 1.5G 1.1G 465M 70% / devtmpfs devtmpfs 1.4G 0 1.4G 0% /dev tmpfs tmpfs 1.5G 0 1.5G 0% /dev/shm tmpfs tmpfs 1.5G 8.6M 1.5G 1% /run tmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup tmpfs tmpfs 296M 0 296M 0% /run/user/0 192.168.19.254:/vmdisk/backups nfs4 358G 67G 292G 19% /mnt
      # 4. 開始備份 Linux 小系統 # blkid /dev/vda1: UUID="e5a9633d-0730-4485-9424-aa93631ecc32" TYPE="ext4" /dev/vda2: UUID="40668E96668E8C7A" TYPE="ntfs" /dev/vda3: UUID="4CB65C66B65C5316" TYPE="ntfs" # mkdir /mnt/msdos # partclone.ext4 -c -d -s /dev/vda1 -I | gzip -c -1 > /mnt/msdos/dicos.linux.vda1.img.gz Partclone v0.3.11 http://partclone.org 開始備份 裝置 (/dev/vda1) 到 印象檔 (-) Reading Super Block Calculating bitmap... Please wait... 經過:00:00:01, 剩餘: 00:00:00, 完成:100.00% 全部時間:00:00:01, 100.00% completed! done! 檔案系統: EXTFS Device size: 5.4 GB = 1310720 Blocks Space in use: 2.0 GB = 495901 Blocks Free Space: 3.3 GB = 814819 Blocks 裝置區塊大小: 4096 Byte 經過:00:01:04, 剩餘: 00:00:00, 完成:100.00%, 速率: 1.90GB/min current block: 1178113, total block: 1310720, Complete: 100.00% 全部時間:00:01:04, 平均速率: 1.9GB/min, 100.00% completed! Syncing... OK! 備份 裝置 (/dev/vda1) 到 印象檔 (-) 完成 Cloned successfully.
      雖然 xz 的壓縮比更好,而且可以透過 -T 0 來啟用多個 CPU 核心進行壓縮,速度快又好!但是,鳥哥測試過幾次, 發現到 xz 用多執行緒壓縮過後,常常會有無法給後續解壓縮的情況發生!這個問題如何產生鳥哥還搞不太清楚! 另外,通常 gzip 的壓縮、解壓縮的效能比較好,所以,最終我們使用了 gzip 進行簡易壓縮了。
    4. 繼續,讓我們開始備份其他的兩個容量挺大的 windows 系統吧:
      # 1. 開始備份上課用系統
      # partclone.ntfs -c -d -s /dev/vda2 -I | gzip -c -1 > /mnt/msdos/dicos.win10class.vda2.img.gz
      Partclone v0.3.11 http://partclone.org
      開始備份 裝置 (/dev/vda2) 到 印象檔 (-)
      Reading Super Block
      Calculating bitmap... Please wait...
      經過:00:00:01, 剩餘: 00:00:00, 完成:100.00%
      全部時間:00:00:01, 100.00% completed!
      done!
      檔案系統: NTFS
      Device size:  107.4 GB = 26214399 Blocks
      Space in use:  12.0 GB = 2931565 Blocks
      Free Space:    95.4 GB = 23282834 Blocks
      裝置區塊大小: 4096 Byte
      經過:00:04:54, 剩餘: 00:00:00, 完成:100.00%, 速率:  2.45GB/min
      current block:    2986735, total block:   26214399, Complete: 100.00%
      全部時間:00:04:54, 平均速率:   2.5GB/min, 100.00% completed!
      Syncing... OK!
      備份 裝置 (/dev/vda2) 到 印象檔 (-) 完成
      Cloned successfully.
      
      # partclone.ntfs -c -d -s /dev/vda3 -I | gzip -c -1 > /mnt/msdos/dicos.win10exam.vda3.img.gz
      Partclone v0.3.11 http://partclone.org
      開始備份 裝置 (/dev/vda3) 到 印象檔 (-)
      Reading Super Block
      Calculating bitmap... Please wait...
      經過:00:00:01, 剩餘: 00:00:00, 完成:100.00%
      全部時間:00:00:01, 100.00% completed!
      done!
      檔案系統: NTFS
      Device size:   32.2 GB = 7864063 Blocks
      Space in use:  11.3 GB = 2768388 Blocks
      Free Space:    20.9 GB = 5095675 Blocks
      裝置區塊大小: 4096 Byte
      經過:00:04:30, 剩餘: 00:00:00, 完成:100.00%, 速率:  2.52GB/min
      current block:    2832516, total block:    7864063, Complete: 100.00%
      全部時間:00:04:30, 平均速率:   2.5GB/min, 100.00% completed!
      Syncing... OK!
      備份 裝置 (/dev/vda3) 到 印象檔 (-) 完成
      Cloned successfully.
      
      # ll /mnt/msdos/
      -rw-r--r-- 1 root root  792571696  5月 28 14:34 dicos.linux.vda1.img.gz
      -rw-r--r-- 1 root root 5492751240  5月 28 14:43 dicos.win10class.vda2.img.gz
      -rw-r--r-- 1 root root 4855172840  5月 28 14:48 dicos.win10exam.vda3.img.gz
      
      這樣,我們就將整個機器的檔案系備份下來了!
    5. 嘗試備份 partition table 以及 MBR 的資訊,還有額外的分割資訊部份, 我們知道 MBR 以及 partition table 都集中在第一個磁區,也就是前面 512bytes 的磁碟部份,所以,可以透過底下的方式備份 MBR 喔!
      # 1. 先來備份 1st sector 的內容
      # dd if=/dev/zero of=/mnt/msdos/mbr.img bs=512 count=1
      
      # 2. 再來備份 partition tables 的資訊
      # LANG=C sfdisk -l /dev/vda 2> /dev/null
      Disk /dev/vda: 280868 cylinders, 16 heads, 63 sectors/track
      Units: cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
      
         Device Boot Start     End   #cyls    #blocks   Id  System
      /dev/vda1          2+  10404-  10403-   5242880   83  Linux
      /dev/vda2   *  10404+ 218455- 208051- 104857600    7  HPFS/NTFS/exFAT
      /dev/vda3     218455+ 280868-  62414-  31456256   17  Hidden HPFS/NTFS
      
      # LANG=C sfdisk -l /dev/vda > /mnt/msdos/partition.txt 2> /dev/null
      # ll /mnt/msdos/
      -rw-r--r-- 1 root root  792571696  5月 28 14:34 dicos.linux.vda1.img.gz
      -rw-r--r-- 1 root root 5492751240  5月 28 14:43 dicos.win10class.vda2.img.gz
      -rw-r--r-- 1 root root 4855172840  5月 28 14:48 dicos.win10exam.vda3.img.gz
      -rw-r--r-- 1 root root        512  5月 28 15:31 mbr.img
      -rw-r--r-- 1 root root        456  5月 28 15:33 partition.txt
      
      # poweroff
      
      基本上,這樣就備份完畢囉!然後當然就可以關閉這部機器了!
  3. 開始進行裸機還原的動作:
    1. 我們當然知道在虛擬機器的情況下,可以直接透過複製虛擬磁碟機,並且透過複製 XML 檔案,就可以複製磁碟與硬體設定資料了。 但是在實體機器內呢?可不行這樣做的吧!此時,就可以透過類似上述的行為,直接幫我們搞定裸機復原的動作了!接下來, 讓我們一步一步處理一般常見的裸機復原手段吧:
    2. 先建立好所需要的原生磁碟與新機器的 XML 檔案,假設為 dicosnew 好了:
      # 1. 先建立好硬體配置檔:
      # cd /vmdisk
      # vim create_vm_settings.sh
      ....
      vmnames="dicosnew"
      ....
      
      # sh create_vm_settings.sh
      # qemu-img create -f qcow2 dicosnew.img 135G
      
      
      # 2. 修改 XML 檔案,讓網路在第一個開機裝置: # vim dicosnew.xml <os> <type arch="x86_64">hvm</type> <boot dev="network"/> <boot dev="cdrom"/> <boot dev="hd"/> </os>
      # 3. 就直接開機進入 rootfs 吧! # virsh create dicosnew.xml
    3. 開始復原整個系統!時間會花費不少喔:
      # 1. 先登入這個 rootfs 的系統後,觀察一下磁碟的資訊再說:
      # ssh 192.168.19.22
      # lsblk
      NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sr0   11:0    1 1024M  0 rom
      vda  253:0    0  135G  0 disk
      
      # fdisk -l /dev/vda
      Disk /dev/vda: 145.0 GB, 144955146240 bytes, 283115520 sectors
      Units = sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O 大小 (最小/最佳化):512 位元組 / 512 位元組
      # 觀察到了,確實是 135G 左右的磁碟容量!可以來搞定一下:
      
      
      # 2. 開始處理分割表的問題!通常會先放置 MBR,然後用 sfdisk 將分割資訊匯入 # mount -t nfs 192.168.19.254:/vmdisk/backups /mnt # ll /mnt/msdos -rw-r--r-- 1 root root 792571696 5月 28 14:34 dicos.linux.vda1.img.gz -rw-r--r-- 1 root root 5492751240 5月 28 14:43 dicos.win10class.vda2.img.gz -rw-r--r-- 1 root root 4855172840 5月 28 14:48 dicos.win10exam.vda3.img.gz -rw-r--r-- 1 root root 512 5月 28 15:31 mbr.img -rw-r--r-- 1 root root 456 5月 28 15:33 partition.txt # dd if=/mnt/msdos/mbr.img of=/dev/vda bs=512 count=1 # sfdisk /dev/vda < /mnt/msdos/partition.txt # 通常,透過這兩個動作,就可以將 MBR 與 partition table 重建! # 不過,因為虛擬機器的關係,上述的方式,似乎無法重建 MBR 與 partition table 的樣子! # 所以,我們只好手動來處理 partition 了! # fdisk /dev/vda # 請分別建立 5G, 100G, 30G 的磁碟容量出來: # fdisk -l /dev/vda Disk /dev/vda: 145.0 GB, 144955146240 bytes, 283115520 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O 大小 (最小/最佳化):512 位元組 / 512 位元組 Disk label type: dos 磁碟識別碼:0x000b4f27 所用裝置 開機 開始 結束 區塊 識別號 系統 /dev/vda1 2048 10487807 5242880 83 Linux /dev/vda2 10487808 220203007 104857600 7 HPFS/NTFS/exFAT /dev/vda3 220203008 283115519 31456256 7 HPFS/NTFS/exFAT
      # 3. 開始復原 Linux 小系統: # gzip -d -c /mnt/msdos/dicos.linux.vda1.img.gz | partclone.ext4 -I -r -s - -o /dev/vda1 Partclone v0.3.11 http://partclone.org 開始還原 印象檔 (-) 到 裝置 (/dev/vda1) Calculating bitmap... Please wait... done! 檔案系統: EXTFS Device size: 5.4 GB = 1310720 Blocks Space in use: 2.0 GB = 495901 Blocks Free Space: 3.3 GB = 814819 Blocks 裝置區塊大小: 4096 Byte 經過:00:00:30, 剩餘: 00:00:00, 完成:100.00%, 速率: 4.06GB/min current block: 1178113, total block: 1310720, Complete: 100.00% 全部時間:00:00:30, 平均速率: 4.1GB/min, 100.00% completed! Syncing... OK! 還原 印象檔 (-) 到 裝置 (/dev/vda1) 完成 Cloned successfully.
      # 4. 開始復原第一個較大的 windows 上課系統: # gzip -d -c /mnt/msdos/dicos.win10class.vda2.img.gz | partclone.ntfs -I -r -s - -o /dev/vda2 Partclone v0.3.11 http://partclone.org 開始還原 印象檔 (-) 到 裝置 (/dev/vda2) Calculating bitmap... Please wait... done! 檔案系統: NTFS Device size: 107.4 GB = 26214399 Blocks Space in use: 12.0 GB = 2931565 Blocks Free Space: 95.4 GB = 23282834 Blocks 裝置區塊大小: 4096 Byte 經過:00:03:14, 剩餘: 00:00:00, 完成:100.00%, 速率: 3.71GB/min current block: 2986735, total block: 26214399, Complete: 100.00% 全部時間:00:03:14, 平均速率: 3.7GB/min, 100.00% completed! Syncing... OK! 還原 印象檔 (-) 到 裝置 (/dev/vda2) 完成 Cloned successfully.
      # 5. 復原最後一個 windows 考試系統: # gzip -d -c /mnt/msdos/dicos.win10exam.vda3.img.gz | partclone.ntfs -I -r -s - -o /dev/vda3 Partclone v0.3.11 http://partclone.org 開始還原 印象檔 (-) 到 裝置 (/dev/vda3) Calculating bitmap... Please wait... done! 檔案系統: NTFS Device size: 32.2 GB = 7864063 Blocks Space in use: 11.3 GB = 2768388 Blocks Free Space: 20.9 GB = 5095675 Blocks 裝置區塊大小: 4096 Byte 經過:00:03:00, 剩餘: 00:00:00, 完成:100.00%, 速率: 3.78GB/min current block: 2832516, total block: 7864063, Complete: 100.00% 全部時間:00:03:00, 平均速率: 3.8GB/min, 100.00% completed! Syncing... OK! 還原 印象檔 (-) 到 裝置 (/dev/vda3) 完成 Cloned successfully.
      對!你沒看錯!不需要預先格式化!因為 parclone 會根據檔案的內容,自動的幫你處理好檔案系統的問題! 這樣就將全系統復原完畢了!比起當初一個一個安裝系統,不知道快了好幾倍!!
    4. 重建 MBR grub 軟體的安裝:雖然上述的動作可以重建檔案系統,但是最重要的選單還是無法處理的。 所以,我們得要好好的來處理這個問題才行:
      # 1. 先將所需要的 Linux 系統掛載起來:
      mkdir /sysroot
      mount /dev/vda1 /sysroot
      mount --bind /proc /sysroot/proc
      mount --bind /sys /sysroot/sys
      mount --bind /dev /sysroot/dev
      chroot /sysroot/
      
      
      # 2. 開始安裝 grub 囉! # grub2-install /dev/vda Installing for i386-pc platform. Installation finished. No error reported. # exit
  4. 未來,你如果在實體機器上面搞定了一個 demo 的主系統,透過 rootfs 搭配 partclone 等功能,就可以輕鬆愉快的進行裸機備份、 裸機復原的動作!唯一需要注意的,應該就是你的 NFS 效能是否足以負荷大量用戶同時下載復原的頻寬與磁碟 I/O 性能, 還有如果是 Windows 的系統時,也需要注意到是否具有足夠的磁碟容量來提供用戶端的備份資料囉。

參考資料題