重学kvm之四(virsh、qemu-img等常规实用命令)

创建磁盘映像文件的两种方式(dd和qemu-img)

1、dd创建raw格式的磁盘文件(预分配方式)
    dd if=/dev/zero of=/root/test1.img bs=1M count=1024
2、精简置备
    dd if=/dev/zero of=/root/test2-seek.img bs=1M seek=1024 count=0
    #seek选项会在开头跳过1024个块儿,再开始复制,由于count=0 所以dd没有进行复制,这就有了1M*1024的空洞文件

将虚拟机固定到numa节点或指定的逻辑cpu上

[root@node100 ~]# virsh capabilities | grep cpu
    <cpu>
    </cpu>
          <cpus num='24'>
            <cpu id='0' socket_id='0' core_id='0' siblings='0,12'/>
            <cpu id='1' socket_id='1' core_id='0' siblings='1,13'/>
            <cpu id='2' socket_id='0' core_id='1' siblings='2,14'/>
            <cpu id='3' socket_id='1' core_id='1' siblings='3,15'/>
            <cpu id='4' socket_id='0' core_id='2' siblings='4,16'/>
            <cpu id='5' socket_id='1' core_id='2' siblings='5,17'/>
            <cpu id='6' socket_id='0' core_id='3' siblings='6,18'/>
            <cpu id='7' socket_id='1' core_id='3' siblings='7,19'/>
            <cpu id='8' socket_id='0' core_id='4' siblings='8,20'/>
            <cpu id='9' socket_id='1' core_id='4' siblings='9,21'/>
            <cpu id='10' socket_id='0' core_id='5' siblings='10,22'/>
            <cpu id='11' socket_id='1' core_id='5' siblings='11,23'/>
            <cpu id='12' socket_id='0' core_id='0' siblings='0,12'/>
            <cpu id='13' socket_id='1' core_id='0' siblings='1,13'/>
            <cpu id='14' socket_id='0' core_id='1' siblings='2,14'/>
            <cpu id='15' socket_id='1' core_id='1' siblings='3,15'/>
            <cpu id='16' socket_id='0' core_id='2' siblings='4,16'/>
            <cpu id='17' socket_id='1' core_id='2' siblings='5,17'/>
            <cpu id='18' socket_id='0' core_id='3' siblings='6,18'/>
            <cpu id='19' socket_id='1' core_id='3' siblings='7,19'/>
            <cpu id='20' socket_id='0' core_id='4' siblings='8,20'/>
            <cpu id='21' socket_id='1' core_id='4' siblings='9,21'/>
            <cpu id='22' socket_id='0' core_id='5' siblings='10,22'/>
            <cpu id='23' socket_id='1' core_id='5' siblings='11,23'/>
          </cpus>
      <bank id='0' level='3' type='both' size='15' unit='MiB' cpus='0,2,4,6,8,10,12,14,16,18,20,22'/>
      <bank id='1' level='3' type='both' size='15' unit='MiB' cpus='1,3,5,7,9,11,13,15,17,19,21,23'/>
      <cpuselection/>
      <cpuselection/>
[root@node100 ~]# virsh dumpxml kvm6058 | grep vcpu
  <vcpu placement='static'>8</vcpu>

关闭kvm6058虚拟机,将他的xml文件cpu那儿的内容改成
[root@node100 ~]# virsh dumpxml kvm6058 | grep vcpu
  <vcpu cpuset='6-9'>4</vcpu>

启动kvm6058后查看cpu的亲和性
[root@node100 ~]# virsh vcpupin kvm6058
VCPU: CPU Affinity
----------------------------------
   0: 6-9
virsh domblkerror       #显示块设备上的错误
virsh domblkinfo        #显示块设备的基本信息
virsh domblklist        #显示所有块设备的列表
virsh domblkstat        #显示块设备的状态
[root@node100 ~]# virsh freecell --all          #确定numa节点的可用内存
    0:   43237448 KiB
--------------------
Total:   43237448 KiB

[root@node100 ~]# virsh nodeinfo        #确认cpu和numa拓扑
CPU model:           x86_64
CPU(s):              24
CPU frequency:       1620 MHz
CPU socket(s):       2
Core(s) per socket:  6
Thread(s) per core:  2
NUMA cell(s):        1
Memory size:         65782568 KiB

[root@node100 ~]# virsh vcpuinfo kvm6060        #显示虚拟机vcpu运行在哪些物理cpu核心上
VCPU:           0
CPU:            11  #表示虚拟cpu0运行在物理cpu11 这个核心上
State:          running
CPU time:       20980.8s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy    #有多少个y,就表示这个vcpu可以在多少个物理cpu核心上切换(往往是物理cpu的核心数)

VCPU:           1
CPU:            22
State:          running
CPU time:       22370.1s
CPU Affinity:   yyyyyyyyyyyyyyyyyyyyyyyy

qemu-img命令常见用法

