跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

GPU技术交流论坛

  1. 主页
  2. 版块
  3. 知识交流
  4. 运维部署交流
  5. CX4开启Sriov一键脚本

CX4开启Sriov一键脚本

已定时 已固定 已锁定 已移动 运维部署交流
1 帖子 1 发布者 19 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • F 离线
    F 离线
    fushinn
    编写于 最后由 编辑
    #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
    
    # —— 安装结束 —— 
    
    
    1 条回复 最后回复
    0
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门
    • 世界
    • 用户
    • 群组