0

0

大量残留 network namespace 的 ip netns delete 批量脚本

舞夢輝影

舞夢輝影

发布时间:2026-02-04 20:21:09

|

563人浏览过

|

来源于php中文网

原创

ip netns delete 失败的根本原因是 namespace 仍被进程、veth 设备、iptables 规则或 systemd 会话引用;必须解除所有引用才能删除。

大量残留 network namespace 的 ip netns delete 批量脚本

为什么 ip netns delete 会失败或残留?

根本原因不是命令本身不支持批量,而是每个 namespace 必须处于“未被任何进程或网络设备引用”的状态才能删除。常见卡点包括:
• 进程仍持有该 netns 的文件描述符(比如容器未彻底退出、nsenter 残留 shell)
• veth 对端仍挂在 host 或其他 netns 中(ip link 显示 netns XXX 但 XXX 已删)
• 有绑定到该 netns 的 iptables/nftables 规则(尤其使用 -t nat 或自定义链时)
• systemd 用户 session 持有 netns 引用(systemd-run --scope --scope-netns 启动的服务未 clean up)

安全批量清理残留 netns 的 bash 脚本

以下脚本先做软清理(尝试优雅删除),再强制解除引用,最后硬删目录。关键点是绕过 /var/run/netns/ 符号链接校验,直接操作底层 bind mount:

#!/bin/bash
for ns in $(ip netns list | awk '{print $1}'); do
    echo "处理 netns: $ns"
    # 尝试正常删除
    if ip netns delete "$ns" 2>/dev/null; then
        continue
    fi
    # 若失败,检查是否有进程在用
    pid=$(ls -la /proc/[0-9]*/ns/net 2>/dev/null | grep "$ns" | head -n1 | cut -d' ' -f3 | cut -d'/' -f3)
    if [ -n "$pid" ]; then
        echo "  PID $pid 正在使用,发送 SIGTERM"
        kill "$pid" 2>/dev/null
        sleep 0.5
        kill -9 "$pid" 2>/dev/null
    fi
    # 解除 veth 引用(host 端口若名含 ns 名,移除)
    ip link show | grep -E "^[0-9]+:" | cut -d':' -f1 | xargs -I{} sh -c 'ip link show {} | grep -q "netns.*'"$ns"'" && ip link delete {} 2>/dev/null'
    # 最终强制删目录(注意:仅当确认无进程引用后才执行)
    rm -f "/var/run/netns/$ns"
done

ip netns delete 失败时的快速诊断命令

别急着删,先定位卡在哪:

腾讯AI 开放平台
腾讯AI 开放平台

腾讯AI开放平台

下载
  • 查哪些进程在用:find /proc/[0-9]*/ns/net -lname "*$NS_NAME*" 2>/dev/null
  • 查 veth 是否挂载:ip -all link show | grep -A5 "$NS_NAME"
  • 查 netns 目录是否真是 bind mount:stat /var/run/netns/$NS_NAME | grep -i "bind\|mount"
  • 查是否有 network device 绑定:ip link show | grep -B1 -A1 "netns $NS_NAME"

避免下次再堆积的实操习惯

预防比清理重要。日常开发中建议:

  • ip netns exec $NS cmd 代替 nsenter,前者自动 cleanup 更可靠
  • 写测试脚本时,统一用 trap 'ip netns delete mytest 2>/dev/null' EXIT 保证退出必删
  • 不要手动 ln -s 创建 /var/run/netns/ 下的链接 —— 必须用 ip netns add,否则 delete 无法识别
  • Docker/Podman 用户注意:docker run --network=none 不创建 netns,但 --network=container:xxx 会复用,容易误判残留来源

真正麻烦的不是删不掉,而是删掉后某个 veth 还挂在 host 上却没报错 —— 建议每次批量删完,跑一遍 ip link show | grep "state DOWN" | grep -v "lo\|docker\|cni" 手动扫一眼异常接口。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

833

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

330

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

351

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1386

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

365

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

963

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

581

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

427

2024.04.29

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

61

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 1.9万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 17.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号