debian5 内核升级与模块加载

         最近有台服务器需要安装ssd卡,因为安装驱动需要内核2.6.32,而debian5机器默认还是2.6.18,所有首先需要升级内核.

1.安装2.6.32内核需要debian6的源

[email protected]:~# uname -a
Linux 10.1.1.200 2.6.18-6-amd64
[email protected]:~# vim /etc/apt/sources.list
deb http://mirrors.163.com/debian squeeze main non-free contrib   
deb http://mirrors.163.com/debian-security squeeze/updates main contrib non-free
2.安装2.6.32头文件和镜像
[email protected]:~# apt-get install linux-headers-2.6.32-5-amd64 linux-image-2.6.32-5-amd64 
升完内核默认会将/boot/grub/menu.lst,/etc/fstab文件里磁盘位置更换为UUID,记得手动加入 console=tty0 console=ttyS1,115200 已供ipmi查看重启过程界面状态.
[email protected]:grub# cat menu.lst | egrep -v '^#|^$' 
default		0
timeout		5
color cyan/blue white/blue
title		Debian GNU/Linux, kernel 2.6.32-5-amd64
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.32-5-amd64 root=UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28 ro console=tty0 console=ttyS1,115200
initrd		/boot/initrd.img-2.6.32-5-amd64
title		Debian GNU/Linux, kernel 2.6.32-5-amd64 (single-user mode)
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.32-5-amd64 root=UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28 ro single console=tty0 console=ttyS1,115200
initrd		/boot/initrd.img-2.6.32-5-amd64
title		Debian GNU/Linux, kernel 2.6.26-2-amd64
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.26-2-amd64 root=UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28 ro console=tty0 console=ttyS1,115200
initrd		/boot/initrd.img-2.6.26-2-amd64
title		Debian GNU/Linux, kernel 2.6.26-2-amd64 (single-user mode)
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.26-2-amd64 root=UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28 ro single console=tty0 console=ttyS1,115200
initrd		/boot/initrd.img-2.6.26-2-amd64
title		Debian GNU/Linux, kernel 2.6.18-6-amd64
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.18-6-amd64 root=UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28 ro console=tty0 console=ttyS1,115200
initrd		/boot/initrd.img-2.6.18-6-amd64
title		Debian GNU/Linux, kernel 2.6.18-6-amd64 (single-user mode)
root		(hd0,0)
kernel		/boot/vmlinuz-2.6.18-6-amd64 root=UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28 ro single console=tty0 console=ttyS1,115200
initrd		/boot/initrd.img-2.6.18-6-amd64
 

[email protected]:grub# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# /dev/sda1       /               ext3    noatime,commit=15,errors=remount-ro 0       1
UUID=4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28       /               ext3    noatime,commit=15,errors=remount-ro 0       1
# /dev/sda5       none            swap    sw              0       0
UUID=bd42e7e0-1f64-4d31-9e16-842a920b7162       none            swap    sw              0       0
# /dev/sda6       /opt            ext3    noatime,commit=15,errors=remount-ro	0       0
UUID=670e1dbf-8848-4a25-b200-4483f95adcc1       /opt            ext3    noatime,commit=15,errors=remount-ro	0       0
# /dev/sda7       /db_bak          ext3    noatime,commit=15,errors=remount-ro     0       0
UUID=7f4f1207-d74e-4048-9e76-c4cd1081513b       /db_bak          ext3    noatime,commit=15,errors=remount-ro     0       0
# /dev/sda8       /export         ext3    noatime,commit=15,errors=remount-ro     0       0
UUID=3500e14f-e89b-42c9-a4f2-0da4db8843ff       /export         ext3    noatime,commit=15,errors=remount-ro     0       0

这里一定要核对系统分区的UUID值和以上文件里是否一致,可用blkid查询

[email protected]:grub# blkid 
/dev/sda1: UUID="4f343e7c-3c29-4ce6-9bf6-0ee46c07ee28" TYPE="ext3" 
/dev/sda5: TYPE="swap" UUID="bd42e7e0-1f64-4d31-9e16-842a920b7162" 
/dev/sda6: UUID="670e1dbf-8848-4a25-b200-4483f95adcc1" TYPE="ext3" SEC_TYPE="ext2" 
/dev/sda7: UUID="7f4f1207-d74e-4048-9e76-c4cd1081513b" TYPE="ext3" SEC_TYPE="ext2" 
/dev/sda8: UUID="3500e14f-e89b-42c9-a4f2-0da4db8843ff" TYPE="ext3" SEC_TYPE="ext2" 
[email protected]:grub# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              28G  1.9G   25G   8% /
tmpfs                  16G     0   16G   0% /lib/init/rw
udev                   10M   76K   10M   1% /dev
tmpfs                  16G     0   16G   0% /dev/shm
/dev/sda6             917G  1.8G  869G   1% /opt
/dev/sda7             459G  199M  435G   1% /db_bak
/dev/sda8             238G  188M  225G   1% /export

