1. 首页 > Linux教程 > 正文

Linux教程FG125-内核模块管理(modprobe/lsmod/rmmod)

本文档风哥主要介绍Linux内核模块管理,包括lsmod、modprobe、rmmod等命令的使用、常见内核模块管理、生产环境实战案例等内容,参考Red Hat Enterprise Linux 10官方文档中的System administration章节,适合系统管理员在生产环境中使用。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 内核模块概念

内核模块是Linux内核的可加载组件,允许在不重新编译内核的情况下扩展内核功能。内核模块可以动态加载和卸载,提供了一种灵活的方式来添加新功能或支持新硬件。学习交流加群风哥微信: itpux-com

内核模块的特点:

  • 动态加载和卸载
  • 扩展内核功能
  • 支持新硬件
  • 减少内核体积
  • 提高系统灵活性

1.2 内核模块管理命令

常用的内核模块管理命令:

  • lsmod:列出当前加载的内核模块
  • modprobe:加载或卸载内核模块
  • rmmod:卸载内核模块
  • insmod:加载内核模块
  • modinfo:显示内核模块信息
  • depmod:生成模块依赖关系

1.3 模块加载过程

内核模块加载过程:

  1. 查找模块文件(通常在/lib/modules/$(uname -r)/目录)
  2. 解析模块依赖关系
  3. 加载依赖模块
  4. 加载目标模块
  5. 初始化模块
  6. 注册模块功能
风哥提示:内核模块加载时会检查依赖关系,确保所有必需的模块都已加载,避免模块加载失败。

Part02-生产环境规划与建议

2.1 模块管理策略

模块管理策略:

  1. 按需加载:只加载必要的模块
  2. 自动加载:配置模块自动加载
  3. 黑名单:禁止加载不需要的模块
  4. 版本管理:确保模块与内核版本匹配
  5. 安全审计:监控模块加载和卸载

2.2 常见内核模块

常见的内核模块:

# 网络模块
– e1000e:Intel千兆网卡驱动
– igb:Intel万兆网卡驱动
– r8169:Realtek网卡驱动
– bnx2:Broadcom网卡驱动

# 存储模块
– ahci:SATA控制器驱动
– mpt3sas:SAS控制器驱动
– nvme:NVMe存储驱动
– md_mod:软件RAID驱动

# 文件系统模块
– ext4:ext4文件系统
– xfs:XFS文件系统
– btrfs:Btrfs文件系统
– nfs:NFS文件系统

# 硬件模块
– i915:Intel显卡驱动
– nouveau:NVIDIA开源显卡驱动
– snd_hda_intel:音频驱动
– usb_storage:USB存储驱动

2.3 模块安全性

模块安全性考虑:

  • 签名验证:使用签名验证模块
  • 黑名单:禁止加载不安全的模块
  • 权限控制:限制模块加载权限
  • 审计:监控模块加载和卸载
  • 更新:及时更新模块以修复安全漏洞
生产环境建议:定期检查加载的内核模块,确保只加载必要的模块,避免加载不安全或不需要的模块。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 lsmod命令使用

lsmod命令用于列出当前加载的内核模块。

# 列出所有加载的内核模块
$ lsmod

