libvirt, virsh

  • libvirt
  • virsh: command line utility

archlinux

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
sudo pacman -S libvirt  virt-install
sudo pacman -S iptables-nft dnsmasq dmidecode

systemctl status libvirtd
sudo systemctl enable libvirtd --now
sudo systemctl enable virtlogd --now
sudo systemctl enable virtlockd --now


sudo usermod -a -G libvirt wiloon

# test
virsh -c qemu:///system
virsh pool-list --all

virsh pool-define-as pool0 dir - - - - /home/wiloon/workspace/libvirtPool
virsh pool-build pool0
virsh pool-start pool0
virsh pool-autostart pool0
virsh help pool
virsh help pool-autostart
virsh pool-autostart pool0 --disable
# remove pool
virsh pool-destroy pool0
virsh pool-undefine  poolname

virsh list --all

sudo virsh net-list --all
sudo virsh net-start default

vim /etc/libvirt/qemu.conf

1
2
user = "root"
group = "root"

restart libvirtd

1
systemctl restart libvirtd
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# memory=2GB, disk=20GB
virt-install  \
  --name ubuntu0 \
  --memory 2048             \
  --vcpus=2      \
  --cpu host                \
  --cdrom /home/tmp/ubuntu-22.04.3-live-server-amd64.iso \
  --disk path=/home/tmp/libvirtDisk/ubuntu0.raw,size=20,format=raw  \
  --network network:bridged-network \
  --virt-type kvm \
  --graphics vnc,password=123456,port=5900,listen=0.0.0.0 \
  --noautoconsole \
  --osinfo ubuntu22.04
 
virt-install  \
    --name ubuntu1 \
    --memory 2048 \
    --vcpus=2 \
    --cpu host \
    --cdrom /home/tmp/ubuntu-22.04.3-live-server-amd64.iso \
    --disk path=/home/tmp/libvirtDisk/ubuntu1.raw,size=20,format=raw  \
    --network network:bridged-network \
    --virt-type kvm \
    --graphics vnc,password=123456,port=5901,listen=0.0.0.0 \
    --noautoconsole
 
virt-install \
--name=foo --ram 2048 --vcpus=1 \
--disk path=/root/tmp/foo.raw,size=10,format=raw,bus=virtio \
--cdrom=/root/tmp/archlinux-2022.03.01-x86_64.iso \
--network network:default \
--graphics vnc,password=123456,port=5900,listen=0.0.0.0 \
--noautoconsole

# --connect qemu:///system    作用未知...
# --noautoconsole 禁止自动连接至虚拟机的控制台 安装不会自动代开virt-viewer来查看控制台已完成安装。这对远程使用SSH系统有用。
# --graphics vnc,listen=0.0.0.0 vnc 默认端口5900

install vnc

1
2
pacman -S tigervnc 
vncviewer 10.1.10.2:1

参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--name    #虚拟机名称
--ram     #分配给虚拟机的内存,单位MB
--vcpus   #分配给虚拟机的cpu个数
--cdrom   #指定CentOS镜像ISO文件路径
--disk    #指定虚拟机raw文件路径
  size    #虚拟机文件大小,单位GB
  bus     #虚拟机磁盘使用的总线类型,为了使虚拟机达到好的性能,这里使用virtio
  cache   #虚拟机磁盘的cache类型
--network bridge    #指定桥接网卡
   model            #网卡模式,这里也是使用性能更好的virtio
--graphics          #图形参数

命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 编辑虚拟机xml文件
virsh edit <虚拟机名称> 
                     
virt-install --osinfo list
virsh list                                  # 查看活动虚拟机状态
virsh list --all                            # 查看所有虚拟机状态, 包括已经关闭的
virsh start <虚拟机名称>                     # 启动一个之前已经定义define过的虚拟机(domain)
virsh shutdown <虚拟机名称>                  # 关闭虚拟机,类似虚拟机内执行关机
virsh destroy <虚拟机名称>                   # 强制关闭虚拟机,类似于断电
virsh undefine <虚拟机名称>                  # 对于运行中的持久性虚拟机,将状态转换为暂时的,关机后virsh无法感知其存在
                                            # 对于非活动的虚拟机,undefine后virsh将无法感知其存在
                                            # undefine后磁盘依然存在,只是删除虚拟机的配置文件/etc/libvirt/qemu
virsh undefine <虚拟机名称> --remove-all-storage    # 删除虚拟机并删除所有磁盘文件
virsh define <虚拟机xml文件>                 # 从xml文件定义define新的domain,不会自动启动
virsh dumpxml <虚拟机名称>                   # 查看虚拟机xml文件

virsh help                                  # 查看帮助信息
virsh version                               # 查看qemu版本
virsh help <特定命令>                       # 查看特定命令帮助信息
virsh <特定命令> --help                     # 查看特定命令帮助信息
virsh nodeinfo                              # 查看宿主机信息
virsh uri                                  # 查看当前主机hyperviso的连接路径;
virsh connect <hypervisor uri>             # 连接到特定hypervisor,默认qemu:///system
virsh sysinfo                               # 查看hypervisro信息


virsh reboot <虚拟机名称>                    # 重启虚拟机

