脚本中Modprobe模块加载如何用

wen 实用脚本 8

本文目录导读:

脚本中Modprobe模块加载如何用

  1. 基本加载命令
  2. 带参数的模块加载
  3. 常用选项和模式
  4. 实际脚本示例
  5. 最佳实践提示
  6. 注意事项

在Shell脚本中使用modprobe加载内核模块,主要涉及以下几个关键点:

基本加载命令

#!/bin/bash
# 加载模块
modprobe <module_name>

带参数的模块加载

#!/bin/bash
# 加载模块并传递参数
modprobe <module_name> <param1>=<value1> <param2>=<value2>
# 示例:加载8139too网卡驱动并设置参数
modprobe 8139too debug=1

常用选项和模式

加载模块

#!/bin/bash
# 强制加载(忽略依赖检查)
modprobe -f <module_name>
# 显示详细信息
modprobe -v <module_name>
# 显示依赖关系但不加载
modprobe --dry-run <module_name>

卸载模块

#!/bin/bash
# 卸载模块
modprobe -r <module_name>
# 强制卸载
modprobe -r -f <module_name>

实际脚本示例

示例1:检查并加载模块

#!/bin/bash
MODULE="nvidia"
LOG_FILE="/var/log/module_load.log"
# 检查模块是否已加载
if lsmod | grep -q "^$MODULE"; then
    echo "$(date): $MODULE 已加载" >> "$LOG_FILE"
else
    echo "$(date): 正在加载 $MODULE..." >> "$LOG_FILE"
    # 加载模块
    if modprobe "$MODULE"; then
        echo "$(date): $MODULE 加载成功" >> "$LOG_FILE"
    else
        echo "$(date): $MODULE 加载失败" >> "$LOG_FILE"
        exit 1
    fi
fi

示例2:批量加载模块

#!/bin/bash
MODULES=("ext4" "nvme" "usb_storage" "ip_tables")
for module in "${MODULES[@]}"; do
    echo "正在加载 $module..."
    if modprobe "$module" 2>/dev/null; then
        echo "✓ $module 加载成功"
    else
        echo "✗ $module 加载失败"
    fi
done

示例3:带错误处理的完整脚本

#!/bin/bash
load_module() {
    local module="$1"
    local params="$2"
    echo "尝试加载模块: $module"
    # 检查模块是否存在
    if ! modprobe -n "$module" 2>/dev/null; then
        echo "错误: 模块 $module 不存在" >&2
        return 1
    fi
    # 加载模块
    if [ -n "$params" ]; then
        modprobe "$module" "$params"
    else
        modprobe "$module"
    fi
    local status=$?
    if [ $status -eq 0 ]; then
        echo "成功加载模块: $module"
    else
        echo "错误: 加载模块 $module 失败 (错误码: $status)" >&2
    fi
    return $status
}
# 使用示例
load_module "usbhid" "quirks=0x046d:0xc077:0x04"
load_module "vboxdrv"

最佳实践提示

权限处理

#!/bin/bash
# 确保有root权限
if [ "$(id -u)" -ne 0 ]; then
    echo "需要root权限来加载模块" >&2
    exit 1
fi
# 或者使用sudo
# sudo modprobe <module>

依赖管理

#!/bin/bash
# 更新模块依赖(通常不需要,但在某些情况下有用)
depmod -a
# 加载模块及其所有依赖
modprobe -a <module1> <module2>

配置持久化

#!/bin/bash
# 将模块添加到永久加载列表
echo "module_name" >> /etc/modules
# 或者创建配置文件
echo "options module_name param=value" > /etc/modprobe.d/custom.conf

注意事项

  1. 权限:需要root权限
  2. 依赖:modprobe自动处理依赖关系
  3. 错误处理:始终检查返回值
  4. 日志:记录加载失败的详细信息
  5. 兼容性:不同Linux发行版可能有细微差异

这些示例涵盖了大多数常见的modprobe使用场景,你可以根据实际需求调整。

抱歉,评论功能暂时关闭!