0%

virsh常用命令

前言

本文中会整理一些工作学习中常用的virsh命令,备忘。

参考文档:

创建虚拟机

本节以创建ubuntu18.04.6的虚拟机为例,ubuntu镜像下载地址为Ubuntu Release

常规创建

1、下载镜像

1
2
cd /opt/iso/
wget https://releases.ubuntu.com/18.04.6/ubuntu-18.04.6-live-server-amd64.iso

2、创建虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
virt-install \
--virt-type=kvm \
--name=ubuntu18.04 \
--vcpus=2 \
--ram=4096 \
--cdrom=/opt/iso/ubuntu-18.04.6-live-server-amd64.iso \
--disk path=/opt/kvm/ubuntu18.04.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=100 \
--network default,model=virtio \
--os-type=linux \
--os-variant=ubuntu18.04 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole \
--accelerate

model=virtio 可以换成 model=e1000或者model=rtl8139
但是这里建议使用virtio,因为使用virtio要比使用e1000或者rtl8139网络吞吐性能要高出2倍左右。

详情参考:

3、查看虚拟机

1
2
virsh list
virsh list --all

4、查看vnc端口

1
virsh vncdisplay ubuntu18.04

使用vnc client连接虚拟机完成安装。

单独创建磁盘

1
2
3
qemu-img create -f qcow2 /opt/kvm/ubuntu18.04.qcow2  100G

virt-install --disk path=/opt/kvm/ubuntu18.04.qcow2 ...

使用桥接

1
2
3
4
ifconfig
ip a

virt-install --network bridge=br0,model=virtio ...

查看虚拟机IP

方法一:通过VNC登录虚拟机后查看

方法二:通过mac地址查看

1
2
3
4
nmap -sP 192.168.56.0/24
virsh dumpxml ubuntu18.04 | grep "mac a"
arp -a | grep grep "52:54:00:46:98:a7"
cat /proc/net/arp | grep "52:54:00:46:98:a7"

网络优化

vhost-net是对virtio的优化,在内核中加入了vhost-net.ko模块,使得对网络数据可以在内核态得到处理。
数据包从虚拟网卡出来后,直接跳到内核那一层中。这里要注意的是,如果要使用vhost-net那么,虚拟机的网卡类型必须是virtio。

1
2
virsh destroy ubuntu18.04
virsh edit ubuntu18.04

添加dirver配置:

1
2
3
4
5
6
7
<interface type='bridge'>
<mac address='52:54:00:46:98:a7'/>
<source bridge='br0'/>
<model type='virtio'/>
<driver name='vhost'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

修改虚拟机配置

安装virt-customize

1
yum -y install libguestfs-tools

关闭虚拟机

1
virsh shutdown ubuntu18.04

在使用virt-customize修改虚拟机配置之前,需要先关闭虚拟机,否则修改不会生效,还可能发生非预期问题。

修改主机名

1
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --hostname node01

启用root ssh登录

1
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --run-command 'echo "PermitRootLogin yes" >> /etc/ssh/sshd_config'

修改root密码

1
2
3
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --root-password password:voidking
# or
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --password root:voidking

添加authorized_keys

1
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --ssh-inject root:string:"ssh-rsa xxx vk@macpro.lan"

安装软件包

1
2
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --install vim,wget,curl,unzip
virt-customize -v -x -a /opt/kvm/ubuntu18.04.qcow2 --install vim,wget,curl,unzip

手动配置静态IP

ubuntu18之前在/etc/network/interfaces进行配置,ubuntu18及之后版本在/etc/netplan/*.yaml中进行配置。

提前手动配置好一台虚拟机的静态IP,然后,其他的克隆出来的主机可以使用virt-customize调用sed命令修改IP。

1、查看当前网关

1
2
3
route -n
ip route
netstat -rn

2、配置静态IP
配置 /etc/netplan/00-installer-config.yaml 内容为:

1
2
3
4
5
6
7
8
9
10
# This is the network config written by 'subiquity'
network:
version: 2
ethernets:
ens3:
dhcp4: false # 禁止动态IP
addresses: [192.168.56.200/24] # IP地址和掩码
gateway4: 192.168.56.1 # 网关
nameservers:
addresses: [192.168.56.1,114.114.114.114] #DNS服务器

3、使配置生效

1
2
netplan apply
ip a

手动配置静态IP2.0

1、提前准备 00-installer-config.yaml 内容为:

1
2
3
4
5
6
7
8
9
10
# This is the network config written by 'subiquity'
network:
version: 2
ethernets:
ens3:
dhcp4: false # 禁止动态IP
addresses: [192.168.56.200/24] # IP地址和掩码
gateway4: 192.168.56.1 # 网关
nameservers:
addresses: [192.168.56.1,114.114.114.114] #DNS服务器

2、拷贝到宿主机

1
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --copy-in 00-installer-config.yaml:/etc/netplan/00-installer-config.yaml

自动配置静态IP

1
virt-customize -a /opt/kvm/ubuntu18.04.qcow2 --run-command "sed -i \"s#addresses: \[.*/24\]#addresses: \[192.168.56.201/24\]#\" /etc/netplan/00-installer-config.yaml"