virsh suspend <虚拟机名称>                   # 挂起虚拟机,将当前状态保存在内存中
virsh resume <虚拟机名称>                    # 恢复虚拟机挂起状态,从内存中恢复虚拟机状态
virsh save <虚拟机名称> <img镜像文件名>        # 暂停虚拟机,将虚拟机状态保存在磁盘镜像文件中
virsh restore <img镜像文件名>               #重新载入暂停的虚拟机
virsh autostart <虚拟机名称>                 # 虚拟机随着物理机启动自动启动
virsh autostart <虚拟机名称> --disable       # 禁止开机启动
virsh dominfo <虚拟机名称>                   # 查看虚拟机domain信息
virsh domblklist <虚拟机名称>                # 列出虚拟机所有块存储设备
virsh console <虚拟机名称>                   # 控制台连接虚拟机


virsh managedsave <虚拟机名称>               # 保存状态save并关闭虚拟机,下次启动会恢复到之前保存的状态
virsh start <虚拟机名称>                     # 启动并恢复managedsave保存的状态
virsh reset <虚拟机名称>                     # 对虚拟机执行强制重启,类似重置电源按钮
virsh create <虚拟机xml文件>                 # 从xml文件中创建domain,创建完成后会自动启动;
                                            # 一个xml对应一个domain虚拟机

virsh snapshot-create-as <虚拟机名称> --name <快照名称>      # 从命令行创建快照
virsh snapshot-create <虚拟机名称>                          # 从xml文件创建快照
virsh snapshot-list <虚拟机名称>                            # 查看虚拟机快照列表
virsh snapshot-parent <虚拟机名称> --current                # 查看当前快照的上一级快照
virsh snapshot-edit <虚拟机名称> --snapshotname <快照名>     # 编辑快照
virsh snapshot-revert <虚拟机名称> --snapshotname <快照名>   # 恢复快照
virsh snapshot-delete <虚拟机名称> --snapshotname <快照名>   # 删除快照

virsh setvcpus <虚拟机名称> 4 --maximum --config # 设置最大vcpu数(只能用--config,下次运行生效)
virsh setvcpus <虚拟机名称> 4 --config           # 下次启动使用vcpu数
virsh vcpuinfo <虚拟机名称>                      # 查看vcpu信息
virsh vcpupin <虚拟机名称>                       # 查询域 vcpu亲和性,即vcpu和物理cpu之间关系
virsh maxvcpus                                 # 显示本机vcpu最大值

virsh setmaxmem <虚拟机名称> [--size] 2G --current  # 设置最大内存限制值
virsh setmem <虚拟机名称> [--size] 2G --current     # 设置内存分配


virsh domblklist cirros                         # 查看虚拟机的存储块设备

创建磁盘文件
#qcow2是文件类型,test1-add1.qcow2是磁盘文件,5G是大小
qemu-img create -f qcow2 /var/lib/libvirt/images/test1-add1.qcow2 5G
qemu-img info <虚拟机镜像>           # 查看镜像信息


virt-install <命令行>  # 通过命令行指定来创建虚拟机

virsh attach-disk <虚拟机名称> 
virsh attach-device <虚拟机名称> /etc/libvirt/qemu/test2-add.xml --persistent        # 从XML文件附加设备
virsh detach-device <虚拟机名称> /etc/libvirt/qemu/test2-add.xml --persistent        # 卸载设备   

https://linux.die.net/man/1/virt-install

虚拟机改名

1
2
3
4
5
cd /etc/libvirt/qemu
virsh dumpxml  kvm_client00 > kvm_00.xml
vim kvm_00.xml
virsh undefine foo
virsh define /etc/libvirt/qemukvm_00.xml 

http://www.cnblogs.com/5201351/p/4464350.html

调整内存

1
2
3
4
5
virsh shutdown vm0
sudo virsh setmaxmem vm0 16G
virsh start vm0
virsh setmem vm0 16G

———————————————— 版权声明:本文为CSDN博主「tom马」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/mshxuyi/article/details/98305715

centos6

1
2
3
4
5
6
7
8
virt-install \
--name=centos6 --ram 2048 --vcpus=2 \
--disk path=/home/michael/centos6.raw,size=20,format=raw,bus=virtio \
--cdrom=/home/michael/CentOS-6.10-x86_64-minimal.iso \
--network network:default \
--graphics vnc,port=5901,listen=0.0.0.0 \
--noautoconsole

bridged networking

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
virsh net-list --all
virsh net-edit default
ip link show type bridge

# 虚拟机启动之后能看到虚拟机的网卡
ip link show master virbr0

pacman -S bridge-utils

ip link add br0 type bridge
ip link set dev br0 up
ip link set enp0s29u1u1 master br0

# delete ip on enp0s20f0u2
ip addr flush enp0s20f0u2
ip address add dev br0 192.168.50.17

# Making the configuration persistent
vim /etc/sysctl.d/99-netfilter-bridge.conf

# content of 99-netfilter-bridge.conf
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

modprobe br_netfilter

vim /etc/modules-load.d/br_netfilter.conf

# content of br_netfilter.conf

br_netfilter

sysctl -p /etc/sysctl.d/99-netfilter-bridge.conf

bridged-network.xml

1
2
3
4
5
<network>
    <name>bridged-network</name>
    <forward mode="bridge" />
    <bridge name="br0" />
</network>
1
2
3
4
virsh net-define bridged-network.xml
virsh net-start bridged-network
virsh net-autostart bridged-network
virsh net-list

https://linuxconfig.org/how-to-use-bridged-networking-with-libvirt-and-kvm