Module Size Used by
nft_ct 16384 1
nft_chain_nat 16384 1
xt_MASQUERADE 20480 1
nft_counter 16384 6
xt_addrtype 16384 2
nft_compat 20480 2
nft_chain_route_ipv4 16384 1
nft_chain_route_ipv6 16384 1
nft_chain_filter_ipv4 16384 1
nft_chain_filter_ipv6 16384 1
nft_reject_ipv4 16384 1
nft_reject_ipv6 16384 1
xt_reject 16384 2
nft_reject 16384 2
nft_chain_nat_ipv4 16384 1
nft_chain_nat_ipv6 16384 1
xt_nat 16384 1
xt_tcpudp 20480 4
nft_meta 16384 9
nft_set_hash 32768 4
nft_set_bitmap 16384 2
nft_set_rbtree 16384 1
nft_set_list_set 16384 2
nft_set 49152 8 nft_set_bitmap,nft_set_list_set,nft_set_rbtree,nft_set_hash
nft_ct_timeout 16384 1
nft_ct_helper 16384 1
nft_exthdr 16384 2
nft_masq 16384 1
nft_log 16384 1
nft_limit 16384 1
xt_limit 16384 1
nftables 180224 36 nft_ct,nft_limit,nft_reject_ipv4,nft_ct_timeout,nft_set_list_set,nft_chain_route_ipv4,nft_masq,nft_chain_nat_ipv4,nft_reject_ipv6,nft_ct_helper,nft_counter,nft_chain_filter_ipv4,nft_chain_filter_ipv6,nft_log,nft_set,nft_exthdr,nft_set_bitmap,nft_set_rbtree,nft_chain_nat_ipv6,nft_chain_route_ipv6,nft_compat,nft_chain_nat,nft_reject,xt_MASQUERADE
br_netfilter 28672 0
bridge 184320 1 br_netfilter
stp 16384 1 bridge
llc 16384 2 bridge,stp
ip6table_nat 16384 0
ip6table_mangle 16384 0
ip6table_filter 16384 0
ip6_tables 32768 3 ip6table_mangle,ip6table_filter,ip6table_nat
iptable_nat 16384 0
nf_nat 40960 4 xt_nat,nft_chain_nat,ip6table_nat,iptable_nat
nf_conntrack 139264 5 xt_MASQUERADE,nf_nat,nft_ct,nft_masq,xt_nat
nf_defrag_ipv6 20480 1 nf_conntrack
nf_defrag_ipv4 16384 1 nf_conntrack
iptable_mangle 16384 0
iptable_filter 16384 0
ip_tables 32768 3 iptable_mangle,iptable_filter,iptable_nat
x_tables 49152 14 xt_nat,iptable_mangle,xt_addrtype,iptable_filter,xt_limit,ip6table_mangle,xt_tcpudp,ip6table_filter,ip_tables,xt_MASQUERADE,xt_reject,ip6_tables,iptable_nat,ip6table_nat
fuse 135168 3
rfkill 32768 1
sg 36864 0
pcspkr 16384 0
iTCO_wdt 16384 0
iTCO_vendor_support 16384 1 iTCO_wdt
mei_me 40960 0
mei 102400 1 mei_me
intel_pch_thermal 16384 0
acpi_pad 24576 0
edac_mce_amd 32768 0
k10temp 16384 0
crct10dif_pclmul 16384 1
crc32_pclmul 16384 0
ghash_clmulni_intel 16384 0
aesni_intel 372736 0
crypto_simd 16384 1 aesni_intel
cryptd 24576 2 crypto_simd,ghash_clmulni_intel
glue_helper 16384 1 aesni_intel
rapl 20480 0
fam15h_power 16384 0
mperf 16384 0
pcp 24576 0
ipmi_si 65536 0
ipmi_devintf 20480 0
ipmi_msghandler 69632 2 ipmi_devintf,ipmi_si
ib_iser 40960 0
rdma_cm 69632 1 ib_iser
ib_cm 49152 1 rdma_cm
iw_cm 40960 1 rdma_cm
ib_sa 45056 2 ib_cm,rdma_cm
ib_mad 45056 2 ib_cm,ib_sa
ib_core 327680 7 ib_mad,ib_cm,ib_sa,iw_cm,rdma_cm,ib_iser
ib_addr 20480 1 ib_core
rdma_ucm 20480 0
rdma_common 20480 3 rdma_cm,rdma_ucm,ib_core
xhci_pci 20480 0
xhci_hcd 262144 1 xhci_pci
ahci 40960 2
libahci 32768 1 ahci
libata 270336 2 libahci,ahci
sd_mod 53248 4
crc32c_intel 24576 3
nvme 49152 0
nvme_core 102400 1 nvme
scsi_mod 253952 4 sd_mod,libata,ib_iser,sg
mgag200 20480 0
i2c_algo_bit 16384 1 mgag200
video 49152 1 mgag200
backlight 20480 1 video
button 16384 0
serio_raw 16384 0
virtio_console 28672 0
virtio_rng 16384 0
virtio_net 57344 0
virtio_blk 28672 3
net_failover 24576 1 virtio_net
failover 20480 1 net_failover
virtio_pci 28672 0
virtio_ring 28672 5 virtio_blk,virtio_pci,virtio_net,virtio_console,virtio_rng
virtio 16384 6 virtio_blk,virtio_pci,virtio_net,virtio_console,virtio_rng,virtio_ring
ip_tunnel 24576 0
ipv6 524288 54 ip6table_mangle,ip6table_filter,ip6table_nat,nft_chain_route_ipv6,nft_chain_filter_ipv6,nft_reject_ipv6,bridge,nf_conntrack,nf_defrag_ipv6

