• Linux 虚拟化技术 KVM


    目录

     virt-install 命令创建虚拟机      命令版 半手工

    利用 qemu-img命令创建虚拟磁盘

    基于已有系统直接创建新的虚拟机启动   复制

    ​编辑

     复制 可以   适用于脚本 可以批量改  内存之类的   克隆没法子改

     利用virt-clone克隆实现

    半虚拟化设备统一接口virtio

     创建 Windows Server 2008 虚拟机

     生成Windows Server 2008 镜像模版、

    libvirt 架构

     快照

      #查看虚拟机详细信息

    #查看当前启动的虚拟机

    #查看所有虚拟机

    启动和关闭虚拟机

    #列出开机状态虚拟机的UUID和名称

    #列出所有虚拟机的UUID和name

    查看虚拟机UUID,通过UUID启动关闭虚拟机

    暂停和恢复虚拟机

    配置虚拟机开机自动启动

     磁盘预分配策略

    虚拟磁盘类型 

     qcow2 格式选项

    创建raw格式非稀疏文件 

     创建raw格式稀疏文件

    raw文件复制的格式控制 

    virsh 管理虚拟机快照

    使用virsh 命令还原快照 

    #删除快照 


    1. [root@ubuntu2004 isos]#virsh dominfo centos7.0 #查看虚拟机详细信息
    2. Id: -
    3. Name: centos7.0
    4. UUID: 266d67e2-8630-4dcf-955d-b0bbb71f9ae6
    5. OS Type: hvm
    6. State: shut off
    7. CPU(s): 2
    8. Max memory: 1048576 KiB
    9. Used memory: 1048576 KiB
    10. Persistent: yes
    11. Autostart: disable
    12. Managed save: no
    13. Security model: apparmor
    14. Security DOI: 0

    apt update

    apt install cpu-checker 

     apt install qemu-kvm virt-manager libvirt-daemon-system  

    apt install bridge-utils        #网桥

    [root@rocky8 ~]#yum install bridge-utils.x86_64 

    [root@ubuntu2004 ~]#export DISPLAY=10.0.0.1:0.0     

    #如果没有需要加载一下环境变量,export=DISPLAY=ip地址:0.0

    [root@ubuntu2004 ~]#virt-manager             #需要安装Xmanager 

    CentOS 安装 KVM

    [root@centos8 ~]#yum -y install qemu-kvm libvirt virt-manager virt-install virt-viewer
    [root@centos8 ~]#systemctl start --now libvirtd

    CentOS 8 还提供基于Web的虚拟机管理方式

    root@centos8 ~]#yum -y install cockpit cockpit-machines
    [root@centos8 ~]#systemctl enable --now cockpit.socket

    Created symlink /etc/systemd/system/sockets.target.wants/cockpit.socket →
    /usr/lib/systemd/system/cockpit.socket.

    #打开浏览器,访问以下地址:
    https://centos8主机:9090

    图形化工具 virt-manager

    [root@rocky8 ~]#yum install bridge-utils.x86_64 
    [root@rocky8 ~]#export DISPLAY=10.0.0.1:0.0
    [root@rocky8 ~]#virt-manager 

       

    • [root@ubuntu2004 ~]#localectl status        #查看当前字符集  (为乱码)
    • [root@ubuntu2004 ~]#localectl set-locale LANG=en_US.UTF-8        #把他改写成utf8格式
    • [root@ubuntu2004 ~]#exit           #退出之后重新执行
    • [root@ubuntu2004 ~]#virt-manager 

      cat /etc/libvirt/qemu/networks/default.xml 

    1. [root@ubuntu2004 ~]# cat /etc/libvirt/qemu/networks/default.xml #定义范围
    2. <!--
    3. WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
    4. OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
    5. virsh net-edit default
    6. or other application using the libvirt API.
    7. -->
    8. <network>
    9. <name>default</name>
    10. <uuid>d28f09ba-f940-4647-bed1-19fd734ff209</uuid>
    11. <forward mode='nat'/>
    12. <bridge name='virbr0' stp='on' delay='0'/>
    13. <mac address='52:54:00:a1:e2:bd'/>
    14. <ip address='192.168.122.1' netmask='255.255.255.0'>
    15. <dhcp>
    16. <range start='192.168.122.2' end='192.168.122.254'/>
    17. </dhcp>
    18. </ip>
    19. </network>

       往下走    20G是立即20G

     

     

     ​​​​​​​

     

     [root@ubuntu2004 isos]#ls /var/lib/libvirt/images/      #默认so路径

     

     ​​​​​​​

     

     

     

     一直确定

     

     virt-install 命令创建虚拟机      命令版 半手工

    利用 qemu-img命令创建虚拟磁盘

    注意: qemu-img create 一定要确认对应路径下没有此文件,如果存在将覆盖原文件

    [root@centos8 ~]#qemu-img  create -f qcow2 /var/lib/libvirt/images/rocky8.qcow2 20G

           #模拟硬盘20G,不是要求立即20G
    Formatting '/var/lib/libvirt/images/centos7.qcow2', fmt=qcow2 size=21474836480
    cluster_size=65536 lazy_refcounts=off refcount_bits=16

    #观察文件虚拟磁盘大小,比较用virt-manager创建的虚拟机磁盘文件大小
    [root@centos8 ~]#ll -h /var/lib/libvirt/images/centos7.qcow2
    -rw-r--r-- 1 root root 193K Sep 13 21:25 /var/lib/libvirt/images/centos7.qcow2

     [root@ubuntu2004 ~]#virsh list --all       #查看虚拟机鼠粮
     Id   Name        State
    ---------------------------
     4    centos7.0   running

    virt-install --virt-type kvm --name rocky8 --ram 1024 --vcpus 2 --cdrom=/data/isos/Rocky-8.5-x86_64-minimal.iso --disk path=/var/lib/libvirt/images/rocky8.qcow2 --network network=default  --graphics vnc,listen=0.0.0.0 --noautoconsole --os-variant=rhel8.2
     #默认网络default模式     支持远程vnc链接  接听端口0.0.0.0     注意格式
     打开终端   安装操作系统
    WARNING  Requested memory 1024 MiB is less than the recommended 1536 MiB for OS rhel8.2

    Starting install...

    基于已有系统直接创建新的虚拟机启动   复制

    1. [root@rocky8 images]# scp rocky8.qcow2 10.0.0.100:/var/lib/libvirt/images/
    2. 把rock8的复制到ubuntu
    3. [root@ubuntu2004 images]#virt-install --virt-type kvm --name rocky8 --ram 2048 --vcpus 2 --disk bus=virtio,path=/var/lib/libvirt/images/rocky8.qcow2 --network network=default,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart --boot hd
    4. WARNING No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.
    5. Starting install...
    6. Domain creation completed.
    7. 启动下

     导入现有的虚拟磁盘

     

     

     复制 可以   适用于脚本 可以批量改  内存之类的   克隆没法子改

    1. root@centos8 images]#pwd
    2. /var/lib/libvirt/images
    3. [root@centos8 images]#cp centos8.qcow2 centos8-2.qcow2
    4. [root@centos8 images]#virt-install --virt-type kvm --name centos8-2 --ram 2048 --
    5. vcpus 2 --disk bus=virtio,path=/var/lib/libvirt/images/centos8-2.qcow2 --network
    6. network=default,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --
    7. autostart --boot hd
    8. WARNING No operating system detected, VM performance may suffer. Specify an OS
    9. with --os-variant for optimal results.
    10. Starting install...
    11. Domain creation completed.
    12. #运行工具,可以看到下面出现新的虚拟机
    13. [root@centos8 images]#virt-manager

     利用virt-clone克隆实现

    #基于已有的虚拟机克隆生成新的虚拟机
    [root@ubuntu2004 ~]#virt-clone -o rocky8 -f /var/lib/libvirt/images/rocky8-
    3.qcow2 -n rocky8-3
    -o rocky8 #指已存在的虚拟机的名称
    -f /var/lib/libvirt/images/rocky8-3.qcow2 #新虚拟机磁盘文件路径,此文件自动生成,不需要
    事先创建     两个名字
    -n rocky8-3 #新虚拟机的名称

    1. [root@ubuntu2004 ~]#virsh list --all
    2. Id Name State
    3. ----------------------------------
    4. - centos7-2 shut off
    5. - centos7.0 shut off
    6. - rocky8 shut off
    7. - rocky8-template shut off
    8. [root@ubuntu2004 ~]#virsh start rocky8-template #跑起来
    9. Domain rocky8-template started
    10. [root@ubuntu2004 ~]#virsh list --all
    11. Id Name State
    12. ----------------------------------
    13. 2 rocky8-template running
    14. - centos7-2 shut off
    15. - centos7.0 shut off
    16. - rocky8 shut off

     虚拟化区别

    性能对比

    https://www.ilsistemista.net/index.php/virtualization/42-kvm-virtio-paravirtualized-drivers-why-they-matter.html?start=2

    virtio 半虚拟化

    e1000全虚拟化

    半虚拟化设备统一接口virtio

     过统一的接口virtio以支持的多种硬件设备

    • 不同的虚拟设备和不同的虚拟机可以有不同的前端驱动
    • 不同的硬件设备可以有不同的后端驱动
    • 两者之间的交互遵循virtio的标准

    测试主机速度 

       [root@localhost ~]# dd | hdparm -t /dev/vda

    /dev/vda:
     Timing buffered disk reads: 1774 MB in  3.00 seconds = 591.20 MB/sec

     创建 Windows Server 2008 虚拟机

    #创建磁盘文件      倒入相关文件

    [root@ubuntu2004 images]#qemu-img create -f qcow2 /var/lib/libvirt/images/Windows-2008_r2-x86_64.qcow2 200G
    [root@ubuntu2004 isos]#virt-install --virt-type kvm --name Win2008 --memory 3072 --vcpus=2 --os-variant=win2k8r2 --cdrom=/data/isos/cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso --disk path=/var/lib/libvirt/images/Windows-2008_r2-x86_64.qcow2,format=qcow2,bus=virtio --disk path=/data/isos/virtio-win-0.1.141_amd64.vfd,device=floppy --network bridge=virbr0,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole --autostart

     

     挂载virtio-win的141的ISO光盘文件virtio-win-0.1.141.iso进行安装驱动
    注意:不要安装其它版本,比如189版本会蓝屏死机,185安装后显示黄色,工作不正常

     生成Windows Server 2008 镜像模版、

    利用sysprep工具,清除个性信息,下次Windows开机时, 会自动生成初始化个性信息

    Linux 有相同打架 ,windows有SID相同打架  (就是机器名)

    libvirt 架构

    注意: 如果libvirtd服务意外关闭,将导致相关工具,如:virt-manager等无法和虚拟机连接,但虚拟机仍会正常运行

    [root@ubuntu2004 ~]#systemctl stop libvirtd libvirtd.socket libvirtd-admin.socket libvirtd-ro.socket

    [root@centos8 ~]#systemctl stop libvirtd

    [root@centos8 ~]#virsh list
    error: failed to connect to the hypervisor
    error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file
    or directory

    #virt-manager工具也无法连接虚拟机

     开机自启动 点个对钩,自动创建快捷方式

     快照

     

     

      #查看虚拟机详细信息

    1. [root@ubuntu2004 isos]#virsh dominfo centos7.0 #查看虚拟机详细信息
    2. Id: -
    3. Name: centos7.0
    4. UUID: 266d67e2-8630-4dcf-955d-b0bbb71f9ae6
    5. OS Type: hvm
    6. State: shut off
    7. CPU(s): 2
    8. Max memory: 1048576 KiB
    9. Used memory: 1048576 KiB
    10. Persistent: yes
    11. Autostart: disable
    12. Managed save: no
    13. Security model: apparmor
    14. Security DOI: 0

    #查看当前启动的虚拟机

    [root@centos8 ~]#virsh list

    #查看所有虚拟机

    [root@centos8 ~]#virsh list --all

    启动和关闭虚拟机

    #正常关机
    [root@centos8 ~]#virsh shutdown 1

    #强制关机,慎重使用
    [root@centos8 ~]#virsh destroy 1

    #列出开机状态虚拟机的UUID和名称

    [root@centos8 ~]#virsh list --uuid --name

    #列出所有虚拟机的UUID和name

    [root@ubuntu2004 ~]#virsh list --uuid --all --name

    查看虚拟机UUID,通过UUID启动关闭虚拟机

    [root@centos8 ~]#virsh list

    #查看虚拟机的UUID
    [root@centos8 ~]#virsh domuuid 1
    99765478-cfb1-4164-b038-f62004ccab9e

    [root@centos8 ~]#virsh destroy 99765478-cfb1-4164-b038-f62004ccab9e
    Domain 99765478-cfb1-4164-b038-f62004ccab9e destroyed

    [root@centos8 ~]#virsh list --all

    [root@centos8 ~]#virsh domuuid centos8
    99765478-cfb1-4164-b038-f62004ccab9e

    [root@centos8 ~]#virsh start 99765478-cfb1-4164-b038-f62004ccab9e
    Domain centos8 started

    暂停和恢复虚拟机

    [root@centos8 ~]#virsh suspend centos8
    Domain centos8 suspended

    #虚拟机暂停后,宿主机中还存有相关的进程
    [root@centos8 ~]#ps aux|grep kvm

    配置虚拟机开机自动启动

    [root@centos8 ~]#virsh autostart centos8
    Domain centos8 marked as autostarted

    #设置虚拟机随宿主机启动而自动启动,本质就是在下面目录生成软链接
    [root@centos8 ~]#ll /etc/libvirt/qemu/autostart/
    total 0
    lrwxrwxrwx 1 root root 29 Sep 17 18:53 centos8.xml ->
    /etc/libvirt/qemu/centos8.xml

    [root@centos8 ~]#virsh autostart 1 --disable
    Domain 1 unmarked as autostarted
    [root@centos8 ~]#ll /etc/libvirt/qemu/autostart/
    total 0
    lrwxrwxrwx 1 root root 29 Sep 17 18:53 centos8.xml ->
    /etc/libvirt/qemu/centos8.xml
    [root@centos8 ~]#reboot
    [root@centos8 ~]#virsh list
    Id Name State
    ----------------------------------------------------
    1 centos8 running

     磁盘预分配策略

    raw 文件的预分配策略和文件系统是否支持有关,而qcow2则无关
    预分配策略
    off
    此为缺省策略,即不使用预分配策略,预分配后的虚拟磁盘占用空间很小,不属于稀疏映像类型
    生成的磁盘文件占用空间很小
    metadata
    只预分配元数据(metadata),预分配后的磁盘文件属于稀疏映像类型,相当于vmware中的磁盘置备选项: Thin Provision(精简配置)生成的磁盘文件为稀疏格式,实际占用的空间比off策略稍大一些
    falloc
    分配文件的块并标识它们的状态为未初始化,即只分配空间,但不置零. 预分配后的虚拟磁盘属于非稀疏映像类型,相对full模式来说,创建虚拟磁盘的速度要快很多,相当于vmware中的磁盘置备选项:厚置备延迟置零
    生成的磁盘文件实际占用的空间和分配的空间相同大小
    full

    分配所有磁盘空间并置零,预分配后的虚拟磁盘属于非稀疏映像类型,创建最慢,相当于vmware中的磁盘置备选项: 厚置备置零生成的磁盘文件实际占用的空间和分配的空间相同大小

    文件系统显示大小
    [root@centos8 ~]#ll -h test*.qcow2
    -rw-r--r-- 1 root root 193K Sep 20 13:31 test1.qcow2
    -rw-r--r-- 1 root root 193K Sep 20 13:32 test2.qcow2
    -rw-r--r-- 1 root root 1.1G Sep 20 13:35 test3.qcow2
    -rw-r--r-- 1 root root 1.1G Sep 20 13:36 test4.qcow2
    -rw-r--r-- 1 root root 1.1G Sep 20 13:37 test5.qcow2
    #查看真实大小
    [root@centos8 ~]#du -h test*.qcow2
    196K test1.qcow2
    196K test2.qcow2
    836K test3.qcow2
    1.1G test4.qcow2
    1.1G test5.qcow

    虚拟磁盘类型 

    固定Fixed
    在配置时,指定磁盘大小
    不管在虚拟磁盘上实际存储多少数据,都将占用相同大小宿主机的磁盘空间
    动态Dynamic
    初始空间占用小
    随着空间的使用逐渐增长到最大容量,但是只根据需求使用更多的空间
    差异Differencing
    因为创建是差异磁盘,所以只保存变更的数据
    例如,将操作系统安装在父盘,然后创建差异化磁盘来执行进一步配置

    写入最后面前面没有

     qcow2 格式选项

    backing_file #指定后端镜像文件
    backing_fmt #设置后端镜像的镜像格式
    cluster_size #设置镜像中的簇大小,取值在512到2M之间,默认值为64K
    preallocation #设置镜像文件空间的预分配模式
    encryption #用于设置加密

    创建raw格式非稀疏文件 

    [root@centos8 ~]#dd if=/dev/zero of=vm2.img bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB, 1.0 GiB) copied, 3.20332 s, 335 MB/s

    [root@centos8 ~]#qemu-img info vm2.img
    image: vm2.img
    file format: raw
    virtual size: 1.0G (1073741824 bytes)
    disk size: 1.0G

    [root@centos8 ~]#ls -hl vm2.img
    -rw-r--r-- 1 root root 1.0G Sep 20 12:31 vm2.img

    [root@centos8 ~]#du -h vm2.img
    1.0G vm2.img

     创建raw格式稀疏文件

    [root@centos8 ~]#dd if=/dev/zero of=vm3.img bs=1M count=0 seek=1024
    0+0 records in
    0+0 records out
    0 bytes copied, 9.2173e-05 s, 0.0 kB/s

    [root@centos8 ~]#qemu-img info vm3.img
    image: vm3.img
    file format: raw
    virtual size: 1.0G (1073741824 bytes)
    disk size: 0

    [root@centos8 ~]#ll -h vm3.img
    -rw-r--r-- 1 root root 1.0G Sep 20 12:34 vm3.img
    [root@centos8 ~]#du -h vm3.img
    0 vm3.img

    raw文件复制的格式控制 

    1. #复制非稀疏文件,默认也为非稀疏文件
    2. [root@centos8 ~]#cp vm2.img vm2.img.bak
    3. [root@centos8 ~]#du -h vm2.img.bak
    4. 1.0G vm2.img.bak
    5. [root@centos8 ~]#ll -h vm2.img.bak
    6. -rw-r--r-- 1 root root 1.0G Sep 20 12:38 vm2.img.bak
    7. [root@centos8 ~]#qemu-img info vm2.img.bak
    8. image: vm2.img.bak
    9. file format: raw
    10. virtual size: 1.0G (1073741824 bytes)
    11. disk size: 1.0G
    12. #复制稀疏文件,默认仍为稀疏文件
    13. [root@centos8 ~]#cp vm3.img vm3.img.bak
    14. [root@centos8 ~]#ll -h vm3.img.bak
    15. -rw-r--r-- 1 root root 1.0G Sep 20 12:36 vm3.img.bak
    16. [root@centos8 ~]#du -h vm3.img.bak
    17. 0 vm3.img.bak
    18. [root@centos8 ~]#qemu-img info vm3.img.bak
    19. image: vm3.img.bak
    20. file format: raw
    21. virtual size: 1.0G (1073741824 bytes)
    22. disk size: 0
    23. #指定将非稀疏文件复制为稀疏格式格式
    24. [root@centos8 ~]#cp --sparse=always vm2.img vm2.img.bak2
    25. [root@centos8 ~]#qemu-img info vm2.img
    26. image: vm2.img
    27. file format: raw
    28. virtual size: 1.0G (1073741824 bytes)
    29. disk size: 1.0G
    30. [root@centos8 ~]#qemu-img info vm2.img.bak2
    31. image: vm2.img.bak2
    32. file format: raw
    33. virtual size: 1.0G (1073741824 bytes)
    34. disk size: 0
    35. #指定将稀疏文件复制为非稀疏格式格式
    36. [root@centos8 ~]#cp --sparse=never vm3.img vm3.img.bak2
    37. [root@centos8 ~]#qemu-img info vm3.img
    38. image: vm3.img
    39. file format: raw
    40. virtual size: 1.0G (1073741824 bytes)
    41. disk size: 0
    42. [root@centos8 ~]#qemu-img info vm3.img.bak2
    43. image: vm3.img.bak2
    44. file format: raw
    45. virtual size: 1.0G (1073741824 bytes)
    46. disk size: 1.0G

    virsh 管理虚拟机快照

    [root@centos8 ~]#virsh snapshot-list centos8
    Name Creation Time State
    ------------------------------------------------------------

    #创建虚拟机快照
    [root@centos8 ~]#virsh snapshot-create centos8
    Domain snapshot 1600593611 created
    [root@centos8 ~]#virsh snapshot-list centos8
    Name Creation Time State
    ------------------------------------------------------------
    1600593611 2020-09-20 17:20:11 +0800 shutoff

    使用virsh 命令还原快照 

    [root@centos8 ~]#virsh list
    Id Name State
    ----------------------------------------------------
    #无需关机,即可还原快照
    [root@centos8 ~]#virsh snapshot-revert centos8 --snapshotname 1600593611 --
    running
    [root@centos8 ~]#virsh list
    Id Name State
    ----------------------------------------------------
    23 centos7 running

    #删除快照 

     #删除快照
    [root@centos8 ~]#virsh snapshot-delete centos8 --snapshotname 1600593611
    Domain snapshot 1600593611 deleted
    [root@centos8 ~]#virsh snapshot-list centos8
    Name Creation Time State
    ------------------------------------------------------------
    [root@centos8 ~]#

  • 相关阅读:
    外汇天眼:Patrick Wonsey挪用340万美元!涉嫌外汇和二元期权欺诈
    MySQL数据库之存储引擎
    目标检测YOLO实战应用案例100讲-基于卷积神经网络的小样本机载雷达动目标检测
    工业智能网关BL110应用之三十六: 如何连接配置金鸽 金鸽Modbus服务器
    golang中的select原理解析
    学信息系统项目管理师第4版系列14_沟通管理
    【赠书第20期】AI绘画与修图实战:Photoshop+Firefly从入门到精通
    洛谷_P1007 独木桥_思维
    计组 | 交叉编址 & 流水线
    Ribbon 客户端负载均衡
  • 原文地址:https://blog.csdn.net/cp_dvd/article/details/127291723