KVM更换br0网桥,挂载磁盘以及开机自动挂载

发布时间:2026/7/17 20:44:23
KVM更换br0网桥,挂载磁盘以及开机自动挂载 KVM 更换br0网桥挂载磁盘以及开机自动挂载1、KVM更换br0网桥在学习工作当中如果想从宿主机克隆一台虚拟机挂载到本地局域网地址做对外服务比如说NGINX、MYSQL等等。但是虚拟机用的默认虚拟网卡 virbr0 无法对外提供服务怎么办我们可以在宿主机搭建 br0 网桥再给虚拟机修改为桥接模式。一、确认宿主机信息ipa# 查看物理网卡名比如 enp1s0、ens33 等iproute# 查看网关地址注意下面所有命令里的eno1enp1s0是我的宿主机和虚拟机网卡名真实情况替换成你自己的IP/网关同样。二、在宿主机创建网桥创建网桥并配置静态IP# 1. 创建网桥 br0nmcli connectionaddtypebridge ifname br0 con-name br0# 2. 给网桥配置静态IP替换成你宿主机的内网IP、掩码、网关、DNSnmcli connection modify br0\ipv4.method manual\ipv4.addresses10.10.30.9/24\ipv4.gateway10.10.30.1\ipv4.dns10.10.30.1 114.114.114.114# 3. 把物理网卡绑定到网桥作为网桥的从网卡nmcli connectionaddtypebridge-slave ifname enp2s0 master br0 con-name br0-slave-eno1# 4. 启用网桥配置执行后宿主机IP会切换到br0远程SSH会短暂断连重连即可nmcli connection up br0 nmcli connection up br0-slave-eno1验证网桥是否生效重连 SSH 后执行ipa show br0能看到物理网卡eno1状态为master br0, br0的inet 10.10.30.9/24说明网桥配置成功。三、修改虚拟机网卡为桥接模式必须先关闭虚拟机再修改网卡配置避免异常。关闭目标虚拟机virshshutdownRocky10-node02等待虚拟机完全关机virsh list --all看到虚拟机状态为shut off后继续下一步替换网卡模式NAT -- 桥接# 删除原有的 NAT 模式网卡绑定 virbr0virt-xml Rocky10-node02 --remove-device--network# 新增桥接模式网卡绑定 br0使用 virtio 高性能驱动virt-xml Rocky10-node02 --add-device--networkbridgebr0,modelvirtio我在做这一步的时候报错了经过查询才知道--network后要匹配网卡参数2.1一键删除虚拟机所有网卡如果虚拟机只有一块网卡那么参数可以用all即删除虚拟机所有网卡virt-xml Rocky10-node02 --remove-device--networkall但是如果虚拟机有多块网卡还是要指定网卡 MAC 的方法删除更精准2.2指定 MAC 精准删除多网卡场景查看网卡 MAC 地址virshdumpxml Rocky10-node02|grep-A5interface2.3替换网卡模式再次# 删除原有的 NAT 模式网卡绑定 virbr0virt-xml Rocky10-node02 --remove-device--networkmac52:54:00:af:93:bd# 新增桥接模式网卡绑定 br0使用 virtio 高性能驱动virt-xml Rocky10-node02 --add-device--networkbridgebr0,modelvirtio三、 启动虚拟机VNC控制台配置内网静态IP启动虚拟机virshstart Rocky10-node02进入宿主机控制台打开VNC网卡更换后原 virbr0 的 IP 会失效通过 VNC 控制台连接虚拟机虚拟机网卡名是enp1s0执行以下命令配置内网IPnmcli connection modify enp1s0\ipv4.method manual\ipv4.addresses10.10.30.6/24\ipv4.gateway10.10.30.1\ipv4.dns10.10.30.1 114.114.114.114# 重启网卡使配置生效nmcli connection up enp1s0虚拟机内验证网络# 确认IP已生效ipa show enp1s0# 测试网关连通性ping10.10.30.1-c2# 测试外网连通性pingbaidu.com-c22、虚拟机挂载磁盘目标新建 50G qcow2 磁盘附加到虚拟机在虚拟机内部格式化/etc/fstab 永久挂载一、宿主机操作存放磁盘的标准目录# 进入虚拟机磁盘存储目录一般为 /var/lib/libvirt/images/# 我习惯把它放在挂载数据目录 /Data/kvm/img/ 中cd/Data/kvm/img/# 创建50G qcow2 磁盘文件名 node02-data.qcow2qemu-img create-fqcow2 node02-data.qcow2 50G参数说明-f qcow2指定镜像格式50G最大容量50GB稀疏文件实际占用随数据增长。将磁盘设备附加到虚拟机node02无需关机# 执行附加盘符vdb原系统盘vdavirshattach-disk\--domainRocky10-node02\--source/Data/kvm/img/node02-data.qcow2\--targetvdb\--targetbusvirtio\--driverqemu\--subdriverqcow2\--cachewriteback\--persistent参数解释virsh attach-disk \命令本体virsh 是 libvirt 虚拟化的命令行管理工具attach-disk 是子命令功能为「给虚拟机挂载 / 新增磁盘设备」支持在线热插拔。--domain Rocky10-node02 \参数作用指定目标虚拟机名称也就是你要给哪台虚拟机加磁盘。取值逻辑必须和 virsh list 里显示的虚拟机名称完全一致。--source /Data/kvm/img/node02-data.qcow2 \参数作用指定宿主机上的磁盘镜像文件绝对路径也就是这块虚拟磁盘对应的实体文件存在宿主机的哪个位置。对应 XML注意必须使用绝对路径且文件必须提前创建好。--target vdb \参数作用指定虚拟机内部识别到的磁盘设备名。取值逻辑virtio 总线的磁盘统一以 vd 开头系统盘默认是 vda第二块数据盘命名为 vdb第三块为 vdc以此类推。对应 XML效果虚拟机内部执行 lsblk 会看到 /dev/vdb 这块新磁盘。--targetbus virtio \参数作用强制指定磁盘使用 virtio-blk 高性能半虚拟化总线。对应 XML为什么必须显式写如果不指定部分环境会默认使用 ide/sata 兼容总线IO 性能会下降数倍显式声明可以杜绝兼容漂移保证性能。--driver qemu \参数作用声明磁盘的后端虚拟化驱动名称。对应 XML固定取值KVM 环境下底层由 qemu 负责硬件模拟所以固定填 qemu。之前报错根源前几次错误地把 qcow2、file 填给了这个参数驱动名只能是 qemu不能是镜像格式或源类型。--subdriver qcow2 \参数作用指定磁盘镜像的格式子驱动告诉 libvirt 源文件是 qcow2 格式需要用 qcow2 驱动解析。对应 XML为什么必须写不声明的话 libvirt 可能默认按 raw 裸格式识别会导致磁盘容量异常、快照功能失效。--cache writeback \参数作用设置磁盘的缓存策略。对应 XMLwriteback 含义回写模式数据先写入宿主机内存缓存再异步刷入物理磁盘IO 性能更好是生产数据盘的常用平衡选项。其他可选值writethrough直写性能低但数据安全性更高、none无缓存纯透传。--persistent参数作用将本次磁盘配置永久写入虚拟机的 XML 配置文件。不加的后果但磁盘仅临时生效但虚拟机重启后会自动消失适合临时测试场景加上的效果虚拟机重启、宿主机重启后这块磁盘都会自动挂载和手动编辑 XML 冷配置的效果完全一致。可选关机冷插拔# 关闭虚拟机virshshutdownnode02# 编辑虚拟机硬件配置virshedit node02# 在devices块内插入这段磁盘配置disktypefiledevicediskdrivernameqemutypeqcow2cachewriteback/sourcefile/var/lib/libvirt/images/node02-data.qcow2/targetdevvdbbusvirtio/addresstypepcidomain0x0000bus0x00slot0x07function0x0//disk# 保存退出后启动虚拟机virshstart node02执行后验证配置是否正确# 查看虚拟机已挂载的所有磁盘virshdomblklist Rocky10-node02二、进入虚拟机 node02 操作分区、格式化、挂载思路把/dev/vdb数据盘制作成LVM逻辑卷 挂载到/Data后续空间不足可以在线无损扩容无需卸载、无需重启。当前/dev/vdb是50G 空白磁盘无分区、无数据# 确认lvm工具已安装Rocky默认自带缺失则安装yuminstall-ylvm2# 确认磁盘存在lsblk /dev/vdb创建 GPT 分区并标记为 LVM 类型# 1. 创建GPT分区表parted/dev/vdb mklabel gpt-s# 2. 创建单个主分区占满全部空间parted/dev/vdb mkpart primary xfs0%100%-s# 3. 将分区1标记为LVM类型核心否则无法做物理卷parted/dev/vdbset1lvm on-s# 4. 刷新内核分区表无需重启partprobe /dev/vdb验证lsblk /dev/vdb# 输出应包含 vdb1 分区创建物理卷 PVPhysical Volumepvcreate /dev/vdb1验证pvs# 输出能看到 /dev/vdb1 为PV大小50G创建卷组 VG Volume Group将 PV 加入一个卷组后续新增磁盘都可以放进这个卷组进行扩容。这里命名为vg_datavgcreate vg_data /dev/vdb1验证vgs# 输出 vg_data 总大小50G剩余空间50G创建逻辑卷 LVLogical Volume从卷组里规划出空间生成可格式化、可挂载的逻辑卷。这里直接把卷组全部 50G 空间划归逻辑卷命名为lv_data# -l 100%FREE使用卷组全部剩余空间# -n lv_data指定逻辑卷名称lvcreate-l100%FREE-nlv_data vg_data验证lvs# 输出 lv_data 大小50G归属vg_data将磁盘格式化为 XFS 文件系统mkfs.xfs /dev/mapper/vg_data-lv_data验证blkid /dev/mapper/vg_data-lv_data# 输出 TYPExfs 即为正常将逻辑卷临时挂载到 /Data 目录# 创建挂载点已创建则跳过mkdir-p/Data# 挂载逻辑卷mount/dev/mapper/vg_data-lv_data /Data验证df-h/Data# 显示容量约50G文件系统为/dev/mapper/vg_data-lv_data开机自动挂载将挂载命令写入 /etc/fstabLVM 设备名由 VGLV 名固定不会像/dev/vdb1那样盘符漂移直接用设备路径即可稳定可靠。编辑/etc/fstab末尾添加一行/dev/mapper/vg_data-lv_data /Data xfs defaults,noatime00参数说明defaults,noatime关闭文件访问时间记录提升 IO 性能末尾0 0不 dump 备份开机不做磁盘自检XFS 数据盘标准配置校验防止开机进入救援模式卡住# 测试fstab语法无输出配置正确mount-a# 重载systemd配置systemctl daemon-reload三、后续空间不足两种扩容方案方案A新增一块磁盘必须后续再增加一块30G的/dev/vdc扩容步骤宿主机给虚拟机新增 vdc 磁盘qemu-img create-fqcow2 node02-data.qcow2 30G用attach-disk命令把新的磁盘挂载到虚拟机/dev/vdc虚拟机内重复 「分区→做 PV」步骤把新 PV 加入现有卷组vgextend vg_data /dev/vdc1扩容逻辑卷lvextend-l100%FREE /dev/mapper/vg_data-lv_data在线扩容 XFS 文件系统xfs_growfs /Data验证df -h /Data容量已增加方案B扩容现有 vdb 磁盘的 qcow2镜像宿主机扩容数据盘的 qcow2 文件再到虚拟机内扩容分区、PV、LV宿主机扩容数据盘镜像虚拟机关机执行最稳妥qemu-img resize node02-data.qcow2 30G虚拟机内扩容分区growpart /dev/vdb1partprobe /dev/vdb扩容物理卷 PVpvresize /dev/vdb1扩容逻辑卷 文件系统同方案A第4、5步lvextend-l100%FREE /dev/mapper/vg_data-lv_data xfs_growfs /Data这两种扩容方案我没有实际做还请各位有需要自己测试一下