qemu-img info Ubuntu-18.04-x64.qcow2    #查看磁盘镜像信息
qemu-img check -f qcow2 test.img        #检查磁盘镜像文件是否有error
qemu-img convert -p -f vmdk ./CentOS-6.9.vmdk -O qcow2 ./CentOS-6.9.qcow2   #-p显示进度,-f指定转换前的格式,-O指定转换后的格式
qemu-img convert -p -c -O qcow2 CentOS-6.9.qcow2 CentOS-6.9-compress.qcow2  #压缩镜像(原理是,将未使用的空间,全部写0)

    #qemu-img 2.9之前的磁盘镜像文件加密方式
    qemu-img convert -f qcow2 -O qcow2 -o encryption original.qcow2 encryption.qcow2

虚拟机安装qemu guest agent 后可使用的实用命令

#注意,宿主机通过qemu guest agent与虚拟机交互的范围大小和功能多少还取决于虚拟机os的版本,比如windows2003仅支持很少的命令
(本地磁盘虚拟机和ceph磁盘虚拟机都支持)
    virsh qemu-agent-command kvm7022 '{"execute":"guest-info"}'               #查询宿主机能通过qemu guest anget 向虚拟机发送哪些指令

获取虚拟机网卡信息
    virsh domifaddr kvm7022 --source agent  #获取虚拟机各个网卡的ip(需要qemu-guest-agent支持)
    virsh domiflist kvm7022                 #获取虚拟机网卡信息

重启|关闭虚拟机
    virsh shutdown kvm7022 --mode=agent     #在内部关闭虚拟机,比--mode=acpi 更可靠(acpi高级电源管理,这也是从内部关闭虚拟机)
    virsh reboot kvm7022 --mode agent       #重启虚拟机(相当于在虚拟机内部进行重启),比 virsh reboot kvm7022 --mode acpi 更可靠

重置虚拟机密码
    virsh set-user-password kvm7022 --user root --password test@123             #将kvm7022的root密码修改成test@123
    virsh set-user-password kvm7023 --user administrator --password test@123    #将kvm7023的root密码修改成test@123

动态内存管理(内存气球:虚拟机安装了virtio-balloon驱动和通道后可使用)

查看内存气球信息
[root@node100 ~]# virsh qemu-monitor-command kvm7309 --hmp --cmd info balloon
balloon: actual=8192            #当前实际可以使用的内存为8192,虚拟机内部看到7.6G,即目前内存气球中的内存为0

对内存气球充气
#(即使用ballon命令将虚拟机可使用的内存设置为4096)(若是要还原再次设置为8192即可,若是设置值大于虚拟机启动时的值,多出部分是不生效的)
#注意:内存充气需要一定时间,可以在虚拟机内部多次使用内存查看命令来观察变化
[root@node100 ~]# virsh qemu-monitor-command kvm6708 --hmp --cmd balloon 4096

给虚拟机附加|分离磁盘

附加磁盘
    virsh attach-disk kvm1011 /root/test1.img vdb --config --live   #--live 给正在运行的虚拟机附加一块镜像(处于停止状态的虚拟机不能使用--live)
    virsh attach-disk kvm1011 /root/test2-seek.img vdc --config     #给处于停止状态的虚拟机附件一块磁盘镜像
分离磁盘
    virsh detach-disk kvm1011 vdb --config --live       #给处于运行状态的虚拟机分离磁盘

宿主机安装libguestfs-tools后virt相关命令用法(常用于镜像制作)

(注意:只支持本地磁盘虚拟机,基于ceph的虚拟机是不支持的)
    #rpm -qa|grep libguestfs-tools  #确保计算节点该工具已经安装
    #-d 指定虚拟机域名

    #查看虚拟机或磁盘内部文件
    virt-cat -d kvm7187 /etc/passwd                 #查看虚拟机内部文件(类似于cat,开关机下都可以)
    virt-cat -a kvm7187-system.qcow2 /etc/passwd    #直接读取磁盘文件中的内容

    #直接编辑虚拟机内部文件(虚拟机必须关机)
    virt-edit kvm6973 /etc/shadow               #变相破密
    virt-edit -a /home/kvm/local/kvm6973/kvm6973-system.qcow2 /etc/shadow

    #向虚拟机内部拷贝文件(虚拟机必须处于关机状态,启动后验证)
    virt-copy-in -d kvm7022 /tmp/test.txt /home/               #将本地/tmp/test.txt拷贝到虚拟机的/home下
    virt-copy-in -a kvm7187-system.qcow2 /tmp/test.txt /home/  #将/tmp/test.txt拷贝到虚拟磁盘的/home下

    #将虚拟机内的文件拷贝出来
    virt-copy-out -d kvm7022 /etc/passwd /tmp/              #-d 指定虚拟机,拷贝到/tmp目录下 
    virt-copy-out -a /kvm/img/vm01.qcow2 /etc/passwd /tmp/  #从磁盘拷贝出来
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/994.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/3/1作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录