Linux的桌面虛擬化技術KVM(三)——KVM虛擬機克隆和快照


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>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM