Linux的桌面虛擬化技術KVM(一)——新建KVM虛擬機
Linux的桌面虛擬化技術KVM(二)——遠程桌面管理
(1).KVM虛擬機克隆
KVM虛擬克隆命令virt-clone [選項]
常用選項:
-o [原虛擬機],--original [原虛擬機] 原虛擬機,必須關閉或暫停狀態 -n [新虛擬機],--name [新虛擬機] 新虛擬機 -f [新虛擬機存儲文件],--file [新虛擬機存儲文件] 新虛擬機使用的磁盤鏡像文件
基於centos7.0克隆一台虛擬機centos7.0-bak
[root@youxi1 ~]# ll -h /var/lib/libvirt/images/ 總用量 12G //總共才是12G -rw------- 1 root root 11G 9月 8 11:34 centos7.0.qcow2 -rw------- 1 root root 11G 9月 8 15:53 centos75.img [root@youxi1 ~]# ll -h /var/lib/libvirt/images/ 總用量 12G -rw------- 1 root root 11G 9月 8 11:34 centos7.0.qcow2 -rw------- 1 root root 11G 9月 8 15:53 centos75.img [root@youxi1 ~]# virt-clone -o centos7.0 -n centos7.0-bak -f /var/lib/libvirt/images/centos7.0-bak.img 正在分配 'centos7.0-bak.img' | 10 GB 00:30 成功克隆 'centos7.0-bak'。 [root@youxi1 ~]# ll -h /var/lib/libvirt/images/ 總用量 14G -rw------- 1 root root 1.4G 9月 8 18:23 centos7.0-bak.img //沒開啟之前才1.4G -rw------- 1 root root 11G 9月 8 11:34 centos7.0.qcow2 -rw------- 1 root root 11G 9月 8 15:53 centos75.img [root@youxi1 ~]# ls /etc/libvirt/qemu/ //查看一下虛擬機的配置文件 autostart centos7.0-bak.xml centos7.0.xml centos75.xml networks
//可以使用vimdiff對比克隆前后的配置文件
[root@youxi1 ~]# vimdiff /etc/libvirt/qemu/centos7.0-bak.xml /etc/libvirt/qemu/centos7.0.xml [root@youxi1 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- - centos7.0 關閉 - centos7.0-bak 關閉 - centos75 關閉
我這里的Mac是不一樣的,啟動虛擬機centos7.0-bak和centos7.0
[root@youxi1 ~]# virsh start centos7.0 域 centos7.0 已開始 [root@youxi1 ~]# virsh start centos7.0-bak 域 centos7.0-bak 已開始
用VNC連接一下,查看這兩台虛擬機的IP地址
虛擬機centos7.0的IP地址:
虛擬機centos7.0-bak的IP地址:
兩者都可以上網。
注意:如果是CentOS6的系統進行克隆,那么只能開啟一台,進入系統中去修改IP和MAC地址。
(2).KVM虛擬機快照
KVM快照分兩種:1.使用LVM快照,如果分區是LVM,那么利用LVM進行KVM的快照備份;2.使用qcow2格式的鏡像創建快照。
快照的作用:1.熱備;2.災難恢復;3.回滾到某個歷史節點。
快照使用的空間大小:第一次快照使用的空間最大,之后都是在此基礎上空間只占用修改過的數據,類似增量備份。
1)創建快照
所以在快照之前需要確保虛擬機鏡像格式為qcow2
[root@youxi1 ~]# qemu-img info /var/lib/libvirt/images/centos75.img image: /var/lib/libvirt/images/centos75.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.3G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: true
之后對虛擬機創建快照,虛擬機可以是開啟狀態,也可以是關閉狀態。一般建議關機創建快照,因為關機創建快照更快,並且如果開機創建快照需要把內存中的內容寫到磁盤上,記錄虛擬機此刻的狀態。
[root@youxi1 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- - centos7.0 關閉 - centos7.0-bak 關閉 - centos75 關閉 [root@youxi1 ~]# virsh snapshot-create centos75 //創建快照 已生成域快照 1567998395 [root@youxi1 ~]# virsh snapshot-list centos75 名稱 生成時間 狀態 ------------------------------------------------------------ 1567998395 2019-09-09 11:06:35 +0800 shutoff [root@youxi1 ~]# virsh snapshot-create-as centos75 httpd //創建快照並起名 已生成域快照 httpd [root@youxi1 ~]# virsh snapshot-list centos75 名稱 生成時間 狀態 ------------------------------------------------------------ 1567998395 2019-09-09 11:06:35 +0800 shutoff httpd 2019-09-09 11:08:44 +0800 shutoff
在創建快照時,建議使用virsh snapshot-create-as [虛擬機名稱] [快照名稱],方便去辨別該快照的作用和歷史節點。另外快照名雖然可以使用中文,但不建議使用。
查看快照占用的空間大小
[root@youxi1 ~]# qemu-img info /var/lib/libvirt/images/centos75.img image: /var/lib/libvirt/images/centos75.img file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 1.3G cluster_size: 65536 Snapshot list: ID TAG VM SIZE DATE VM CLOCK 1 1567998395 0 2019-09-09 11:06:35 00:00:00.000 2 httpd 0 2019-09-09 11:08:44 00:00:00.000 Format specific information: compat: 1.1 lazy refcounts: true
2)刪除快照
[root@youxi1 ~]# virsh snapshot-delete centos75 1567998395 //刪除掉這個糟糕的快照 已刪除域快照 1567998395 [root@youxi1 ~]# virsh snapshot-list centos75 名稱 生成時間 狀態 ------------------------------------------------------------ httpd 2019-09-09 11:08:44 +0800 shutoff
3)恢復快照
為了顯示出差別,這里我先啟動虛擬機,安裝httpd
[root@youxi1 ~]# virsh list --all Id 名稱 狀態 ---------------------------------------------------- 2 centos75 running - centos7.0 關閉 - centos7.0-bak 關閉 [root@youxi1 ~]# virsh console centos75 連接到域 centos75 換碼符為 ^] CentOS Linux 7 (Core) Kernel 3.10.0-862.el7.x86_64 on an x86_64 kvm-CentOS7 login: root 密碼: Last login: Mon Sep 9 10:09:21 on ttyS0 [root@kvm-CentOS7 ~]# yum -y install httpd [root@kvm-CentOS7 ~]# systemctl status httpd //可以看到httpd服務 ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: man:httpd(8) man:apachectl(8)
然后關閉虛擬機,執行快照恢復。注意:恢復快照必須關閉虛擬機
[root@youxi1 ~]# virsh snapshot-revert centos75 httpd [root@youxi1 ~]# virsh start centos75 --console ...... kvm-CentOS7 login: root 密碼: Last login: Mon Sep 9 10:09:21 on ttyS0 [root@kvm-CentOS7 ~]# systemctl status httpd //此時就沒有httpd了 Unit httpd.service could not be found.
4)獲取或設定當前快照
[root@youxi1 ~]# virsh snapshot-current centos75 //獲取 <domainsnapshot> <name>real-httpd</name> <state>shutoff</state> <parent> <name>httpd</name> </parent> <creationTime>1568000560</creationTime> <memory snapshot='no'/> <disks> <disk name='vda' snapshot='internal'/> <disk name='hda' snapshot='no'/> </disks> <domain type='kvm'> <name>centos75</name> <uuid>8b7d2976-11a6-42a6-99f1-1f36ab8dd488</uuid> <memory unit='KiB'>1048576</memory> <currentMemory unit='KiB'>1048576</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> </features> <cpu mode='custom' match='exact' check='partial'> <model fallback='allow'>IvyBridge</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> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/centos75.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk> <disk type='file' device='cdrom'> <driver name='qemu' type='raw'/> <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='ide' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller> <controller type='pci' index='0' model='pci-root'/> <interface type='bridge'> <mac address='52:54:00:71:3c:50'/> <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> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </memballoon> <rng model='virtio'> <backend model='random'>/dev/urandom</backend> <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> </rng> </devices> </domain> </domainsnapshot>