virsh常用命令 笔记
自定义qcow2镜像
mkdir /data && cd /data
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2
cp debian-12-genericcloud-amd64.qcow2 vm1.qcow2
调整qcow2磁盘大小和文件系统
# 这里设置为20G
qemu-img resize /data/vm1.qcow2 20G
# 加载 nbd 模块
modprobe nbd max_part=16
# 挂载磁盘到/dev/nbd0
qemu-nbd -c /dev/nbd0 /data/vm1.qcow2
# 安装growpart工具(redhat系安装cloud-utils-growpart)
apt install -y cloud-guest-utils
# 查看系统盘分区是第几个,我这里是第1个
fdisk -l
# 扩容系统盘分区
LC_ALL=en_US.UTF-8 growpart /dev/nbd0 1
# 断开磁盘挂载
qemu-nbd -d /dev/nbd0
# 卸载nbd模块
rmmod nbd
自定义系统(root密码、时区、软件源等)
# 先使用openssl生成个root用户的密码,备用
openssl passwd -1 123456
# 安装guestfish工具
apt install guestfish
# 使用guestfish编辑qcow2镜像内的文件
guestfish --rw -a /data/vm1.qcow2
进入guestfish执行
Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.Type: ‘help’ for help on commands‘man’ to read the manual‘quit’ to quit the shell# 执行run
><fs> run
# 列出文件系统
><fs> list-filesystems
/dev/sda1: ext4
/dev/sda14: unknown
/dev/sda15: vfat
# 挂载系统分区,我这里是第一个sda1
><fs> mount /dev/sda1 /
# 修改root密码, 把第一行root:*:19724:0:99999:7:::中的星号*(可能是其他字符)改为上面openssl生成的密码
><fs> vi /etc/shadow
# 修改sshd配置开启密码登录,把PasswordAuthentication值改为yes
><fs> vi /etc/ssh/sshd_config
# 添加dhcp网络配置(这个debian镜像默认用systemd-networkd来管理网络,其他镜像要看用的哪个网络管理工具,也可以进入虚机后修改)
><fs> vi /etc/systemd/network/20-dhcp.network
# 内容如下
[Match]
Name=enp*
[Network]
DHCP=yes
# 修改时区为Shanghai
><fs> rm /etc/localtime
><fs> ln /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 修改apt软件源,不同debian版本的配置路径可能不一样,这里忽略
><fs> vi /etc/apt/mirrors/****
# 退出编辑qcow2文件
><fs> quit
创建虚拟机
定义xml
新建文件/data/vm1.xml,内容如下:
<domain type='kvm'><name>vm1</name> <!-- 虚拟机名称--><memory unit='GiB'>1</memory> <!-- 1G内存--><vcpu>1</vcpu> <!-- 1个CPU --><os><type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type><boot dev='hd'/></os><features> <!-- 开启处理器特性 --><acpi/><apic/><pae/></features><devices><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/data/vm1.qcow2'/> <!-- qcow2镜像文件路径 --><target dev='vda' bus='virtio'/></disk><interface type='bridge'><mac address='xx:xx:xx:xx:xx:xx'/> <!-- 定义一个mac地址,不要重复,可以删除这行,自动会生成 --><source bridge='virbr0'/> <!-- default网卡的bridge名称,和宿主机网桥名称一致 --><model type='virtio'/></interface><console type='pty'><target type='serial' port='0'/></console><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' passwd='123456'> <!-- 定义VNC密码为123456 --></graphics></devices>
</domain>
启动虚拟机
# 定义虚拟机vm1
virsh define vm1.xml
# 查看所有
virsh list --all
# 启动vm1
virsh start vm1
连接虚拟机
virsh console连接
# 连接后敲回车,会提示输入root和密码
virsh console vm1
vnc连接,先查看自动分配的vnc端口号,然后使用vnc工具连接宿主机ip:vnc端口号
virsh dumpxml vm1
输出内容中看到端口号为5900
...
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/>
</graphics>
...
修改好ip后,防火墙放行,修改SSH配置文件后,可执行ssh命令连接
ssh root@x.x.x.x
其他操作
添加磁盘
创建一个10G的qcow2文件
qemu-img create -f qcow2 /data/disk1.qcow2 10G
把磁盘disk1.qcow2连接到虚拟机vm1
virsh attach-disk vm1 /data/disk1.qcow2 vdb --subdriver qcow2 --persistent
# vdb 指定的设备名
# --subdriver qcow2 不填的话默认是raw格式
# --persistent 持久生效(更新了配置文件)
注意:定义xml文件时,需要开启以下处理器特性,才能支持热插拔,否则执行attach-disk会报错
...
<features><acpi/><apic/>
</features>
...
查看vm1的blk列表中多了vdb
virsh domblklist vm1
# 结果Target Source
-----------------------------vda /data/vm1.qcow2vdb /data/disk1.qcow2
接着进入虚拟机,创建分区并挂载磁盘
# 连接vm1,输入用户密码后进入
virsh console vm1
# 查看磁盘信息,有一块`/dev/vdb`
fdisk -l
# 对vdb进行分区
fdisk /dev/vdb
# 输入p,回车,查看分区情况
# 输入n,回车,开始分区
# 无特殊情况的话,后面都是回车,用默认值即可
# 最后输入w,回车,写入分区表,分区完成
#创建ext4文件系统
mkfs -t ext4 /dev/vdb1
# 新建目录/data
mkdir /data
# 挂载目录
mount /dev/vdb1 /data
# 编辑fstab
/dev/vdb1 /data ext4 default 0 0
移除磁盘
# 取消挂载目录(虚拟机执行)
umount /data1
# 分离磁盘vdb(宿主机执行)
virsh detach-disk vm1 vdb --persistent
修改vnc密码
把虚拟机vm1的vnc密码改为456789
virsh qemu-monitor-command vm1 --cmd '{"execute": "change-vnc-password", "arguments": {"password": "456789"}}'
另外一种方式安装部署虚拟机:
虚拟机需要独立的存储空间,我们使用qemu-img工具创建一个qcow2格式的磁盘镜像:
# 创建20GB大小的动态分配磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/debian12.qcow2 20G
# 验证磁盘创建
qemu-img info /var/lib/libvirt/images/debian12.qcow2
创建xml配置文件,保存为debian-vm.xml 内容如下:
<domain type='kvm'><name>debian12</name><memory unit='GiB'>1</memory><vcpu>1</vcpu><os><type arch='x86_64' machine='q35'>hvm</type><boot dev='cdrom'/></os><features><acpi/><apic/><vmport state='off'/></features><cpu mode='host-model' check='partial'/><clock offset='utc'/><on_poweroff>destroy</on_poweroff><on_reboot>restart</on_reboot><on_crash>destroy</on_crash><devices><emulator>/usr/bin/qemu-system-x86_64</emulator><!-- 磁盘配置,就是前面创建的qcow2文件目录 --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/debian12.qcow2'/><target dev='vda' bus='virtio'/><capacity unit='GiB'>20</capacity></disk><!-- ISO 光盘,镜像提前下载好放到对应目录 --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/path/to/debian-12.5.0-amd64-DVD-1.iso'/><target dev='sda' bus='sata'/><readonly/></disk><!-- 网络配置,同宿主机virtio网桥名称 --><interface type='network'><source network='default'/><model type='virtio'/></interface><!-- 图形和输入VNC或者用X11 2选1 -->......<graphics type='vnc' port='-1' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询......<graphics type='spice' port='-1' autoport='yes' listen='127.0.0.1'><listen type='address' address='127.0.0.1'/></graphics><input type='tablet' bus='usb'/><video><model type='qxl' ram='65536' vram='65536' heads='1' primary='yes'/></video></devices>
</domain>
启动并使用virsh管理虚拟机
#创建虚拟机
virsh create debian-vm.xml
#virt-viewer连接进行安装
virt-viewer debian12
# 安装完成后编辑xml文件,移除 <boot dev='cdrom'/>
virsh edit debian12
性能优化:在XML配置中添加CPU模式和缓存设置
# 使用主机cpu信息
<cpu mode='host-passthrough' check='none'/>
常用操作https://blog.csdn.net/justlpf/article/details/126742876