Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1146338
  • 博文数量: 309
  • 博客积分: 6093
  • 博客等级: 准将
  • 技术积分: 3038
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-03 17:14
个人简介

linux学习记录

文章分类

全部博文(309)

文章存档

2014年(2)

2012年(37)

2011年(41)

2010年(87)

2009年(54)

2008年(88)

分类:

2010-08-25 15:34:38

                      RHCE学习笔记

 

关于linux下面内核服务的管理的讨论,

 

Linux内核

内核是linux操作系统的核心部分,

内核的职责:

1 系统初始化     检测硬件资源并引导系统

2 进程的调度      决定进程的启动和允许时间

3 内存的管理     为允许的进程分配内存

4 安全                 经常校验文件系统的权限,selinux环境和防火墙规则

还可以提高缓冲和缓存以提高硬件的访问速度

采用标准网络协议和文件系统格式

那我们linux内核在系统中的哪里呢

[root@localhost ~]#

[root@localhost ~]# cd /boot/

[root@localhost boot]#

[root@localhost boot]# ll -h | grep vm

-rw-r--r-- 1 root root 1.8M Aug 19  2009 vmlinuz-2.6.18-164.el5

[root@localhost boot]#

这个文件就是linux系统的内核文件,这个文件的大小为1.8M。我们可以看到,linux内核很小,主要是为了系统运行的更快,保证安全。内核越庞大,其漏洞也就会越多,内核怎么小,怎么能够提供那么强大的功能呢,因为linux很多功能都是由模块来提供的,linux也叫模块化的操作系统。

 

内核的映像和版本

支持的平台: x86(32)   x86_64(64)   IA64/Itanium  PowerPC64  s390x

32位最多支持4G的内存。 

可用于X86的三种内核版本

常规的 :  一个或多个处理器,最多可以支持4G内存。

PAE   :   多处理器,可以支持64G的内存。

Xen   :    虚拟化所需。

关于linux内核的版本

RHEL5.1     2.6.18-53.el5

RHEL5.4     2.6.18-164.el5

2.6             主版本

18                次版本

53                修正版

El5       红帽封装的

2.4   2.6   2.8  这些偶数位的内核版本代表正式版,

2.3   2.5   2.7  这些奇数位的内核版本代表测试版。

 

内核模块

模块是小型的,可根据需要装载或者卸载的内核扩展。

那么内核模块在系统中哪里呢

[root@localhost ~]#

[root@localhost ~]# cd /lib/modules/

[root@localhost modules]# ls

2.6.18-164.el5  2.6.18-164.el5PAE

[root@localhost modules]#

可以看到,这里有两个文件夹,现在看下来我们使用的是那个内核。

[root@localhost modules]#

[root@localhost modules]# uname -r

2.6.18-164.el5

[root@localhost modules]#

我们使用的是常规内核,进入2.6.18-164.el5这个目录

[root@localhost modules]#

[root@localhost modules]# cd 2.6.18-164.el5

[root@localhost 2.6.18-164.el5]# ls

build   modules.alias      modules.inputmap   modules.seriomap  updates

extra   modules.ccwmap  modules.isapnpmap  modules.symbols   weak-updates

kernel  modules.dep          modules.ofmap      modules.usbmap

misc    modules.ieee1394map  modules.pcimap     source

[root@localhost 2.6.18-164.el5]# cd kernel/

[root@localhost kernel]# ls

arch  crypto  drivers  fs  lib  net  sound

[root@localhost kernel]# cd fs/

[root@localhost fs]# ls

autofs4    cramfs    ext3      fscache  hfsplus  lockd       nfsd      vfat

cachefiles  dlm      ext4     fuse    jbd    msdos       nls

cifs        ecryptfs  fat      gfs2     jbd2    nfs         squashfs

configfs    exportfs  freevxfs  hfs      jffs2    nfs_common  udf

[root@localhost fs]#

在这里可以看到,我们的系统支持所有的文件系统都在这里拉。

[root@localhost fs]#

[root@localhost fs]# cd ext3/

[root@localhost ext3]# ls

ext3.ko

[root@localhost ext3]#

每个目录里面都有一个模块,并且都是以.ko结尾的。

linux系统中,以.ko结尾的都是模块。

 

内核模块的管理工具

查询系统中有多少模块被加载了

#lsmod

[root@localhost ~]#

[root@localhost ~]# lsmod | grep ext3

ext3                  125001  4