# 查看特定模块
$ lsmod | grep virtio
virtio_console 28672 0
virtio_rng 16384 0
virtio_net 57344 0
virtio_blk 28672 3
virtio_pci 28672 0
virtio_ring 28672 5 virtio_blk,virtio_pci,virtio_net,virtio_console,virtio_rng
virtio 16384 6 virtio_blk,virtio_pci,virtio_net,virtio_console,virtio_rng,virtio_ring

3.2 modprobe命令使用

modprobe命令用于加载或卸载内核模块,会自动处理模块依赖关系。

# 加载模块
$ sudo modprobe virtio_net

# 卸载模块
$ sudo modprobe -r virtio_net

# 加载模块并设置参数
$ sudo modprobe virtio_net max_virtqueue_pairs=8

# 查看模块信息
$ modinfo virtio_net
filename: /lib/modules/5.14.0-362.13.1.el9_3.x86_64/kernel/drivers/net/virtio_net.ko.xz
license: GPL
description: Virtio network driver
author: Rusty Russell
srcversion: 1234567890ABCDEF1234567
alias: virtio:d00000001v*’
depends: virtio,virtio_ring,net_failover
retpoline: Y
intree: Y
name: virtio_net
vermagic: 5.14.0-362.13.1.el9_3.x86_64 SMP mod_unload modversions
sig_id: PKCS#7
signer: Red Hat Enterprise Linux kernel signing key
sig_key: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78
sig_hashalgo: sha256
signature: 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78
parm: max_virtqueue_pairs:Maximum number of virtqueue pairs (default: 32)
parm: csum:Enable checksumming (default: Y)
parm: gso:Enable GSO (default: Y)
parm: mac:MAC address
parm: speed:Network speed (default: 0)
parm: duplex:Network duplex (default: 0)
parm: mtu:MTU size (default: 1500)

3.3 rmmod命令使用

rmmod命令用于卸载内核模块,不会自动处理依赖关系。

# 卸载模块
$ sudo rmmod virtio_net

# 卸载多个模块
$ sudo rmmod virtio_net virtio_blk

# 查看模块依赖
$ lsmod | grep -E “virtio|used by”
Module Size Used by
virtio_console 28672 0
virtio_rng 16384 0
virtio_net 57344 0
virtio_blk 28672 3
net_failover 24576 1 virtio_net
failover 20480 1 net_failover
virtio_pci 28672 0
virtio_ring 28672 5 virtio_blk,virtio_pci,virtio_net,virtio_console,virtio_rng
virtio 16384 6 virtio_blk,virtio_pci,virtio_net,virtio_console,virtio_rng,virtio_ring

# 注意:如果模块被其他模块使用,需要先卸载使用它的模块
$ sudo rmmod net_failover
$ sudo rmmod virtio_net

风哥提示:使用rmmod卸载模块时,需要先卸载依赖该模块的其他模块,否则会失败。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 网络模块管理案例

案例:网络模块加载与配置

# 查看当前网络模块
$ lsmod | grep -E “e1000|igb|r8169”
igb 237568 0

# 加载网络模块
$ sudo modprobe e1000e

# 验证模块加载
$ lsmod | grep e1000e
e1000e 286720 0

# 查看网络接口
$ ip link show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff
3: eth1: mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:11:22:33:44:66 brd ff:ff:ff:ff:ff:ff

# 配置网络接口
$ sudo nmcli con add type ethernet ifname eth0 con-name eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8

# 激活网络连接
$ sudo nmcli con up eth0

# 测试网络连接
$ ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=11.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=12.1 ms

— 8.8.8.8 ping statistics —
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 11.932/12.114/12.308/0.168 ms

4.2 存储模块管理案例

案例:存储模块加载与配置

# 查看当前存储模块
$ lsmod | grep -E “ahci|nvme|md_mod”
ahci 40960 2
nvme 49152 0
nvme_core 102400 1 nvme
md_mod 159744 0

# 加载RAID模块
$ sudo modprobe md_mod

