修复开启Sriov开启后vmbr无法联网的问题
运维部署交流
1
帖子
1
发布者
28
浏览
1
关注中
-
复制粘贴到
/usr/bin/fix_vmbr然后
chmod 755 /usr/bin/fix_vmbr使用交互式脚本自动修复
fix_vmbr以下是脚本
#!/bin/bash # fix_vmbr - 为 VM/CT 添加 bridgefix 钩子脚本(自动创建/下载) set -euo pipefail HOOKSCRIPT_ID="local:snippets/bridgefix.sh" SNIPPETS_DIR="/var/lib/vz/snippets" HOOKSCRIPT_PATH="$SNIPPETS_DIR/bridgefix.sh" HOOKSCRIPT_URL="https://raw.githubusercontent.com/jdlayman/pve-hookscript-sriov/master/bridgefix.sh" # 检查 pvesh, jq, qm, pct for cmd in pvesh jq qm pct wget; do if ! command -v $cmd >/dev/null 2>&1; then echo "❌ 未找到命令: $cmd,请安装后重试。" exit 1 fi done # 创建目录并下载 bridgefix.sh(如果不存在) if [[ ! -f "$HOOKSCRIPT_PATH" ]]; then echo "📦 $HOOKSCRIPT_PATH 不存在,正在创建目录并下载..." mkdir -p "$SNIPPETS_DIR" wget -O "$HOOKSCRIPT_PATH" "$HOOKSCRIPT_URL" chmod +x "$HOOKSCRIPT_PATH" echo "✅ 下载完成:$HOOKSCRIPT_PATH" fi echo "==============================" echo " Proxmox VM / CT 列表" echo "==============================" RESOURCES=$(pvesh get /cluster/resources --type vm --output-format json) printf " %-6s | %-6s | %s\n" "ID" "类型" "名称" printf " %s\n" "-------------------------------------------------" echo "$RESOURCES" | jq -r '.[] | "\(.vmid)\t\(.type)\t\(.name // "-")"' | \ while IFS=$'\t' read -r vmid vtype name; do [[ "$vtype" == "qemu" ]] && vtype="VM" [[ "$vtype" == "lxc" ]] && vtype="CT" printf " %-6s | %-6s | %s\n" "$vmid" "$vtype" "$name" done echo "" read -r -p "请输入要修复的 VMID: " VMID TYPE=$(echo "$RESOURCES" | jq -r --arg id "$VMID" '.[] | select(.vmid == ($id|tonumber)) | .type') if [[ -z "$TYPE" || "$TYPE" == "null" ]]; then echo "❌ 找不到 VMID $VMID" exit 1 fi echo "" echo "检测到:VMID=$VMID 类型=$TYPE" echo "" if [[ "$TYPE" == "qemu" ]]; then echo "➡️ 为虚拟机设置 hookscript..." qm set "$VMID" --hookscript "$HOOKSCRIPT_ID" elif [[ "$TYPE" == "lxc" ]]; then echo "➡️ 为容器设置 hookscript..." pct set "$VMID" --hookscript "$HOOKSCRIPT_ID" else echo "❌ 未知类型:$TYPE" exit 1 fi echo "✅ 已成功为 $TYPE $VMID 设置 hookscript:$HOOKSCRIPT_ID"