jbd                    57065  1 ext3

[root@localhost ~]#

手动加载和卸载模块

#modprobe  vfat

#modprobe  -r   vfat

[root@localhost ~]#

[root@localhost ~]# modprobe vfat

[root@localhost ~]#

[root@localhost ~]# lsmod | grep vfat

vfat                   15937    0

fat                    51165     1   vfat

[root@localhost ~]#

[root@localhost ~]# modprobe -r vfat

[root@localhost ~]#

[root@localhost ~]# lsmod | grep vfat

[root@localhost ~]#

查询模块的详细信息

#modinfo  ext3

[root@localhost ~]#

[root@localhost ~]# modinfo ext3

filename:        /lib/modules/2.6.18-164.el5/kernel/fs/ext3/ext3.ko

license:          GPL

description:    Second Extended Filesystem with journaling extensions

author:          Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others

srcversion:      51D84081C475FE078B1D891

depends:        jbd

vermagic:       2.6.18-164.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1

module_sig:     883f3504a8b7a0d18758d6145e112f4300a08dae31fac7f50d1e7b6d5b862d010384fbc1ea609f47bb1fe9f093d11a96a74986f486c45bf3ea246

[root@localhost ~]#

 

关于/etc/modprobe.conf文件

这个文件是模块的配置文件,

在这个模块配置文件里面可以定义模块的别名,

在加载模块的时候,系统会自动读取模块的配置文件。

 

管理initrd映像

这个文件通常叫做RAM DISK文件,

我们知道在系统启动的过程中,计算机会先加载根文件系统,根文件系统又是一个ext3的文件系统,所以计算机必须先加载ext的模块,但是ext3的模块又是在根文件系统下面。这样就会有个矛盾。所以我们RAM DISK文件中就有系统在启动的时候需要加载的模块文件。

[root@localhost ~]#

[root@localhost ~]# cd /tmp/

[root@localhost tmp]# ls

[root@localhost tmp]# cp /boot/initrd-2.6.18-164.el5.img .

[root@localhost tmp]# ls

initrd-2.6.18-164.el5.img

[root@localhost tmp]# zcat initrd-2.6.18-164.el5.img |cpio -imd

11798 blocks

[root@localhost tmp]# ls

bin  dev  etc  init  initrd-2.6.18-164.el5.img  lib  proc  sbin  sys  sysroot

[root@localhost tmp]# cd lib/

[root@localhost lib]# ls

ata_piix.ko   dm-region_hash.ko  mptbase.ko   scsi_transport_spi.ko

dm-log.ko     ehci-hcd.ko       mptscsih.ko  sd_mod.ko

dm-mem-cache.ko  ext3.ko            mptspi.ko    uhci-hcd.ko

dm-message.ko    firmware           ohci-hcd.ko  vmxnet3.ko

dm-mod.ko        jbd.ko             pvscsi.ko    vmxnet.ko

dm-raid45.ko     libata.ko          scsi_mod.ko

[root@localhost lib]#

这个里面就有我们系统在启动的时候需要加载的模块。

如何重新生成这个RAM DISK文件呢

[root@localhost ~]# cd /boot/

[root@localhost boot]#

[root@localhost boot]# ls | grep initrd-2.6.18-164.el5

initrd-2.6.18-164.el5.img

initrd-2.6.18-164.el5kdump.img

initrd-2.6.18-164.el5PAE.img

[root@localhost boot]# rm -rf initrd-2.6.18-164.el5.img

[root@localhost boot]# ls | grep initrd-2.6.18-164.el5.img

[root@localhost boot]#

我们已经删除了RAM DISK文件,那么我们系统在下次启动的时候是肯定不能够正常启动的。

现在我们重新生成一下这个文件,

[root@localhost ~]#

[root@localhost ~]# mkinitrd /boot/initrd-$(uname -r).img $(uname -r)

[root@localhost ~]# cd /boot/

[root@localhost boot]# ls | grep initrd-2.6.18-164.el5.img

initrd-2.6.18-164.el5.img

[root@localhost boot]#

这个RAM DISK文件又重新回来了。

我们也可以在生成这个文件的时候指定要加载的模块,

[root@localhost ~]#

[root@localhost ~]# mkinitrd --with=raid5 /boot/initrd-$(uname -r).img $(uname -r)

[root@localhost ~]#

使用- - with参数来添加指定的模块。

 

使用/proc进行内核的配置