重启机器,内核升级完成

[email protected]:grub# uname -a
Linux 10.1.1.2 2.6.32-5-amd64 


模块加载

这里先讲解下内核是如何载入模块的.

1.查看现在内核加载的模块

lsmod #可以查看现在内核加载的模块,是通过读取/proc/modules/中的内容来查看的

[email protected]:~# lsmod 
Module                  Size  Used by
hio                    29631  0 
ipmi_si                30960  1 
ipmi_devintf            6587  0 
ipmi_poweroff           6705  0 
ipmi_watchdog          12737  0 
ipmi_msghandler        26634  4 ipmi_si,ipmi_devintf,ipmi_poweroff,ipmi_watchdog
loop                   11799  0 
.........
crc_t10dif              1276  1 sd_mod
raid1                  18431  0 
md_mod                 73872  1 raid1

2.内核是如何载入模块的

当内核所需要的扩展功能不存在时,内核模块管理守护进程kmod执行modprobe去加载内核模块,两种类型的参数可以传给modprobe

a.模块的名字,如md

b.通用识别符,如block-major-9-*

   当传给modprobe的参数是通用识别符时,modprobe首先在modprobe -c 或/etc/modprobe.d/aliases中查找该字符串,如果它发现有一行像alias block-major-9-*  md说明要加载的是md模块,然后遍历/lib/modules/2.6.32-5-amd64/modules.dep 来判断是否有其他内核模块需要在加载此模块前加载.该文件由depmod  -a来创建, 保存着内核模块的依赖关系.

[email protected]:~# modprobe -c | grep "md_mod"
alias block-major-9-* md_mod
alias md md_mod
[email protected]:~# cat /etc/modprobe.d/aliases | egrep -v '^#|^$' | grep 'md'
alias block-major-9-*  md

  最终modprobe调用inmod来先加载需要依赖的模块,然后加载此模块inmod将指向/lib/modules/2.6.32-5-amd64/kernel/....为模块的专门存放的目录.

   载入一个模块有2种方法:

1)#insmod 后面必须要写明全部的路径

#insmod /lib/modules/2.6.32-5-amd64/kernel/drivers/md/md-mod.ko
2) modprobe会调用insmod来加载模块
#modprobe md

  modeprobe和insmod都可以安装模块,但是,modeprobe会依靠分析模块之间的依赖关系,然后又先后顺序的加载必需的模块,然后再加载当前的模块,而insmod就只会加载你所制定的这个模块,一旦它有一些依赖关系,容易出错的.

   卸载模块:

#rmmod md 
或#modprode -r md


modules常用参数

-c 查看modules的配置文件

[email protected]:~# modprobe -c | grep md_mod
alias block-major-9-* md_mod
alias md md_mod
-l 列出内核中所有已经或者未挂载的所有模块
[email protected]:~# modprobe -l | grep md-mod
/lib/modules/2.6.32-5-amd64/kernel/drivers/md/md-mod.ko
-r移除模块
[email protected]:~# modprobe -r md

     

      上面了解了模块加载的过程,由于ssd的驱动已经编译好,这里直接dpgk安装即可

[email protected]:~# dpkg -i hio-1.0-0.7.amd64.deb 
Selecting previously deselected package hio.
(Reading database ... 46823 files and directories currently installed.)
Unpacking hio (from hio-1.0-0.7.amd64.deb) ...
Setting up hio (1.0-0.7) ...
[email protected]:~# modprobe -l | grep hio
/lib/modules/2.6.32-5-amd64/kernel/drivers/hio/hio.ko
[email protected]:~# lsmod | grep hio
hio                    29631  0 
[email protected]:~# modprobe -c | grep hio
alias pci:v000010EEd00000007sv*sd*bc*sc*i* hio
再次查看ssd卡结果已识别/dev/hioa
[email protected]:~# fdisk -l

Disk /dev/sda: 730.8 GB, 730815528960 bytes
255 heads, 63 sectors/track, 88849 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000e801e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        3706    29768413+  83  Linux
/dev/sda2            3707       88849   683911147+   f  W95 Ext'd (LBA)
/dev/sda5            3707        4694     7936078+  82  Linux swap / Solaris
/dev/sda6            4695       41168   292977373+  83  Linux
/dev/sda7           41169       65484   195318238+  83  Linux
/dev/sda8           65485       88849   187679331   83  Linux

Disk /dev/hioa: 642.8 GB, 642835808256 bytes
4 heads, 16 sectors/track, 19617792 cylinders
Units = cylinders of 64 * 512 = 32768 bytes
Disk identifier: 0x00000000

Disk /dev/hioa doesn't contain a valid partition table


你可能感兴趣的:(模块加载,内核升级,modprobe)