Fork me on GitHub

Linux内核管理

1. 使用内核模块

管理内核模块,需使用kmod实用程序,安装方法如下:

[root@localhost ~]# yum install kmod



1.1 什么是内核模块

Linux内核在设计上是单一的,但是,它根据每个用例的要求使用可选或附加模块进行编译,这意为着你可以通过使用动态加载内核模块来扩展内核的功能,内核模块可以提供:

  • 设备驱动程序,增加了对新硬件的支持
  • 支持文件系统,如GFS2或NFS

与内核本身一样,模块可以采用自定义其行为的参数,但默认参数在大多数情况下都能正常工作,用户空间工具可以列出当前加载到正在运行的内核中的模块。可以使用kmod软件包提供的实用程序查询可用参数和模块特定信息。它会自动考虑模块的依赖性,因此很少需要手动依赖性跟踪。

在现代系统上,内核模块在需要时通过各种机制自动加载,但是,有时需要手动加载或卸载模块。



1.2 列出当前加载的模块

你可以通过运行lsmod命令列出当前加载到内核中的所有内核模块,例如:

[root@localhost ~]# lsmod  | head 
Module                  Size  Used by
ip_set                 45644  0 
nfnetlink              14490  1 ip_set
bridge                151336  0 
stp                    12976  1 bridge
llc                    14552  2 stp,bridge
vmw_vsock_vmci_transport    30577  1 
vsock                  36526  2 vmw_vsock_vmci_transport
ppdev                  17671  0 
iosf_mbi               15582  0 

输出的结果有三列,意为:

  • Module:当前加载到内存中的内核模块的名称
  • Size:内核模块使用的内存量,以千字节为单位
  • Used by:
    • 一个十进制数,表示Module字段中有多少依赖
    • 逗号分隔的是依赖模块,你可以按照此列表,根据需要去卸载模块,



1.3 显示模块的详细信息

要显示有关e1000e模块的信息(英特尔PRO/1000网络驱动程序),请输入一下命令:

[root@localhost ~]# modinfo e1000e | head
filename:       /lib/modules/3.10.0-957.10.1.el7.x86_64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko.xz
version:        3.2.6-k
license:        GPL
description:    Intel(R) PRO/1000 Network Driver
author:         Intel Corporation, <linux.nics@intel.com>
retpoline:      Y
rhelversion:    7.6
srcversion:     F8C737C12D21329E5AFED63
alias:          pci:v00008086d000015E2sv*sd*bc*sc*i*
alias:          pci:v00008086d000015E1sv*sd*bc*sc*i*






2. 使用Sysctl和内核可调参数



2.1 什么是内核可调参数

内核可调参数用于在引导时自定义 Red Hat Enterprise Linux 的行为,或在系统运行时按需自定义,某些硬件参数仅在引导时指定,并且在系统运行后无法更改,但大多数可以根据需要进行更改,并为下次引导设置永久性。



2.2 如何使用内核可调参数

有三种方法可以修改内核可调参数:

  • 使用 sysctl 命令
  • 通过手动修改配置文件 /etc/sysctl.d/ 目录
  • 通过shell,与安装在/proc/sys中的虚拟文件系统进行交互
  • 可通过man sysctl.d 手册查阅详细信息



2.2.1 使用 sysctl 命令

sysctl 命令用于列出,读取和设置内核可调参数,它可以在列出或读取时过滤可调参数,并临时或永久设置可调参数。


  • 列出变量

    sysctl -a
    
  • 读取变量

    sysctl kernel.version
    
  • 临时写变量

    sysctl net.ipv4.ip_forward=1
    
  • 永久写变量

    sysctl -w net.ipv4.ip_forward=1
    



2.2.2 修改 /etc/sysctl.d/ 中的文件

要在引导时覆盖默认值,你还可以手动配置文件/etc/sysctl.d/

  • /etc/sysctl.d/下创建一个新文件

    vim /etc/sysctl.d/99-custom.conf
    
  • 写入你希望设置的变量,每行一个

    net.ipv4.ip_forward = 1
    
  • 重新启动计算机以使其更改生效,或者执行命令以应用更改而不重新启动

    sysctl -p /etc/sysctl.d/99-custom.conf
    

网络可调参数文档连接:https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt



2.3 可以控制哪些可调参数

sysctl接口表

Class 子系统
abi 执行域和个性
crypto 加密接口
debug 内核和调试接口
dev 设备特定信息
fs 全局和特定文件系统可调参数
kernel 全局内核可调参数
net 网络可调参数
sunrpc Sun远程过程调用(NFS)
user 用户空间限制
vm 调整和管理内存,缓冲区和缓存



2.4 网络接口可调参数

系统管理源可以通过网络可调参数调整正在运行的系统上的网络配置

网络可调参数包含在 /proc/sys/net 目录中,该目录包含用于各种网络主题的多个字目录,要调整网络配置,系统管理员需要修改此类子目录中的文件。


最常用的目录是:

  • /proc/sys/net/core/

    该目录包含各种控制内核和网络层之间交互的设置,,通过调整其中一些可调参数,可以提高系统性能,例如通过增加接收队列的大小,增加最大连接数或专用于网络接口的内存,请注意,系统的性能取决于各个问题的不同方面。

  • /proc/sys/net/ipv4/

    该目录包含其他网络设置,在防止对系统的攻击或使用系统充当路由器时非常忧用,该目录包含IP和TCP变量。

    • 目录中的其他目录/proc/sys/net/ipv4/涵盖网络堆栈的不同方面。
      1. /proc/sys/net/ipv4/conf/ - 允许你以不同方式配置每个系统接口,包括使用未配置设备的默认设置和覆盖所有特殊配置的设置
      2. /proc/sys/net/ipv4/neigh/ - 包含与直接连接到系统的主机通信的设置,还包含多个步骤以外的系统的不同配置
      3. /proc/sys/net/ipv4/route - 包含适用于使用系统上任何接口进行路由的规范

内核可调参数文档连接:https://www.kernel.org/doc/Documentation/sysctl/kernel.txt

posted on 2019-05-05 13:58  刘合栋  阅读(892)  评论(0编辑  收藏  举报