# 验证模块加载
$ lsmod | grep md_mod
md_mod 159744 0

# 创建RAID设备
$ sudo mdadm –create /dev/md0 –level=1 –raid-devices=2 /dev/sdb /dev/sdc

# 查看RAID状态
$ sudo mdadm –detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Apr 6 10:00:00 2026
Raid Level : raid1
Array Size : 976762432 (931.51 GiB 1000.20 GB)
Used Dev Size : 976762432 (931.51 GiB 1000.20 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent

Intent Bitmap : Internal

Update Time : Wed Apr 6 10:05:00 2026
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

Consistency Policy : bitmap

Name : fgedu.net.cn:0 (local to host fgedu.net.cn)
UUID : 12345678-1234-1234-1234-1234567890ab
Events : 12

Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc

# 格式化RAID设备
$ sudo mkfs.xfs /dev/md0

# 挂载RAID设备
$ sudo mount /dev/md0 /mnt/raid1

# 验证挂载
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 5.0G 45G 10% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.0M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/md0 932G 73M 932G 1% /mnt/raid1

4.3 图形模块管理案例

案例:图形模块加载与配置

# 查看当前图形模块
$ lsmod | grep -E “i915|nouveau”
i915 3092480 0

# 加载图形模块
$ sudo modprobe i915

# 验证模块加载
$ lsmod | grep i915
i915 3092480 0

# 查看图形设备
$ lspci -k | grep -A 5 VGA
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Desktop) (rev 02)
DeviceName: Onboard – Video
Subsystem: Dell UHD Graphics 630 (Desktop)
Kernel driver in use: i915
Kernel modules: i915

# 查看图形驱动信息
$ modinfo i915 | head -20
filename: /lib/modules/5.14.0-362.13.1.el9_3.x86_64/kernel/drivers/gpu/drm/i915/i915.ko.xz
license: GPL and additional rights
description: Intel Graphics
author: Intel Corporation
author: Tungsten Graphics, Inc.
srcversion: 1234567890ABCDEF1234567
alias: pci:v00008086d00001602sv*sd*bc03sc*i*
alias: pci:v00008086d00001606sv*sd*bc03sc*i*
alias: pci:v00008086d0000160Asv*sd*bc03sc*i*
alias: pci:v00008086d0000160Bsv*sd*bc03sc*i*
alias: pci:v00008086d0000160Dsv*sd*bc03sc*i*
alias: pci:v00008086d00001612sv*sd*bc03sc*i*
alias: pci:v00008086d00001613sv*sd*bc03sc*i*
alias: pci:v00008086d00001616sv*sd*bc03sc*i*
alias: pci:v00008086d00001617sv*sd*bc03sc*i*
alias: pci:v00008086d0000161Asv*sd*bc03sc*i*
alias: pci:v00008086d0000161Bsv*sd*bc03sc*i*
depends: drm_kms_helper,drm,video
retpoline: Y
intree: Y
name: i915
vermagic: 5.14.0-362.13.1.el9_3.x86_64 SMP mod_unload modversions

生产环境建议:内核模块管理是系统维护的重要部分,应定期检查加载的模块,确保只加载必要的模块,避免加载不安全或不需要的模块。from Linux:www.itpux.com

Part05-风哥经验总结与分享

5.1 模块故障排查

常见模块问题及排查:

  1. 模块加载失败:检查模块文件是否存在,依赖是否满足
  2. 模块冲突:检查是否有冲突的模块
  3. 模块参数错误:检查模块参数是否正确
  4. 模块版本不匹配:确保模块与内核版本匹配
  5. 模块权限问题:检查模块文件权限

5.2 模块维护技巧

模块维护技巧:

  • 定期检查:定期检查加载的模块
  • 清理无用模块:卸载不需要的模块
  • 更新模块:及时更新模块以修复漏洞
  • 备份配置:备份模块配置文件
  • 文档化:记录模块配置和变更

5.3 风哥建议

风哥建议:

  • 按需加载:只加载必要的模块
  • 自动加载:配置模块自动加载
  • 黑名单:禁止加载不需要的模块
  • 安全审计:监控模块加载和卸载
  • 持续学习:关注内核新特性和模块更新
风哥提示:内核模块管理是系统维护的重要部分,应定期检查加载的模块,确保只加载必要的模块,避免加载不安全或不需要的模块。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息