使用Clonezilla进行P2V,备份还原完整过程
起因:由于公司的幾臺(tái)開發(fā)測(cè)試服務(wù)器從IDC機(jī)房搬回辦公室后,電費(fèi)飆漲,為降低公司成本,倡導(dǎo)綠色節(jié)能,遂想將幾臺(tái)資源利用率不高的服務(wù)器進(jìn)行虛擬化后關(guān)停,因此就有了本文。權(quán)當(dāng)學(xué)習(xí)記錄,有不當(dāng)之處,歡迎讀者指出,共同探討。
一、基本環(huán)境
源服務(wù)器:Ubuntu18.04
目的服務(wù)器:CentOS 7.9 、 Libvirt KVM/QEMU
網(wǎng)絡(luò):同一局域網(wǎng)
軟件:Clonezilla-live-2.7.1-22 、rufus 、VNC Viewer
下載鏈接:
Clonezilla: https://clonezilla.org/downloads.php
Rufus: https://rufus.ie/zh/
二、Clonezilla(再生龍)簡(jiǎn)介
Clonezilla是類似于TrueImage?或NortonGhost?的分區(qū)和磁盤映像/克隆程序。它可以幫助您進(jìn)行系統(tǒng)部署,裸機(jī)備份和恢復(fù)。可以使用三種類型的Clonezilla:Clonezilla live,Clonezilla lite服務(wù)器和Clonezilla SE(服務(wù)器版)。Clonezilla live適用于單機(jī)備份和還原。盡管Clonezilla lite服務(wù)器或SE用于大規(guī)模部署,但它可以同時(shí)克隆許多(40多臺(tái)!)計(jì)算機(jī)。Clonezilla僅在硬盤中保存和恢復(fù)使用過的塊。這提高了克隆效率。借助42節(jié)點(diǎn)群集中的某些高端硬件,創(chuàng)造了最高8 GB / min的速率恢復(fù)多臺(tái)的記錄。(官網(wǎng)英文Google機(jī)翻)
三、操作步驟
1.前期準(zhǔn)備:
確認(rèn)源服務(wù)器或主機(jī)正確的配置了U盤啟動(dòng),并確認(rèn)U盤可以正常使用,因?yàn)槲以诓僮鬟^程中就遇到了同一個(gè)U盤有些服務(wù)器可以識(shí)別,有些不能識(shí)別的情況。
準(zhǔn)備好顯示器、鍵盤,一般服務(wù)器只有VGA接口,確認(rèn)顯示器配備相應(yīng)線纜。
準(zhǔn)備好存儲(chǔ)備份鏡像的空間,因?yàn)榉?wù)器數(shù)據(jù)動(dòng)輒幾十上百G,備份多臺(tái)將消耗很多磁盤空間,因此需做好提前規(guī)劃。
2.創(chuàng)建Clonezilla啟動(dòng)U盤
官方推薦了幾種方式進(jìn)行啟動(dòng)U盤的創(chuàng)建,本次采用rufus。
rufus有綠色版本,下載后直接打開運(yùn)行,先選擇鏡像:
選擇已經(jīng)下載好的Clonezilla鏡像后,確認(rèn)U盤中數(shù)據(jù)已備份后,可點(diǎn)擊開始,此時(shí)會(huì)提示寫入方式,直接點(diǎn)擊OK,以推薦方式寫入:
提示缺少的文件,點(diǎn)擊是將在rufus文件同目錄下創(chuàng)建一個(gè)文件夾并自動(dòng)下載:
警告提示,點(diǎn)確定:
完成后,關(guān)閉rufus即可。
3.開始備份
重啟服務(wù)器,并通過U盤啟動(dòng),如果服務(wù)器使用的是UEFI引導(dǎo)程序,用U盤啟動(dòng)時(shí)記得選擇BIOS,進(jìn)入Clonezilla啟動(dòng)頁(yè),默認(rèn)選擇第一項(xiàng):
選擇語言,支持簡(jiǎn)體中文:
選擇鍵盤布局,默認(rèn)即可:
進(jìn)入軟件:
選擇第一項(xiàng),備份和還原都是這個(gè),后面詳細(xì)說明:
選擇文件目錄,這里使用ssh服務(wù),第二項(xiàng):
配置當(dāng)前服務(wù)器的網(wǎng)絡(luò)信息,即IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、DNS服務(wù)器等,這里根據(jù)自己的網(wǎng)絡(luò)環(huán)境設(shè)置,我這里使用靜態(tài)IP:
配置IP地址:
配置子網(wǎng)掩碼:
配置網(wǎng)關(guān):
配置DNS服務(wù)器:
配置存儲(chǔ)備份鏡像的服務(wù)器IP:
配置備份服務(wù)器ssh服務(wù)端口:
配置ssh登陸的用戶名:
配置備份存儲(chǔ)的路徑:
提示要確認(rèn)并輸入服務(wù)器密碼:
點(diǎn)擊確定后,輸入yes,并輸入密碼:
如果連接成功,則會(huì)提示掛載的備份目錄,可以查看是否正確,回車?yán)^續(xù):
選擇工作模式,這里選擇第二項(xiàng),專家模式:
根據(jù)自己的情況選擇,這里我選擇備份硬盤到鏡像:
輸入鏡像文件名稱,軟件會(huì)自動(dòng)在備份目錄生成一個(gè)文件夾:
確定名稱后,選擇需要備份的硬盤,有多個(gè)可以選擇多個(gè):
接下來的幾個(gè)選項(xiàng)都是跟備份數(shù)據(jù)的參數(shù)有關(guān),如果不熟悉可以使用默認(rèn)設(shè)置。
選擇備份程序的順序:
備份高級(jí)參數(shù):
鏡像壓縮格式:
選擇卷大小:
檢查源文件系統(tǒng):
檢查備份鏡像:
是否加密鏡像:
操作完成后的動(dòng)作:
按回車?yán)^續(xù):
再次確認(rèn),輸入y并回車:
等待備份過程結(jié)束:
完成后可以選擇關(guān)閉服務(wù)器。
至此,一臺(tái)服務(wù)器備份完成,可以在備份服務(wù)器上查看備份文件情況。
4.還原備份鏡像為kvm虛擬機(jī)
首先,創(chuàng)建虛擬機(jī)磁盤文件,因后續(xù)可能需要將虛擬機(jī)導(dǎo)入openstack,因此我創(chuàng)建了qcow2格式的磁盤文件,也可根據(jù)情況指定其他磁盤文件格式,并指定文件大小:
qemu-img create -f qcow2 /data/test.qcow2 200G建立虛擬機(jī)配置文件,默認(rèn)在/etc/libvirt/qemu/文件夾下,格式為xml。可以從其它虛擬機(jī)文件復(fù)制來修改,也可以自己寫或者用virt-install命令建立,這里復(fù)制一份其它虛擬機(jī)文件并做修改:
<!-- 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> #虛擬機(jī)的名稱 <uuid>e5b3ab33-9317-4b8e-a5bc-7b0150409166</uuid> #虛擬機(jī)的UUID,此值是唯一的,可以用uuidgen命令生成<memory unit='KiB'>8388608</memory> #虛擬機(jī)最大內(nèi)存限制,單位是KB<currentMemory unit='KiB'>8388608</currentMemory> #虛擬機(jī)當(dāng)前內(nèi)存大小,單位是KB<vcpu placement='static'>4</vcpu> #虛擬機(jī)虛擬cpu個(gè)數(shù)<os><type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type> #arch參數(shù)表示宿主機(jī)cpu架構(gòu),machine表示宿主機(jī)系統(tǒng),如:pc-i440fx-rhel7.6.0表示centos7.6版本,pc-i440fx-bionic表示ubuntu18.04版本<boot dev='cdrom'/> #啟動(dòng)設(shè)備為光驅(qū),如果是硬盤,則將cdrom改為hd<bootmenu enable='yes'/> #是否顯示啟動(dòng)菜單,只有通過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> #虛擬機(jī)程序路徑,這是centos的,ubuntu的則為/usr/bin/kvm-spice<disk type='file' device='disk'> #這里可以設(shè)置虛擬機(jī)磁盤是來自文件還是物理塊設(shè)備<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'> #指定網(wǎng)卡工作模式,這里是橋接模式<mac address='52:54:00:f2:8c:3a'/> #這里要注意,如果是手動(dòng)復(fù)制的配置文件,則需要自己修改mac地址,否則會(huì)出現(xiàn)地址沖突 <source bridge='br0'/> #指定橋接到哪個(gè)虛擬網(wǎng)橋上,即虛擬網(wǎng)橋的名稱<model type='virtio'/> #指定虛擬網(wǎng)卡模擬硬件型號(hào)<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監(jiān)聽和端口<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>以上是主要的虛擬機(jī)配置文件說明,更多詳細(xì)內(nèi)容,可自行查詢,本文最后會(huì)列舉一些遇到的問題及解決方法。
定義虛擬機(jī),并啟動(dòng):
sudo virsh define /etc/libvirt/qemu/test.xml virsh start test啟動(dòng)后與備份時(shí)選擇的菜單,前幾步一致,先是進(jìn)入主頁(yè),默認(rèn)第一項(xiàng):
選擇語言:
選擇鍵盤:
進(jìn)入主菜單:
選擇第一項(xiàng):
鏡像來源選擇ssh server:
還是配置靜態(tài)IP,中間的子網(wǎng)掩碼、網(wǎng)關(guān)和DNS配置略過,請(qǐng)自行配置:
輸入鏡像源服務(wù)器的IP:
輸入源服務(wù)器ssh端口:
輸入ssh賬號(hào):
輸入鏡像源目錄:
按確定后,輸入ssh密碼:
選擇專家模式:
選擇從鏡像還原至本地硬盤:
選擇要還原的鏡像文件:
選擇本地磁盤,注意本地磁盤容量要大于等于鏡像文件的容量,否則無法進(jìn)行還原:
選擇磁盤參數(shù),可以使用默認(rèn)值:
等待完成后,選擇關(guān)機(jī),因?yàn)檫€需要修改kvm的配置文件。
5.掛載虛擬機(jī)磁盤
掛載虛擬機(jī)磁盤有幾種方式:
方法一:采用系統(tǒng)的nbd模塊,如果系統(tǒng)沒有安裝,還需要安裝,這里就不展開了,有興趣的可以自己去查找。
加載nbd模塊:
modprobe nbd連接磁盤:
qemu-nbd --connect=/dev/nbd0 /data/test.qcow2掛載磁盤,如果有多個(gè)分區(qū),則分別掛載:
mount /dev/nbd0p1 tmp1方法二:安裝 libguestfs-tools,它提供了一系列工具來訪問和編輯 VM 磁盤鏡像。
安裝 libguestfs-tools:
yum install libguestfs-tools掛載磁盤:
guestmount -a /data/test.qcow2 -m <device> tmp"-m " 用于指定磁盤鏡像內(nèi),你想要掛載的分區(qū)(比如,/dev/sda1)。如果你不確定磁盤鏡像內(nèi)有什么分區(qū),你可以任意提供一個(gè)無效的設(shè)備名。guestmount工具將為你展示所有你可以選擇的設(shè)備名字。如:
$ 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)掛載后根據(jù)需要修改fstab文件、網(wǎng)卡信息,有需要的話可以配置kvm的console登陸,這個(gè)需要修改內(nèi)核啟動(dòng)參數(shù),在/boot/grub/grub.cfg中找到啟動(dòng)內(nèi)核文件,通常以boot/vmlinuz開頭的行,后面空格后添加console=ttyS0 115200,如果同一版本有多個(gè)啟動(dòng)項(xiàng),則每行都要添加。
修改好以上文件后,取消掛載:
gusetunmount tmp6.修改虛擬機(jī)配置文件
virsh edit test這里僅就需要修改的地方列出,如果要使用UEFI啟動(dòng)請(qǐng)參考本文第四部分問題二:
......<os><type arch='x86_64' machine='pc-i440fx-rhel7.6.0'>hvm</type> #arch參數(shù)表示宿主機(jī)cpu架構(gòu),machine表示宿主機(jī)系統(tǒng),如:pc-i440fx-rhel7.6.0表示centos7.6版本,pc-i440fx-bionic表示ubuntu18.04版本<boot dev='hd'/> #取消光盤啟動(dòng),改為硬盤啟動(dòng)<bootmenu enable='yes'/> #是否顯示啟動(dòng)菜單,只有通過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>......完成后保存退出,啟動(dòng)虛擬機(jī)即可。
四、問題及解決方案
這里總結(jié)了一些KVM使用上遇到的問題和解決方案,有些問題可能比較小白,請(qǐng)各位讀者不要見笑。
問題一:源服務(wù)器很多服務(wù)安裝在系統(tǒng)盤,而系統(tǒng)盤容量有限,容量已滿,轉(zhuǎn)換為虛擬機(jī)后,可以方便進(jìn)行磁盤擴(kuò)容。
首先,創(chuàng)建虛擬磁盤時(shí)要設(shè)計(jì)好容量,啟動(dòng)虛擬機(jī)后,查看分區(qū)情況:
sudo fdisk /dev/sda刪除容量要滿的分區(qū),輸入d,回車,這里要記住/dev/sda2的起始位置,如上圖中即為1050624。
然后默認(rèn)會(huì)刪除/dev/sda2,輸入n回車,這里刪除后不要保存,切記!切記!切記!創(chuàng)建新分區(qū),注意起始位置要一致,然后輸入你想要分配的空間大小,提示是否移除磁盤分區(qū)信息時(shí),選擇n:
然后輸入w,保存退出。
然后根據(jù)你的文件系統(tǒng)類型,選擇合適的命令,進(jìn)行在線擴(kuò)容:
ext4的使用:
sudo resize2fs /dev/sda2xfs使用:
sudo xfs_growfs /dev/sda2完成后df -h查看擴(kuò)容后分區(qū)情況:
問題二:讓kvm支持UEFI啟動(dòng)方式
默認(rèn)kvm使用的是BIOS啟動(dòng)方式,如果要支持UEFI啟動(dòng),則需要安裝額外的包,并修改虛擬機(jī)的配置文件。
首先安裝相應(yīng)的軟件包:
Ubuntu系統(tǒng)
sudo apt install ovmfCentos系統(tǒng)
wget http://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo yum install edk2.git-ovmf-x64 -y修改kvm的配置文件:
Ubuntu系統(tǒng)
......<os> ......<loader type='rom'>/usr/share/ovmf/OVMF.fd</loader> ......</os> ......Centos系統(tǒng)
......<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格式的磁盤文件進(jìn)行分區(qū)
由于之前沒有注意源服務(wù)器是UEFI啟動(dòng),導(dǎo)致鏡像還原到kvm后無法啟動(dòng),當(dāng)時(shí)以為是磁盤分區(qū)的問題,所以就需要提前將虛擬磁盤進(jìn)行分區(qū),查詢資料后,發(fā)現(xiàn)可以使用nbd模塊實(shí)現(xiàn)。
創(chuàng)建一個(gè)磁盤鏡像文件:
qemu-img create -f qcow2 test.qcow2 2G加載nbd模塊:
modprobe nbd max_part=12連接磁盤鏡像文件:
qemu-nbd --connect=/dev/nbd0 test.qcow2進(jìn)行分區(qū)操作:
fdisk /dev/nbd0格式化:
mkfs.ext4 -F -L "rootfs" /dev/nbd0p0掛載和取消掛載:
mount -t ext4 /dev/nbd0p0 tmp1 umount tmp1操作完成后,記得斷開連接:
qemu-nbd --disconnect /dev/nbd0這種方式可以將鏡像磁盤文件當(dāng)成本地磁盤一樣進(jìn)行操作,而 libguestfs-tools這個(gè)工具只能相當(dāng)于操作本地磁盤上的文件,區(qū)別顯而易見。
問題四:kvm網(wǎng)絡(luò)從NAT切換至Bridge模式導(dǎo)致無法上網(wǎng)
這個(gè)與本文關(guān)聯(lián)性不大,僅當(dāng)學(xué)習(xí)筆記記錄下來。
現(xiàn)象描述:
之前在ubuntu服務(wù)器上安裝了libvirt,并安裝了幾臺(tái)虛擬機(jī)做測(cè)試用,當(dāng)時(shí)由于沒有外網(wǎng)訪問的需求,因此把虛擬機(jī)設(shè)置成了NAT模式,虛擬機(jī)上網(wǎng)正常。后來由于測(cè)試環(huán)境需要將虛擬機(jī)暴露給本地網(wǎng)絡(luò),因此調(diào)整了虛擬機(jī)網(wǎng)絡(luò)配置,改成了Bridge模式,并配置了宿主機(jī)的橋接網(wǎng)卡。接著問題來了,虛擬機(jī)可以ping通宿主機(jī)ip,卻不能ping通本地網(wǎng)絡(luò)網(wǎng)關(guān),也不能上網(wǎng),開始以為是網(wǎng)卡驅(qū)動(dòng)或是mac地址沖突等問題,但都一一排除。仔細(xì)想了一下,能ping通宿主機(jī)ip,但不能到本地網(wǎng)絡(luò)網(wǎng)關(guān),可能是宿主機(jī)未轉(zhuǎn)發(fā)包出去。
解決方案:
開始以為只是包轉(zhuǎn)發(fā)問題,于是根據(jù)查找資料,在/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過濾橋接網(wǎng)卡的包。
但是后面查看幾臺(tái)運(yùn)行centos系統(tǒng)的宿主機(jī)上面并沒有將這幾條設(shè)置為0,當(dāng)時(shí)也沒想清楚為什么。
就在寫到這里的時(shí)候,突然想起了防火墻設(shè)置,于是去查看發(fā)現(xiàn),centos宿主機(jī)沒開防火墻,所以iptables規(guī)則設(shè)置成什么都不會(huì)生效,而ubuntu系統(tǒng)開啟了防火墻,所以要設(shè)置為0,取消包過濾才行!
根據(jù)以上推測(cè),關(guān)閉了ubuntu的防火墻,并查看了規(guī)則列表,發(fā)現(xiàn)里面設(shè)置了僅允許NAT模式網(wǎng)卡通信,因此確定最終原因是因?yàn)榉阑饓σ?guī)則。
五、總結(jié)
Clonezilla備份還原過程操作不算復(fù)雜,只是有些細(xì)節(jié)要因環(huán)境而異,在實(shí)際操作中要做好準(zhǔn)備,確保鏡像能夠正常還原并啟動(dòng)。另外有興趣的同學(xué)可以嘗試使用pxe啟動(dòng)的方式進(jìn)行備份還原,操作過程基本一致,這里就不再贅述了。
總結(jié)
以上是生活随笔為你收集整理的使用Clonezilla进行P2V,备份还原完整过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员的营销思维
- 下一篇: ovftool工具的使用,保姆级教程。