CX4开启Sriov一键脚本
运维部署交流
1
帖子
1
发布者
19
浏览
1
关注中
-
CX4一键开启Sriov并且开机自动启动脚本
# —— 直接复制整个下面块并运行 —— sudo mkdir -p /opt/enable-sriov sudo tee /opt/enable-sriov/enable-sriov.sh > /dev/null <<'EOF' #!/usr/bin/env bash # /opt/enable-sriov/enable-sriov.sh # 目的:在 enp7s0f0np0 上启用 8 个 VF 并为 VF 0..7 设置 MAC 00:80:00:00:00:00 .. 00:80:00:00:00:07 set -euo pipefail # 如需修改接口名,请编辑下方 IFACE 变量或通过 systemd 的 Environment 传入 IFACE="enp7s0f0np0" NUMVFS=8 SYS="/sys/class/net/${IFACE}/device" IP_BIN="$(command -v ip || echo /sbin/ip)" LOG_PREFIX="[enable-sriov ${IFACE}]" if [ "$(id -u)" -ne 0 ]; then echo "${LOG_PREFIX} must be run as root" >&2 exit 1 fi if [ ! -d "${SYS}" ]; then echo "${LOG_PREFIX} ERROR: sysfs path ${SYS} not found. Is ${IFACE} correct?" >&2 exit 1 fi ${IP_BIN} link set dev "${IFACE}" up 2>/dev/null || true current=0 if [ -r "${SYS}/sriov_numvfs" ]; then current=$(cat "${SYS}/sriov_numvfs" 2>/dev/null || echo 0) fi echo "${LOG_PREFIX} current sriov_numvfs=${current}, target=${NUMVFS}" if [ "${current}" -ne "${NUMVFS}" ]; then set +e echo "${NUMVFS}" > "${SYS}/sriov_numvfs" 2>/dev/null rc=$? set -e if [ $rc -ne 0 ]; then echo "${LOG_PREFIX} direct write ${NUMVFS} failed, trying reset to 0 then set ${NUMVFS}" echo 0 > "${SYS}/sriov_numvfs" || true sleep 0.1 echo "${NUMVFS}" > "${SYS}/sriov_numvfs" fi sleep 0.2 new=$(cat "${SYS}/sriov_numvfs" 2>/dev/null || echo 0) echo "${LOG_PREFIX} sriov_numvfs now ${new}" if [ "${new}" -ne "${NUMVFS}" ]; then echo "${LOG_PREFIX} ERROR: failed to set sriov_numvfs to ${NUMVFS}" >&2 exit 2 fi else echo "${LOG_PREFIX} sriov already set to ${NUMVFS}, skipping re-provision." fi for i in $(seq 0 $((NUMVFS - 1))); do last_octet=$(printf "%02x" "${i}") mac=$(printf "00:80:00:00:00:%s" "${last_octet}") echo "${LOG_PREFIX} set vf ${i} mac ${mac}" ${IP_BIN} link set dev "${IFACE}" vf "${i}" mac "${mac}" || { echo "${LOG_PREFIX} WARN: failed to set mac for vf ${i}" >&2 } # 可选:取消 spoofchk(若需要允许 VM 使用任意 MAC) # ${IP_BIN} link set dev "${IFACE}" vf "${i}" spoofchk off || true done echo "${LOG_PREFIX} done" exit 0 EOF sudo chmod 755 /opt/enable-sriov/enable-sriov.sh # 写 systemd unit 到 /etc/systemd/system/enable-sriov.service sudo tee /etc/systemd/system/enable-sriov.service > /dev/null <<'EOF' [Unit] Description=Enable SR-IOV (8 VFs) and configure MACs (generic) After=network-pre.target Before=network.target Wants=network-pre.target [Service] Type=oneshot # 如果想用不同接口,编辑 /opt/enable-sriov/enable-sriov.sh 中的 IFACE, # 或在这里添加 Environment=IFACE=othername ExecStart=/opt/enable-sriov/enable-sriov.sh RemainAfterExit=yes TimeoutStartSec=30 [Install] WantedBy=multi-user.target EOF # reload, enable and start sudo systemctl daemon-reload sudo systemctl enable --now enable-sriov.service # show recent logs for quick check sudo journalctl -u enable-sriov.service -n 200 --no-pager # —— 安装结束 ——