使用Clonezilla进行P2V,备份还原完整过程
起因:由于公司的幾臺開發測試服務器從IDC機房搬回辦公室后,電費飆漲,為降低公司成本,倡導綠色節能,遂想將幾臺資源利用率不高的服務器進行虛擬化后關停,因此就有了本文。權當學習記錄,有不當之處,歡迎讀者指出,共同探討。
一、基本環境
源服務器:Ubuntu18.04
目的服務器:CentOS 7.9 、 Libvirt KVM/QEMU
網絡:同一局域網
軟件:Clonezilla-live-2.7.1-22 、rufus 、VNC Viewer
下載鏈接:
Clonezilla: https://clonezilla.org/downloads.php
Rufus: https://rufus.ie/zh/
二、Clonezilla(再生龍)簡介
Clonezilla是類似于TrueImage?或NortonGhost?的分區和磁盤映像/克隆程序。它可以幫助您進行系統部署,裸機備份和恢復。可以使用三種類型的Clonezilla:Clonezilla live,Clonezilla lite服務器和Clonezilla SE(服務器版)。Clonezilla live適用于單機備份和還原。盡管Clonezilla lite服務器或SE用于大規模部署,但它可以同時克隆許多(40多臺!)計算機。Clonezilla僅在硬盤中保存和恢復使用過的塊。這提高了克隆效率。借助42節點群集中的某些高端硬件,創造了最高8 GB / min的速率恢復多臺的記錄。(官網英文Google機翻)
三、操作步驟
1.前期準備:
確認源服務器或主機正確的配置了U盤啟動,并確認U盤可以正常使用,因為我在操作過程中就遇到了同一個U盤有些服務器可以識別,有些不能識別的情況。
準備好顯示器、鍵盤,一般服務器只有VGA接口,確認顯示器配備相應線纜。
準備好存儲備份鏡像的空間,因為服務器數據動輒幾十上百G,備份多臺將消耗很多磁盤空間,因此需做好提前規劃。
2.創建Clonezilla啟動U盤
官方推薦了幾種方式進行啟動U盤的創建,本次采用rufus。
rufus有綠色版本,下載后直接打開運行,先選擇鏡像:
選擇已經下載好的Clonezilla鏡像后,確認U盤中數據已備份后,可點擊開始,此時會提示寫入方式,直接點擊OK,以推薦方式寫入:
提示缺少的文件,點擊是將在rufus文件同目錄下創建一個文件夾并自動下載:
警告提示,點確定:
完成后,關閉rufus即可。
3.開始備份
重啟服務器,并通過U盤啟動,如果服務器使用的是UEFI引導程序,用U盤啟動時記得選擇BIOS,進入Clonezilla啟動頁,默認選擇第一項:
選擇語言,支持簡體中文:
選擇鍵盤布局,默認即可:
進入軟件:
選擇第一項,備份和還原都是這個,后面詳細說明:
選擇文件目錄,這里使用ssh服務,第二項:
配置當前服務器的網絡信息,即IP地址、子網掩碼、網關、DNS服務器等,這里根據自己的網絡環境設置,我這里使用靜態IP:
配置IP地址:
配置子網掩碼:
配置網關:
配置DNS服務器:
配置存儲備份鏡像的服務器IP:
配置備份服務器ssh服務端口:
配置ssh登陸的用戶名:
配置備份存儲的路徑:
提示要確認并輸入服務器密碼:
點擊確定后,輸入yes,并輸入密碼:
如果連接成功,則會提示掛載的備份目錄,可以查看是否正確,回車繼續:
選擇工作模式,這里選擇第二項,專家模式:
根據自己的情況選擇,這里我選擇備份硬盤到鏡像:
輸入鏡像文件名稱,軟件會自動在備份目錄生成一個文件夾:
確定名稱后,選擇需要備份的硬盤,有多個可以選擇多個:
接下來的幾個選項都是跟備份數據的參數有關,如果不熟悉可以使用默認設置。
選擇備份程序的順序:
備份高級參數:
鏡像壓縮格式:
選擇卷大小:
檢查源文件系統:
檢查備份鏡像:
是否加密鏡像:
操作完成后的動作:
按回車繼續:
再次確認,輸入y并回車:
等待備份過程結束:
完成后可以選擇關閉服務器。
至此,一臺服務器備份完成,可以在備份服務器上查看備份文件情況。
4.還原備份鏡像為kvm虛擬機
首先,創建虛擬機磁盤文件,因后續可能需要將虛擬機導入openstack,因此我創建了qcow2格式的磁盤文件,也可根據情況指定其他磁盤文件格式,并指定文件大小:
qemu-img create -f qcow2 /data/test.qcow2 200G建立虛擬機配置文件,默認在/etc/libvirt/qemu/文件夾下,格式為xml。可以從其它虛擬機文件復制來修改,也可以自己寫或者用virt-install命令建立,這里復制一份其它虛擬機文件并做修改:
<!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:virsh edit test or other application using the libvirt API. --><domain type='kvm'><name>test</name> #虛擬機的名稱 <uuid>e5b3ab33-9317-4b8e-a5bc-7b0150409166</uuid> #虛擬機的UUID,此值是唯一的,可以用uuidgen命令生成<memory unit='KiB'>8388608</memory> #虛擬機最大內存限制,單位是KB<currentMemory unit='KiB'>8388608</currentMemory> #虛擬機當前內存大小,單位是KB<vcpu placement='static'>4</vcpu> #虛擬機虛擬cpu個數<os><type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type> #arch參數表示宿主機cpu架構,machine表示宿主機系統,如:pc-i440fx-rhel7.6.0表示centos7.6版本,pc-i440fx-bionic表示ubuntu18.04版本<boot dev='cdrom'/> #啟動設備為光驅,如果是硬盤,則將cdrom改為hd<bootmenu enable='yes'/> #是否顯示啟動菜單,只有通過vnc工具才能看到,kvm的console是無法看到的</os><features><acpi/><apic/></features><cpu mode='custom' match='exact' check='partial'><model fallback='allow'>IvyBridge-IBRS</model></cpu><clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash><pm><suspend-to-mem enabled='no'/><suspend-to-disk enabled='no'/></pm><devices><emulator>/usr/libexec/qemu-kvm</emulator> #虛擬機程序路徑,這是centos的,ubuntu的則為/usr/bin/kvm-spice<disk type='file' device='disk'> #這里可以設置虛擬機磁盤是來自文件還是物理塊設備<driver name='qemu' type='qcow2'/> #指定虛擬磁盤文件格式<source file='/data/test.qcow2'/> #指定虛擬磁盤文件路徑<target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/></disk><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/sata/iso/clonezilla-live-2.7.1-22-amd64.iso'/> #指定光盤鏡像文件路徑<target dev='hda' bus='ide'/><readonly/><address type='drive' controller='0' bus='0' target='0' unit='0'/></disk><controller type='usb' index='0' model='ich9-ehci1'><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/></controller><controller type='usb' index='0' model='ich9-uhci1'><master startport='0'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/></controller><controller type='usb' index='0' model='ich9-uhci2'><master startport='2'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/></controller><controller type='usb' index='0' model='ich9-uhci3'><master startport='4'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/></controller><controller type='pci' index='0' model='pci-root'/><controller type='ide' index='0'><address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/></controller><interface type='bridge'> #指定網卡工作模式,這里是橋接模式<mac address='52:54:00:f2:8c:3a'/> #這里要注意,如果是手動復制的配置文件,則需要自己修改mac地址,否則會出現地址沖突 <source bridge='br0'/> #指定橋接到哪個虛擬網橋上,即虛擬網橋的名稱<model type='virtio'/> #指定虛擬網卡模擬硬件型號<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><serial type='pty'><target type='isa-serial' port='0'><model name='isa-serial'/></target></serial><console type='pty'><target type='serial' port='0'/></console><input type='tablet' bus='usb'><address type='usb' bus='0' port='1'/></input><input type='mouse' bus='ps2'/><input type='keyboard' bus='ps2'/><graphics type='vnc' port='5911' autoport='no' listen='0.0.0.0'> #配置vnc監聽和端口<listen type='address' address='0.0.0.0'/></graphics><video><model type='cirrus' vram='16384' heads='1' primary='yes'/><address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/></video><memballoon model='virtio'><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/></memballoon></devices> </domain>以上是主要的虛擬機配置文件說明,更多詳細內容,可自行查詢,本文最后會列舉一些遇到的問題及解決方法。
定義虛擬機,并啟動:
sudo virsh define /etc/libvirt/qemu/test.xml virsh start test啟動后與備份時選擇的菜單,前幾步一致,先是進入主頁,默認第一項:
選擇語言:
選擇鍵盤:
進入主菜單:
選擇第一項:
鏡像來源選擇ssh server:
還是配置靜態IP,中間的子網掩碼、網關和DNS配置略過,請自行配置:
輸入鏡像源服務器的IP:
輸入源服務器ssh端口:
輸入ssh賬號:
輸入鏡像源目錄:
按確定后,輸入ssh密碼:
選擇專家模式:
選擇從鏡像還原至本地硬盤:
選擇要還原的鏡像文件:
選擇本地磁盤,注意本地磁盤容量要大于等于鏡像文件的容量,否則無法進行還原:
選擇磁盤參數,可以使用默認值:
等待完成后,選擇關機,因為還需要修改kvm的配置文件。
5.掛載虛擬機磁盤
掛載虛擬機磁盤有幾種方式:
方法一:采用系統的nbd模塊,如果系統沒有安裝,還需要安裝,這里就不展開了,有興趣的可以自己去查找。
加載nbd模塊:
modprobe nbd連接磁盤:
qemu-nbd --connect=/dev/nbd0 /data/test.qcow2掛載磁盤,如果有多個分區,則分別掛載:
mount /dev/nbd0p1 tmp1方法二:安裝 libguestfs-tools,它提供了一系列工具來訪問和編輯 VM 磁盤鏡像。
安裝 libguestfs-tools:
yum install libguestfs-tools掛載磁盤:
guestmount -a /data/test.qcow2 -m <device> tmp"-m " 用于指定磁盤鏡像內,你想要掛載的分區(比如,/dev/sda1)。如果你不確定磁盤鏡像內有什么分區,你可以任意提供一個無效的設備名。guestmount工具將為你展示所有你可以選擇的設備名字。如:
$ sudo guestmount -a sdcard.img.qcow2 -m /dev/sdaqw qcow2_mount_point libguestfs: error: mount_options: mount_options_stub: /dev/sdaqw: No such file or directory guestmount: '/dev/sdaqw' could not be mounted. guestmount: Did you mean to mount one of these filesystems? guestmount: /dev/sda (vfat)掛載后根據需要修改fstab文件、網卡信息,有需要的話可以配置kvm的console登陸,這個需要修改內核啟動參數,在/boot/grub/grub.cfg中找到啟動內核文件,通常以boot/vmlinuz開頭的行,后面空格后添加console=ttyS0 115200,如果同一版本有多個啟動項,則每行都要添加。
修改好以上文件后,取消掛載:
gusetunmount tmp6.修改虛擬機配置文件
virsh edit test這里僅就需要修改的地方列出,如果要使用UEFI啟動請參考本文第四部分問題二:
......<os><type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type> #arch參數表示宿主機cpu架構,machine表示宿主機系統,如:pc-i440fx-rhel7.6.0表示centos7.6版本,pc-i440fx-bionic表示ubuntu18.04版本<boot dev='hd'/> #取消光盤啟動,改為硬盤啟動<bootmenu enable='yes'/> #是否顯示啟動菜單,只有通過vnc工具才能看到,kvm的console是無法看到的</os>......<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/sata/iso/clonezilla-live-2.7.1-22-amd64.iso'/> #刪除此行<target dev='hda' bus='ide'/><readonly/><address type='drive' controller='0' bus='0' target='0' unit='0'/></disk>......<graphics type='spice' autoport='yes'> #如果不保留vnc訪問,這里可以這樣修改<listen type='address'/></graphics>......完成后保存退出,啟動虛擬機即可。
四、問題及解決方案
這里總結了一些KVM使用上遇到的問題和解決方案,有些問題可能比較小白,請各位讀者不要見笑。
問題一:源服務器很多服務安裝在系統盤,而系統盤容量有限,容量已滿,轉換為虛擬機后,可以方便進行磁盤擴容。
首先,創建虛擬磁盤時要設計好容量,啟動虛擬機后,查看分區情況:
sudo fdisk /dev/sda刪除容量要滿的分區,輸入d,回車,這里要記住/dev/sda2的起始位置,如上圖中即為1050624。
然后默認會刪除/dev/sda2,輸入n回車,這里刪除后不要保存,切記!切記!切記!創建新分區,注意起始位置要一致,然后輸入你想要分配的空間大小,提示是否移除磁盤分區信息時,選擇n:
然后輸入w,保存退出。
然后根據你的文件系統類型,選擇合適的命令,進行在線擴容:
ext4的使用:
sudo resize2fs /dev/sda2xfs使用:
sudo xfs_growfs /dev/sda2完成后df -h查看擴容后分區情況:
問題二:讓kvm支持UEFI啟動方式
默認kvm使用的是BIOS啟動方式,如果要支持UEFI啟動,則需要安裝額外的包,并修改虛擬機的配置文件。
首先安裝相應的軟件包:
Ubuntu系統
sudo apt install ovmfCentos系統
wget http://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo yum install edk2.git-ovmf-x64 -y修改kvm的配置文件:
Ubuntu系統
......<os> ......<loader type='rom'>/usr/share/ovmf/OVMF.fd</loader> ......</os> ......Centos系統
......<os>......<loader readonly='yes' secure='no' type='pflash'>/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd</loader><nvram>/usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd</nvram>......</os> ......問題三:為qcow2格式的磁盤文件進行分區
由于之前沒有注意源服務器是UEFI啟動,導致鏡像還原到kvm后無法啟動,當時以為是磁盤分區的問題,所以就需要提前將虛擬磁盤進行分區,查詢資料后,發現可以使用nbd模塊實現。
創建一個磁盤鏡像文件:
qemu-img create -f qcow2 test.qcow2 2G加載nbd模塊:
modprobe nbd max_part=12連接磁盤鏡像文件:
qemu-nbd --connect=/dev/nbd0 test.qcow2進行分區操作:
fdisk /dev/nbd0格式化:
mkfs.ext4 -F -L "rootfs" /dev/nbd0p0掛載和取消掛載:
mount -t ext4 /dev/nbd0p0 tmp1 umount tmp1操作完成后,記得斷開連接:
qemu-nbd --disconnect /dev/nbd0這種方式可以將鏡像磁盤文件當成本地磁盤一樣進行操作,而 libguestfs-tools這個工具只能相當于操作本地磁盤上的文件,區別顯而易見。
問題四:kvm網絡從NAT切換至Bridge模式導致無法上網
這個與本文關聯性不大,僅當學習筆記記錄下來。
現象描述:
之前在ubuntu服務器上安裝了libvirt,并安裝了幾臺虛擬機做測試用,當時由于沒有外網訪問的需求,因此把虛擬機設置成了NAT模式,虛擬機上網正常。后來由于測試環境需要將虛擬機暴露給本地網絡,因此調整了虛擬機網絡配置,改成了Bridge模式,并配置了宿主機的橋接網卡。接著問題來了,虛擬機可以ping通宿主機ip,卻不能ping通本地網絡網關,也不能上網,開始以為是網卡驅動或是mac地址沖突等問題,但都一一排除。仔細想了一下,能ping通宿主機ip,但不能到本地網絡網關,可能是宿主機未轉發包出去。
解決方案:
開始以為只是包轉發問題,于是根據查找資料,在/etc/sysctl.conf中添加:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0并使用sudo sysctl -p 生效。
上面幾條代碼的意思是不讓iptables過濾橋接網卡的包。
但是后面查看幾臺運行centos系統的宿主機上面并沒有將這幾條設置為0,當時也沒想清楚為什么。
就在寫到這里的時候,突然想起了防火墻設置,于是去查看發現,centos宿主機沒開防火墻,所以iptables規則設置成什么都不會生效,而ubuntu系統開啟了防火墻,所以要設置為0,取消包過濾才行!
根據以上推測,關閉了ubuntu的防火墻,并查看了規則列表,發現里面設置了僅允許NAT模式網卡通信,因此確定最終原因是因為防火墻規則。
五、總結
Clonezilla備份還原過程操作不算復雜,只是有些細節要因環境而異,在實際操作中要做好準備,確保鏡像能夠正常還原并啟動。另外有興趣的同學可以嘗試使用pxe啟動的方式進行備份還原,操作過程基本一致,這里就不再贅述了。
總結
以上是生活随笔為你收集整理的使用Clonezilla进行P2V,备份还原完整过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的营销思维
- 下一篇: ovftool工具的使用,保姆级教程。