解决kvm安装Ubuntu虚机远程桌面无法复制粘贴问题

本文介绍如何通过安装spice-server及调整显示协议为Spice来解决KVM环境下Ubuntu虚拟机远程桌面复制粘贴功能的问题。具体步骤包括在CentOS7宿主机上安装所需组件,并在Ubuntu客户端安装virt-viewer。

解决kvm安装Ubuntu虚机远程桌面无法复制粘贴问题
环境:kvm宿主机使用centos7
1、服务器上安装spice-server
yum -y install spice-protocol spice-server xorg-x11-drv-qxl spice-glib
2、客户端Ubuntu安装virt-viewer
sudo apt-get install virt-viewer
虚机关闭后显示协议改成spice
在这里插入图片描述
以上已验证有效

<think>我们有一个已经配置好GPU大模型的Ubuntu虚拟机(在KVM中运行),现在需要将其制作为KVM可用的镜像。这样我们可以快速部署多个相同的虚拟机实例。 参考之前的引用,我们注意到: 1. 引用[1]和[2]中提到了GPU直通(Passthrough)的配置,但制作镜像时,我们不需要在镜像中包含宿主特定的直通设置(因为直通是在虚拟机启动时由宿主配置的)。 2. 镜像中需要包含必要的驱动和配置,以便在新的虚拟机启动时能够识别直通的GPU设备。 步骤概述: 1. 清理虚拟机:移除临时文件、缓存以及不必要的配置,以减少镜像大小并避免启动问题。 2. 卸载特定的硬件相关配置(如GPU驱动通常不需要卸载,因为新的虚拟机可能使用相同的GPU型号,但需要注意驱动是否兼容不同的宿主环境)。 3. 安装和配置cloud-init(可选,但推荐),以便新启动的虚拟机能够根据注入的配置进行初始化(如设置主名、网络、SSH密钥等)。 4. 将虚拟机的磁盘转换为合适的镜像格式(如qcow2),并确保其可以被KVM使用。 5. 测试镜像。 详细步骤: 步骤1:在虚拟机内部进行清理和准备 - 清理软件包缓存: sudo apt clean - 清理临时文件: sudo rm -rf /tmp/* sudo rm -rf /var/tmp/* - 清理日志文件: sudo find /var/log -type f -exec truncate --size=0 {} \; - 移除SSH主密钥(这样新虚拟机启动时会生成新的密钥): sudo rm /etc/ssh/ssh_host_* - 移除网络接口的持久化规则(避免新虚拟机使用相同的MAC地址导致冲突): sudo rm /etc/netplan/*.yaml # 注意:如果你有自定义的netplan配置,先备份,然后移除,这样新虚拟机启动时会重新生成默认配置 - 可选:重置cloud-init(如果之前使用过): sudo cloud-init clean --logs --reboot - 注意:GPU驱动和CUDA等大模型依赖的软件不要卸载,因为我们需要这些环境。 步骤2:安装cloud-init(如果尚未安装) 为了让新启动的虚拟机能够自动配置网络、主名、用户等,建议安装cloud-init: sudo apt update sudo apt install cloud-init -y 安装完成后,可以配置cloud-init的默认行为(通常不需要修改,因为启动时通过元数据服务注入配置)。 步骤3:关闭虚拟机 sudo shutdown now 步骤4:在宿主上操作,将虚拟机的磁盘转换为镜像 假设虚拟机磁盘文件为`/data/ubuntu.img`(如引用[1]中创建虚拟机时使用的磁盘路径),我们可以将其转换为qcow2格式(压缩和节省空间)。 - 转换磁盘格式(如果原始格式是raw,转换为qcow2): qemu-img convert -O qcow2 /data/ubuntu.img /data/ubuntu-cloud.qcow2 注意:如果原始磁盘已经是qcow2格式,可以直接复制,但为了减小大小,可以重新转换(带压缩): qemu-img convert -O qcow2 -c /data/ubuntu.img /data/ubuntu-cloud.qcow2 其中`-c`参数表示压缩。 步骤5:测试镜像 使用这个镜像创建一个新的虚拟机,注意: - 启动虚拟机时,需要配置GPU直通(如引用[1]中的`--host-device`参数),但镜像本身不包含直通设置,直通是启动时由宿主分配给虚拟机的。 - 确保新的虚拟机能够正常启动,并且GPU驱动正常工作。 示例创建新虚拟机的命令(参考引用[1]): sudo virt-install \ --name=ubuntu-from-image \ --memory=380000 \ --vcpus=46 \ --os-type=linux \ --os-variant=ubuntu18.04 \ --disk path=/data/ubuntu-cloud.qcow2 \ --bridge=br0 \ --graphics vnc,listen=0.0.0.0,keymap=en_us \ --host-device 04:00.0 \ --host-device 83:00.0 \ --features kvm_hidden=on \ --machine q35 \ --import # 注意:这里使用--import表示使用已有的磁盘镜像,而不是重新安装 步骤6:验证 进入新虚拟机,检查: - nvidia-smi 是否正常显示GPU信息 - 大模型环境是否正常 注意事项: - 镜像中的GPU驱动是针对特定型号的,如果新的宿主上的GPU型号不同,可能需要重新安装驱动。因此,建议在相同GPU型号的宿主上使用此镜像。 - 如果需要在不同型号的GPU上使用,可以考虑在镜像中安装多版本驱动,或者使用兼容性更好的驱动版本。 引用说明: - 清理虚拟机和转换镜像的步骤参考了云镜像制作的最佳实践[^1][^2]。 - 创建新虚拟机时使用直通设备的方法参考了引用[1]和[^2]。 相关问题: 1. 如何优化镜像大小? 2. 如何将镜像上传到OpenStack Glance服务? 3. 如何为不同GPU型号的宿主准备镜像? 4. cloud-init 的配置如何自定义? 5. 如何验证镜像中的GPU驱动兼容性? 完成以上步骤后,你就有了一个包含GPU大模型环境的KVM可用镜像。</think>### 将已配置GPU大模型的Ubuntu虚拟机制作为KVM镜像的完整指南 #### 一、核心制作流程 1. **虚拟机准备** ```bash # 清理临时文件和缓存(引用[1]) sudo apt clean sudo rm -rf /tmp/* sudo journalctl --vacuum-time=1d # 卸载GPU驱动(避免宿主冲突) sudo nvidia-uninstall # 或使用 apt purge nvidia-* ``` 2. **安装云初始化工具** ```bash # 安装cloud-init(关键步骤) sudo apt update sudo apt install cloud-init cloud-utils-growpart -y sudo systemctl enable cloud-init ``` 3. **重置器ID(重要!)** ```bash # 避免克隆后ID冲突 sudo rm /etc/machine-id sudo systemd-machine-id-setup ``` 4. **关闭虚拟机** ```bash sudo shutdown now ``` #### 二、宿主操作(转换镜像) 1. **定位虚拟机磁盘** ```bash virsh dumpxml ubuntu | grep 'source file' # 获取磁盘路径(如/data/ubuntu.img) ``` 2. **转换为QCOW2格式** ```bash # 转换并压缩镜像(引用[1]) qemu-img convert -O qcow2 -c /data/ubuntu.img /data/gpu-model-base.qcow2 ``` 3. **验证镜像完整性** ```bash qemu-img check /data/gpu-model-base.qcow2 virt-filesystems -a /data/gpu-model-base.qcow2 # 检查文件系统 ``` #### 三、GPU特殊处理 1. **驱动兼容性配置** ```bash # 添加通用GPU支持(引用[1][2]) virt-customize -a /data/gpu-model-base.qcow2 \ --install nvidia-driver-535-server \ --run-command 'echo "options nvidia NVreg_EnablePCIeGen3=1" > /etc/modprobe.d/nvidia.conf' ``` 2. **禁用KVM隐藏特性** ```bash # 移除特征标记(引用[1]) virt-customize -a /data/gpu-model-base.qcow2 \ --delete '/etc/modprobe.d/kvm.conf' ``` #### 四、创建新虚拟机测试 ```bash sudo virt-install \ --name=gpu-clone \ --memory=380000 \ --vcpus=46 \ --disk path=/data/gpu-model-base.qcow2 \ --graphics none \ --host-device 04:00.0 \ --host-device 83:00.0 \ --import # 关键参数:使用现有镜像 ``` > 验证命令: > `nvidia-smi` 应显示GPU状态 > `lspci | grep -i nvidia` 确认设备直通[^1] #### 五、镜像优化技巧 1. **空间压缩** $$ \Delta S = S_{raw} - S_{qcow2} \approx 0.6 \times S_{raw} $$ ```bash virt-sparsify --compress /data/gpu-model-base.qcow2 gpu-model-compressed.qcow2 ``` 2. **安全加固** ```bash virt-customize -a gpu-model-compressed.qcow2 \ --run-command 'passwd -d root' \ --ssh-inject root:file:/home/user/.ssh/id_rsa.pub ``` #### 六、技术原理 1. **镜像与直通解耦** $$ I_{final} = f(I_{base}, P_{host-device}) $$ - 基础镜像 $I_{base}$ 包含预装环境 - 设备直通 $P_{host-device}$ 由启动时动态绑定[^2] 2. **cloud-init作用** ```mermaid graph LR A[启动实例] --> B[获取元数据] B --> C[配置网络] B --> D[注入SSH密钥] B --> E[执行用户脚本] ``` 首次启动自动完成个性化配置[^1] --- ### 相关问题 1. 如何验证镜像中的NVIDIA驱动兼容不同型号GPU? 2. 使用`virt-sparsify`压缩镜像时如何避免数据损坏? 3. 如何为镜像添加自动扩展根分区的能力? 4. 在多GPU宿主环境下如何指定直通设备?[^2] 5. 如何将KVM镜像转换为OpenStack支持的格式?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值