比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。
目录
[一、virsh 是什么?](#一、virsh 是什么?)
[二、为什么要用 virsh?](#二、为什么要用 virsh?)
一、virsh 是什么?
virsh 是 libvirt 提供的命令行管理工具,用来管理 KVM/QEMU 虚拟机。
它相当于 VirtualBox/VMware 的图形界面,但全部是命令行操作。
二、为什么要用 virsh?
-
libvirt/KVM 默认不提供 GUI,virsh 是最标准的管理工具
-
可以通过脚本自动化管理虚拟机
-
支持远程管理(SSH 连接其他宿主机)
-
比手动执行 qemu-system 命令更方便、更可控
三、准备逻辑卷+镜像
sudo lvcreate -n win-test-lv -L 800G vmsvg
sudo mkfs.ext4 /dev/vmsvg/win-test-lv
sudo mkdir /mnt/win-test
sudo mount /dev/vmsvg/win-test-lv /mnt/win-test
cd /mnt/win-test
ls
#日后扩容的命令
sudo lvextend -L +200G /dev/mapper/vmsvg-win--test--lv
sudo resize2fs /dev/mapper/vmsvg-win--test--lv
#传镜像
sudo scp -r ubuntu2@10.xxx.xxx.xxx:/data/windows/bj-windows-txy-17.qcow2 /mnt/win-test/
四、安装virt-manager
sudo apt update
sudo apt install -y virt-manager libvirt-daemon-system libvirt-clients qemu-kvm virtinst qemu-efi ovmf
sudo systemctl enable --now libvirtd
sudo systemctl status libvirtd
#说明:virt-manager → 图形界面管理工具;libvirt-daemon-system+libvirt-clients → 提供虚拟机管理后台;qemu-kvm → 真正运行虚拟机的引擎
#将当前用户加入 libvirt 组,这一步是为了解决"权限不够导致无法连接"的问题
sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm,libvirt $USER
#在当前 shell 中临时刷新组权限,这条命令会让当前终端立即切换到新的组权限(不需要重启或注销)
newgrp libvirt
sudo systemctl restart libvirtd
virt-manager
五、准备桥接网络
sudo vim /etc/netplan/01-bridge.yaml
network:
version: 2
renderer: networkd
ethernets:
eno2:
dhcp4: no
bridges:
br0:
interfaces: [eno2] #按照实际网卡填写
addresses: [10.155.xxx.xxx/24] # 宿主机 IP
gateway4: 10.155.xxx.1
nameservers:
addresses: [10.4.xxx.27,10.4.xxx.28]
parameters:
stp: false
forward-delay: 0
#应用配置
sudo netplan apply
#检查桥接接口br0,应该显示静态IP 10.155.xxx.xxx,eno2不再有IP,只是桥接接口
ip addr show br0
#测试网络,可以 ping 通,说明配置成功,
ping 10.155.xxx.1 # 网关
ping 8.8.8.8 # 外网
六、创建windows虚拟机
sudo virt-install \
--name win-sign \
--ram 16384 \
--vcpus 8 \
--cpu host \
--disk /mnt/win-test/bj-windows-txy-17.qcow2,bus=virtio \
--os-type windows \
--boot cdrom,hd \
--network bridge=br0,model=virtio \
--graphics vnc,port=5900,listen=0.0.0.0 \
--input type=tablet,bus=usb \
--input type=keyboard,bus=usb \
--import \
--noautoconsole
#查看一下状态
sudo virsh list --all
参数说明
|-----------------------------------------------------------|---------------------------|
| 参数 | 含义 |
| --name win-sign | 虚拟机名称 |
| --ram 16384 | 内存 16GB |
| --vcpus 8 | CPU 核心 8 个 |
| --cpu host | 使用宿主机 CPU 特性 |
| --disk ... | 指定 qcow2 磁盘文件路径,virtio 总线 |
| --os-type windows | 操作系统类型 |
| --boot cdrom,hd | 使用 UEFI / 磁盘启动 |
| --network bridge=br0,model=virtio | 桥接到 br0,实现局域网可访问 |
| --graphics vnc,port=5900,listen=0.0.0.0 | GUI 通过 VNC 访问 |
| --input type=tablet,bus=usb --input type=keyboard,bus=usb | 输入平板鼠标、键盘设备支持 |
| --import | 直接使用已有 qcow2,不重装 |
| --noautoconsole | 不自动打开控制台 |
七、windows虚拟机设置IP
可以使用remmina软件,VNC访问ubuntu物理机IP:5900,这样就可以进入windows页面。设置完windows的ip后,remmina软件就可以使用RDP访问windows虚拟机ip:22
左下角搜索cmd 回车打开页面 ------------> > 输入 ncpa.cpl 回车 ------------> > 找到 Ethernet(或 "本地连接") ------------> > 右键 选择 Properties(属性)

找到 Internet Protocol Version 4 (TCP/IPv4),双击打开设置ip内容


八、给windows虚拟机添加D盘
#完整查看卷组信息,最关键的是 Free PE,它决定了能创建多大的新 LV
sudo vgdisplay vmsvg
# 创建 LV
sudo lvcreate -L 400G -n win-test-data vmsvg
# 挂载到虚拟机
sudo virsh attach-disk win-sign /dev/vmsvg/win-test-data vdb --persistent --driver qemu --subdriver raw --targetbus virtio
解释:
attach-disk:为现有 VM 添加磁盘
win-sign:你的虚拟机名称
/dev/vmsvg/win-test-data:刚创建的 LV
vdb:在虚拟机里显示为第二块 virtio 磁盘
--persistent:写入 XML,重启后也存在
--targetbus virtio:Windows 识别为高速 virtio 磁盘
进入windows图形化页面,cmd页面输入diskmgmt.msc 回车,可以看到这个新增的400G未分配

左侧的位置,右键选择"转换成GPT磁盘"

右侧的位置,右键选择"新建简单卷"

按照以下图片进行"下一步"即可





完成之后就可以看到这个D盘了,在此之前是只有C盘的
