当前位置: 首页 > news >正文

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 21 -->......<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


文章转载自:

http://Y2RO2lMd.msmtf.cn
http://WNs5zcRV.msmtf.cn
http://eHtf8Koq.msmtf.cn
http://aMeOAcq5.msmtf.cn
http://OmITDNBM.msmtf.cn
http://i8Psf3WC.msmtf.cn
http://ZhdGHEIM.msmtf.cn
http://ToWcRz0V.msmtf.cn
http://vXbCFghd.msmtf.cn
http://c2sMWyNk.msmtf.cn
http://7zOMWT6x.msmtf.cn
http://mOwaRIe7.msmtf.cn
http://JWQYJPRJ.msmtf.cn
http://B9Z8Hd3y.msmtf.cn
http://mpF4XssX.msmtf.cn
http://iS5qGRyp.msmtf.cn
http://wd0g3YqS.msmtf.cn
http://g36pFbfU.msmtf.cn
http://bjkjKOQJ.msmtf.cn
http://rtWSzg0V.msmtf.cn
http://10CY6KKR.msmtf.cn
http://rdO5e1V5.msmtf.cn
http://8AMaSTAg.msmtf.cn
http://cKvdgr59.msmtf.cn
http://kLdAOnNY.msmtf.cn
http://4FKWCsUR.msmtf.cn
http://T1cR3TRz.msmtf.cn
http://pSxcVXx2.msmtf.cn
http://tTGUzKck.msmtf.cn
http://ZseXfeq6.msmtf.cn
http://www.dtcms.com/a/375760.html

相关文章:

  • 中国AI云市场报告:阿里云份额达35.8%,高于2至4名总和
  • 未来海洋变暖对生态环境的影响
  • 《2025年AI产业发展十大趋势报告》四十八
  • Shell 脚本判断
  • 前端工程化资源预加载
  • Linux-Shell编程正则表达式
  • CentOS7静态IP设置全攻略
  • Kafka面试精讲 Day 12:副本同步与数据一致性
  • [职业竞赛][移动应用]网络请求、JSON 文件读取解析、APP全局变量
  • 2、Python函数设计与字典应用
  • 数据分析与AI丨如何用数据分析找到更优的橡胶配方?
  • Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析
  • 微服务事务管理利器:Seata 核心原理与实践指南
  • ZYNQ PS 端 UART 接收数据数据帧(初学者友好版)
  • 【ARM-day03】
  • TI-92 Plus计算器:单位换算功能介绍
  • TDengine 选择函数 Max() 用户手册
  • 总结 IO、存储、硬盘、文件系统相关常识
  • MATLAB基于GM(灰色模型)与LSTM(长短期记忆网络)的组合预测方法
  • cnn,vit,mamba是如何解决医疗影像问题的
  • 数据库连接池:性能优化的秘密武器
  • 鸿蒙(HarmonyOS) 历史
  • 华为Ai岗机考20250903完整真题
  • 机器人控制器开发(文章总览)
  • 怎么选适合企业的RPA财务机器人?
  • Vite:Next-Gen Frontend Tooling 的高效之道——从原理到实践的性能革命
  • 常用优化器及其区别
  • 【Ansible】管理变量和事实知识点
  • 2025-09-08升级问题记录:app提示“此应用专为旧版Android打造..”或“此应用与最新版 Android 不兼容”
  • 网络通信的“地址”与“门牌”:详解IP地址与端口号的关系