KVM [ 3 ] --- KVM虚拟机管理:virsh命令,kvm虚拟机添加内存,添加硬盘


创建 kvm 的虚拟机流程

  • 全新安装

  • 图形化

  • 字符界面安装

    • virt-install 工具安装
      • 手动安装
        需要使用空格键 Tab 键 上下方向键操作
        比较繁琐,操作难度大

      • 自动安装
        依赖 kickstart 文件

        • 红帽公司开发的产品

        获取到 ks.cfg 文件后,利用参数进行内核注入

  • 利用已有的模板安装
    模板就是从已有的虚拟机上获取

    • *.xml 配置文件
    • *.qcow2 虚拟磁盘文件

*.xml 修改的地方有:

  • 虚拟机名称
  • UUID
  • 内存
  • 磁盘位置
  • Mac 地址的后三组数据(16 进制)

KVM虚拟机管理

一、virsh 管理虚拟机

下文中 vm-name 表示一个虚拟机的名称

1 列出正则运行中的虚拟机

virsh list

2 列出所有的虚拟机

virsh list  --all

3 查看指定虚拟机的元数据信息

virsh dominfo   vm-name

4 查看指定虚拟机的 IP 地址

virsh domifaddr  vm-name

5 启动虚拟机

virsh start vm-name

6 正常关闭虚拟机

virsh shutdown  vm-name

7 强制关闭虚拟机,相当于拔掉电源

virsh destroy vm-name

8 重启虚拟机

virsh reboot vm-name

9 从一个 xml 文件定义一个虚拟机

virsh define  vmn.xml

vmn.xml 是一个 xml 文件路径名称

10 取消定义一个虚拟机

就是删除一台虚拟机,但是虚拟机的磁盘文件会保留

virsh undefine vm-name

二、给kvm虚拟机添加硬件

1 添加内存

首先确认虚拟机处于关闭状态

[root@localhost ~]# virsh shutdown vmneko
域 vmneko 被关闭

2 设置最大可分配内存

[root@localhost ~]# virsh setmaxmem vmneko 2G

3 查看虚拟机信息

[root@localhost ~]# virsh dominfo vmneko
Id:             2
名称:       vmneko
UUID:           afdf727f-1937-4e57-af1d-8c17634c4d49
OS 类型:    hvm
状态:       running
CPU:          1
CPU 时间:   20.8s
最大内存: 1048576 KiB
使用的内存: 1048576 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

#virsh help setmem
–config 影响下一次引导
–live 影响运行的域
–current 影响当前域

4 调整内存的大小

之后就可以在虚拟机启动的情况下,给其动态的调整内存的大小(范围在最大内存容量内)

[root@localhost ~]# virsh start vmneko
域 vmneko 已开始
[root@localhost ~]# virsh dominfo vmneko
Id:             2
名称:       vmneko
UUID:           afdf727f-1937-4e57-af1d-8c17634c4d49
OS 类型:    hvm
状态:       running
CPU:          1
CPU 时间:   20.8s
最大内存: 2097152 KiB
使用的内存: 1048576 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
[root@localhost ~]# virsh setmem vmneko 2G

[root@localhost ~]# virsh dominfo vmneko
Id:             2
名称:       vmneko
UUID:           afdf727f-1937-4e57-af1d-8c17634c4d49
OS 类型:    hvm
状态:       running
CPU:          1
CPU 时间:   20.8s
最大内存: 2097152 KiB
使用的内存: 2097152 KiB

持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

三、添加硬盘

1 创建一个虚拟硬盘

[root@localhost ~]# mkdir -p /vm-pool/centos7/

[root@localhost ~]# qemu-img create -f qcow2 /vm-pool/centos7/vmneko.qcow2 2G

2 编辑一个虚拟硬盘的 xml 文件模板

[root@localhost ~]# cat disk.xml
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='writeback' io='threads'/>
  <source file='/vm-pool/centos7/vmneko.qcow2'/>
  <target dev='vdb' bus='virtio'/>
</disk>

然后使用 attach-device 命令从XML文件添加

[root@localhost ~]# virsh attach-device vmneko disk.xml --persistent

成功附加设备

[root@localhost ~]# virsh domblklist vmneko
目标     源
------------------------------------------------

vda        /home/kvm/Neko.qcow2
vdb        /vm-pool/centos7/vmneko.qcow2

3 获取硬盘信息

[root@localhost ~]# virsh domblklist vmneko | grep '^vdb'
vdb        /vm-pool/centos7/nmneko.qcow2
[root@localhost ~]# virsh domblklist vmneko | awk '/^vd/{print $1}'
vda
vdb
#!/usr/bin/bash
#此脚本用于获取下一个没有创建的硬盘
for i in {
    
    a..z}
do
  virsh domblklist vmneko | awk '/^vd/ {print $1}' | grep vd$i  &> /dev/null
  if [ $? -ne 0 ];then
    disk_name="vd$i"
    echo "vd$i"
    break
  fi
done

当前已有的虚拟机

[root@localhost ~]# virsh list --all | awk 'NR != 1 && NR !=2 {print $2}'
vmneko
vm1

4 取值

[root@localhost ~]# n=1G
[root@localhost ~]# echo ${n::-1}
1
[root@localhost ~]# n=${n::-1}
[root@localhost ~]# echo $n
1
[root@localhost ~]# echo $(( n * 1024 * 1024 ))
1048576
[root@localhost ~]# mem_size=$(( n * 1024 * 1024 ))
[root@localhost ~]# echo $mem_size
1048576
[root@localhost ~]# mem_size=$(( 2 * 1024 * 1024 ))
[root@localhost ~]# echo $mem_size
2097152
[root@localhost ~]# openssl rand -hex 3
a1b8ba
[root@localhost ~]# vm_name=`openssl rand -hex 3`
[root@localhost ~]# echo $vm_name
c6e826
[root@localhost ~]# echo $vm_name | sed -r 's/..\B/&:/g'
c6:e8:26

5 脚本

用于写的脚本,可参考,需要配合变量调取

[root@localhost lib]# cat gen-net.sh 
# 此脚本用于生成并写入新的mac地址 
add_net(){
    
    
    read -p ">>:" vm_name
    

    mac=$(openssl rand -hex 3 | sed -r 's/..\B/&:/g')
    source ./network-mod.xml > network.xml
    virsh attach-device ${vm_name} network.xml --persistent
    virsh domiflist ${vm_name}

}
[root@localhost lib]# cat many-gen.sh 
many_gen_vm(){
    
    
    # 此函数实现了利用模板创建单个虚拟机    
    vm_name=$1
    vm_mem_size=$2

    vm_disk_path=/kvm/${vm_name}.qcow2
    vm_uuid=$(uuidgen)
    vm_mac=$(openssl rand -hex 3|sed 's/..\B/&:/g')


    source ./centos7-mod.xml > ${vm_name}.xml
    
    # 创建虚拟磁盘文件
    # cp /path/to/centos7-mod.qcow2 $vm_disk_path
    # virsh define  ${vm_name}.xml

}

read -p "主机名称前缀:" s
read -p "输入创建的数量:" n

for  i in $(seq 1 $n)
do
   many_gen_vm  ${s}${i} 
done

命令自动补全

yum -y install bash-completion
yum group install "Development Tools" -y

猜你喜欢

转载自blog.csdn.net/Houaki/article/details/111060884