H

Hyper-V Ubuntu 虚拟机一键检测&修复脚本

Captain Linux 2026-05-27

功效
检查 Hyper-V 内核模块是否加载
检查旧版 hv-fcopy-daemon 残留 systemd 单元
检查必备工具包是否安装
自动清理无效残留、给出修复指令
纯 Bash,Ubuntu 通用,直接 root / 普通用户 + sudo 运行即可

新建hyperv_check.sh文件,内容如下:

#!/bin/bash
# Hyper-V Ubuntu 虚拟机一键检测&修复脚本
# 适用:Hyper-V + Ubuntu 20.04/22.04/24.04

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo -e "==================== Hyper-V 虚拟机检测脚本 ===================="
echo

# 1. 检测 Hyper-V 内核模块
echo -e "[1] 检测 Hyper-V 内核模块 hv_*"
HV_MODULES=$(lsmod | grep -c 'hv_')
if [ "$HV_MODULES" -gt 0 ]; then
    echo -e "${GREEN}✅ 已加载 Hyper-V 内核模块${NC}"
    lsmod | grep hv_
else
    echo -e "${RED}❌ 未检测到 Hyper-V 内核模块${NC}"
    echo -e "${YELLOW}建议执行:sudo apt install -y linux-virtual linux-cloud-tools-virtual linux-tools-virtual && sudo reboot${NC}"
fi
echo

# 2. 检测旧版 hv-fcopy-daemon 残留服务
echo -e "[2] 检测旧版 hv-fcopy-daemon 残留 systemd 单元"
OLD_SERVICE=$(find /etc/systemd/system -name "*hv-fcopy*" 2>/dev/null)
if [ -z "$OLD_SERVICE" ]; then
    echo -e "${GREEN}✅ 无旧版残留服务${NC}"
else
    echo -e "${RED}❌ 发现无效残留文件:${OLD_SERVICE}${NC}"
    echo -e "${YELLOW}正在自动清理残留...${NC}"
    sudo find /etc/systemd/system -name "*hv-fcopy*" -delete
    sudo systemctl daemon-reload
    echo -e "${GREEN}✅ 残留清理完成,已重载 systemd${NC}"
fi
echo

# 3. 检测必备 Hyper-V 工具包
echo -e "[3] 检测必备 Hyper-V 工具包"
PKG1=$(dpkg -l | grep -c linux-cloud-tools-virtual)
PKG2=$(dpkg -l | grep -c linux-tools-virtual)
PKG3=$(dpkg -l | grep -c linux-virtual)

if [ $PKG1 -gt 0 ] && [ $PKG2 -gt 0 ] && [ $PKG3 -gt 0 ]; then
    echo -e "${GREEN}✅ 所有必备工具包已安装${NC}"
else
    echo -e "${RED}❌ 部分工具包缺失${NC}"
    echo -e "${YELLOW}请执行安装命令:${NC}"
    echo "sudo apt update && sudo apt install -y linux-virtual linux-cloud-tools-virtual linux-tools-virtual"
fi
echo

# 4. 检测 dmesg 中 Hyper-V 相关报错
echo -e "[4] 检测系统日志中 Hyper-V / sr0 相关错误"
DMESG_ERR=$(dmesg | grep -E 'hv-fcopy|sr0|blk update request I/O error' | tail -10)
if [ -z "$DMESG_ERR" ]; then
    echo -e "${GREEN}✅ 未发现相关异常日志${NC}"
else
    echo -e "${RED}⚠️  检测到异常日志:${NC}"
    echo "$DMESG_ERR"
    echo -e "${YELLOW}提示:sr0 报错请在 Hyper-V 中移除虚拟光驱;hv-fcopy 报错已在上一步自动清理${NC}"
fi

echo
echo -e "==================== 检测结束 ===================="
PREV:视频转录翻译处理工具:voice-pro
NEXT:K380 Plus(48DD)行车记录仪安装避坑