Linux双网卡绑定状态验证脚本

前景

公司内交换机切换,需提前验证服务器系统主备网卡绑定状态

脚本

需提前配置好YUM源或已安装lldpd服务

#!/bin/bash



# 安装必要工具
install_lldpad() {
    if ! command -v lldptool >/dev/null 2>&1; then
        echo "安装lldpad服务..."
        yum install -y lldpad >/dev/null 2>&1
        echo "启动lldpad服务..."
        systemctl start lldpad >/dev/null 2>&1
    fi
}

# 可靠的低级LLDP解析
parse_lldp_output() {
    local lldp_output="$1"
    local chassis_id=""
    local port_id=""
    local sys_name=""

    # 使用IFS读行进行精确解析
    while IFS= read -r line; do
        # 提取Management Address MAC
        if [[ "$line" =~ "Management Address TLV" ]]; then
            read -r mac_line
            if [[ "$mac_line" =~ MAC:[[:space:]]*([0-9a-f:]{17}) ]]; then
                chassis_id="${BASH_REMATCH[1]}"
            fi
        fi
        
        # 提取Port ID
        if [[ "$line" =~ "Port ID TLV" ]]; then
            read -r port_line
            # 精确匹配Ifname格式
            if [[ "$port_line" =~ Ifname:[[:space:]]*(.+) ]]; then
                port_id="${BASH_REMATCH[1]}"
            fi
        fi
        
        # 提取System Name
        if [[ "$line" =~ "System Name TLV" ]]; then
            read -r sys_line
            sys_name="${sys_line}"
        fi
    done <<< "$lldp_output"
    
    echo "$chassis_id $port_id $sys_name"
}

# 专业的bond处理函数
process_bond() {
    local bond="$1"
    local bond_file="/proc/net/bonding/$bond"
    
    # 确保bond文件存在
    [[ -f "$bond_file" ]] || return

    # 精确解析bond信息
    local mode=$(grep "Bonding Mode" "$bond_file" | awk -F': ' '{print $2}')
    local slaves=$(awk '/Slave Interface:/{slave=$3} /MII Status: up$/{if(slave) print slave}' "$bond_file")
    local up_count=$(echo "$slaves" | wc -l)
    
    # 输出关键信息
    echo "================================================================="
    printf "%-15s: %s\n" "Bond接口" "$bond"
    printf "%-15s: %s\n" "绑定模式" "$mode"
    printf "%-15s: %d\n" "UP网卡数量" "$up_count"
    printf "%-15s: %s\n" "网卡名称" "$(echo $slaves | tr '\n' ' ')"
    echo "================================================================="

    # 处理所有从网卡
    for slave in $slaves; do
        [[ -d "/sys/class/net/$slave" ]] || continue
        
        # 配置并获取LLDP信息
        lldptool set-lldp -i "$slave" adminStatus=rxtx >/dev/null 2>&1
        raw_output=$(lldptool -t -n -i "$slave" 2>&1)
        
        # 精确解析
        read -r chassis_id port_id sys_name <<< "$(parse_lldp_output "$raw_output")"
        
        # 最终检查修正(基于您的实际输出)
        if [[ "$port_id" == "Ifname:" ]]; then
            # 从原始输出重新提取
            port_id=$(grep -A1 "Port ID TLV" <<< "$raw_output" | tail -1 | awk '{print $1}')
        fi

        # 格式化输出
        printf "%-15s: %s\n" "网卡名称" "$slave"
        printf "%-15s: %s\n" "真实MAC地址" "${chassis_id:-未获取到}"
        printf "%-15s: %s\n" "交换机端口" "${port_id:-未获取到}"
        printf "%-15s: %s\n" "交换机名称" "${sys_name:-未获取到}"
        echo "----------------------------------------"
    done
    echo # 分隔空行
}

### 主程序 ###

# 安装必要服务
install_lldpad

# 检测所有bond接口
bonds=$(find /proc/net/bonding/ -maxdepth 1 -type f -printf "%f\n" 2>/dev/null)
[[ -z "$bonds" ]] && exit

# 处理每个bond接口
for bond in $bonds; do
    process_bond "$bond"
done

 

原创文章,作者:AIRF,如若转载,请注明出处:http://www.ai-rf.com/index.php/2025/07/02/linux%e5%8f%8c%e7%bd%91%e5%8d%a1%e7%bb%91%e5%ae%9a%e7%8a%b6%e6%80%81%e9%aa%8c%e8%af%81%e8%84%9a%e6%9c%ac/

(0)
AIRFAIRF
上一篇 2025年6月18日
下一篇 2025年7月7日

相关推荐

  • Windows 2012r2激活密钥(亲测)

    windows server 2012是服务器系统,和客户端系统一样,需要使用激活码永久激活windows2012r2。server2012激活密钥有两种,分别是永久激活和kms期…

    Windows 2023年5月10日
  • Linux系统巡检脚本

    #!/bin/bash ############################################################## # File Name: Ce…

    JAVA_JavaScript 2024年5月19日
  • 1秒揪出内存大户!Linux运维必备

    百万级并发服务的救星,快速定位吞噬内存的进程! 作为开发者或运维工程师,你是否经历过这些场景: 服务器内存突然飙红告警 😰 关键服务运行越来越卡却找不到原因 🐌 top命令看花眼也…

    2025年7月8日
  • Linux系统ssh连接无响应

    一.问题描述 某集群数据节点服务器频繁无法连接,服务器间出现可ping通但ssh无法连接的情况,使用带外地址登录后远程控制也无法显示正常界面,重启后会短暂恢复。 二.排查问题 重启…

    Linux 2021年11月21日
  • linux系统启动流程

    按下系统的电源开关,过一会就可以看到Linux的登录界面了。 你是否曾经想过,从按下电源开关到登录界面出现,这后面到底发生了什么? Linux 系统在启动过程中,首先是固件(PC …

    Linux 2022年10月6日
  • /root占用空间过大但是又找不到大文件和大目录的问题

    管理员反馈/root过大但是找不到文件 使用lsof排查 使用lsof查看删除但是占用空间的进程发现都是/var目录,无法对应/root 处理办法 排除解决,换用命令:du -sh…

    2025年6月6日
  • Windows激活工具及秘钥

    密钥对照表 Windows 11 专业版安装密钥:VK7JG-NPHTM-C97JM-9MPGT-3V66T 1.Windows Server 2019 Windows Serve…

    2022年9月24日
  • Linux性能分析工具sar篇

    简介 sar(System Activity Report)是Linux系统中常用的性能分析工具,可以从多方面对系统的活动进行报告,包括:文件的读写情况、系统调用的使用情况、磁盘 …

    Linux 2023年5月18日
  • linux系统中buff/cache占用过高?不明白为何过高?

    前言 近期一台服务器运行中查看内存容量时发现buff/cache占用过高,几乎占用百分之70 概念 什么是buffer/cache?buffer和cache是两个在计算机技术中被用…

    2022年12月5日
  • LVM 缩减 / 根目录导致的开机错误

    前景描述 给服务器lv_var扩容,没空间扩容,于是将lv_root由200G缩小至100G,几分钟后,服务器告警,ping状态变为停止,于是登陆服务器管理口远程查看 报错过程 发…

    Linux 2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注