启停虚拟机

1、停止虚拟机

1
2
3
4
# smooth shutdown
virsh shutdown ubuntu18.04
# forced shutdown
virsh destroy ubuntu18.04

2、开启虚拟机

1
virsh start ubuntu18.04

销毁虚拟机

1
2
3
4
5
6
7
virsh list --all
virsh destroy ubuntu18.04
virsh snapshot-list ubuntu18.04
virsh snapshot-delete ubuntu18.04 1627446728
virsh undefine ubuntu18.04
#rm /etc/libvirt/qemu/ubuntu18.04.xml
rm /opt/kvm/ubuntu18.04.qcow2

开机自动启动

1
2
virsh autostart ubuntu18.04
virsh autostart --disable ubuntu18.04

调整虚拟机CPU和内存

1
2
virsh destroy ubuntu18.04
virsh edit ubuntu18.04

调整相关配置:

1
2
3
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>2</vcpu>

这里需要注意的是,vcpu的最小值是1,详情参考CPU Allocation

根据xml导出创建虚拟机的命令

1
2
virsh list --all
virsh dumpxml ubuntu18.04 > ubuntu18.04.xml

克隆虚拟机

1
2
3
virt-clone -o ubuntu18.04 -n ubuntu18.04-tmp -f /opt/kvm/ubuntu18.04-tmp.qcow2
virsh dominfo ubuntu18.04-tmp
virsh domstate ubuntu18.04-tmp

拷贝虚拟机到其他宿主机

1、拷贝虚拟机磁盘文件和配置文件

1
2
scp /opt/kvm/ubuntu18.04.qcow2 192.168.56.102:/opt/kvm/ubuntu18.04.qcow2
scp /etc/libvirt/qemu/ubuntu18.04.xml 192.168.56.102:/etc/libvirt/qemu/ubuntu18.04.xml

2、拉起虚拟机

1
2
3
4
ssh 192.168.56.102
virsh define /etc/libvirt/qemu/ubuntu18.04.xml
virsh list --all
virsh start ubuntu18.04

PS:临时拉起虚拟机

1
virsh create /etc/libvirt/qemu/ubuntu18.04.xml

虚拟机迁移

参考文档《使用Libvirt进行虚拟机在线迁移》

虚拟机扩容磁盘

参考文档:

给虚拟机增加磁盘

1
2
3
virsh domblklist ubuntu18.04-tmp
qemu-img info /opt/kvm/ubuntu18.04-tmp.qcow2
qemu-img resize /opt/kvm/ubuntu18.04-tmp.qcow2 +20G

PS:qcow2镜像不支持缩容。

扩容分区

centos虚拟机内部执行

1
2
3
4
yum install -y cloud-utils-growpart
LANG=en_US.UTF-8
fdisk -l
growpart /dev/vda 2

ubuntu/debian虚拟机内部执行

1
2
3
4
apt-get install -y cloud-guest-utils
LANG=en_US.UTF-8
fdisk -l
growpart /dev/vda 2

扩容文件系统

centos虚拟机内容执行

1
2
3
4
5
df -ihT
# ext2/ext3/ext4
resize2fs /dev/vda2
# xfs
xfs_growfs /dev/vda2

裸数据盘扩容文件系统

所谓裸数据盘,就是没有分区的数据盘。

1
2
3
4
5
df -ihT
# ext2/ext3/ext4
resize2fs /dev/vdb
# xfs
xfs_growfs /dev/vdc

虚拟机增加磁盘

1
2
3
virsh destroy ubuntu18.04-tmp
qemu-img create -f qcow2 /opt/kvm/ubuntu18.04-tmp_ext.qcow2 100G
virsh edit ubuntu18.04-tmp

disk部分添加:

1
2
3
4
5
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/kvm/ubuntu18.04-tmp_ext.qcow2'/>
<target dev='vdb' bus='virtio'/>
</disk>

磁盘格式化和挂载参考《VirtualBox中Ubuntu扩容》

  • 本文作者: 好好学习的郝
  • 本文链接: https://www.voidking.com/dev-virsh-command/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!源站会及时更新知识点及修正错误,阅读体验也更好。欢迎分享,欢迎收藏~