/proc用来进行对内核的设置,反应当时计算机的状态。文件没有保存在硬盘上面。用来显示进程信息,内存资源,硬件设备,内核内存,等等。下次启动这些文件就都没有了。

/proc的示例

只读文件

/proc/cpuinfo

/proc/1/*

/proc/partitions

/proc/meminfo

这些信息修改并没有意义。

[root@localhost ~]#

[root@localhost ~]# more /proc/partitions

major minor  #blocks  name

 

   8     0     15728640    sda

   8     1     104391        sda1

   8     2     4192965     sda2

   8     3    4192965      sda3

   8     4          1            sda4

   8     5    1052226      sda5

   8     6    522081        sda6

[root@localhost ~]#

这是用来显示系统中的分区,修改它并没有意义。

但是有些信息也是可以被修改的。

/proc/sys/kernel/hostname

/proc/sys/net/ipv4/ip_forward

/proc/sys/vm/drop_caches

/proc/sys/vm/swappiness

这些信息是可以修改的。

 

Sysctl工具

可以使/proc/sys设置具有永久性。

/etc/sysctl.conf这个文件中去修改,在这个里面修改的会永久生效,因为在这个配置文件在/etc/rc.d/rc.sysinit这脚本里面被激活了。

列出当前设置

#sysctl  -a

sysctl.conf中重新加载

#sysctl  -p

通过/dev/访问驱动程序

/dev目录下面的文件可用来访问驱动程序。

[root@localhost ~]#

[root@localhost ~]# cd /dev/

[root@localhost dev]#

[root@localhost dev]# ls -l sda1

brw-r----- 1 root disk 8, 1 Mar  3 13:08 sda1

[root@localhost dev]#

前面的b代表是个块设备文件,后面的8代表设备的主版本号,1代表次版本号。

系统识别一个设备,其实是通过设备的设备类型,主版本号,次版本号来识别的。

我们知道cdrom是用来挂载光驱里面的光盘的。

[root@localhost dev]#

[root@localhost dev]# ll -l cdrom

lrwxrwxrwx 1 root root 3 Mar  3 13:08 cdrom -> hdc

[root@localhost dev]# ll -l hdc

brw-rw---- 1 root disk 22, 0 Mar  3 13:08 hdc

[root@localhost dev]#

可以看到我们cdrom的主版本号是22,次版本号是0

默认情况下,系统中的第一块硬盘的第一个分区/dev/sda1,应该就是b81

硬盘识别成b,第一块硬盘从8开始,1代表第一个分区。依次类推。

如果是第二块硬盘从17开始,因为一块scsi硬盘最多可以分15个分区。

应该就识别成了b817

 

创建块设备文件

#mknod  abc   b  8  1

[root@localhost ~]#

[root@localhost ~]# mknod abc b 8 1

[root@localhost ~]# ll abc

brw-r--r-- 1 root root 8, 1 Mar  3 17:23 abc

[root@localhost ~]#

 

设备节点示例

块设备

/dev/hda    /dev/hdc   IDE硬盘,光驱

/dev/sda    /dev/sdb   SCSISATA或者是USB的存储设备

/dev/md0   /dev/md1  软件RAID

字符设备

/dev/tty(0-6)          虚拟控制台

/dev/null    /dev/zero  软件设备

/dev/random /dev/urandom随即数字

 

Udev机制

Udev可管理保存在/dev/目录下的文件,

文件只有在接入相应的设备后才会生成。

文件在设备拔出后自动删除。

可以在/etc/udev/rules.d/下面去定义策略。

在这个目录下面去创建一个文件,以.rules结尾。

在这个文件中定义U盘的唯一性。

[root@localhost rules.d]#

[root@localhost rules.d]# cat 99-myusb.rules

BUS="usb",SYSFS{serial}=="21185601958E7211",NAME="myusb"

[root@localhost rules.d]#

这个就是我定义的,当一个USB的设备,并且对应这个序列号,系统就识别这个USB设备的名字叫做myusb

可以使用下面这条命令来查看U盘的信息

# udevinfo -a -p /block/sdb

 

我们可以使用hal-device-manager这个图像化界面来查看计算机的状态。

 

linux下面内核服务的讨论就到这里了。
阅读(718) | 评论(0) | 转发(1) |
0

上一篇:RHEL5.4下创建LVM

下一篇:RHEL5.4下创建RAID

给主人留下些什么吧!~~