星期三, 七月 04, 2007

prev: RHCE 实践练习(2004.5.17~31)

1. 排错
(1) kickstart 安装;
. 将 ks.cfg 文件放在本地或安装启动盘上,再在 ks.cfg 中指定使用网络安装也是可以的:
nfs --server 192.168.x.x --dir /PATH # 放置 iso 文件的目录
在安装系统的过程中十几分钟的时间怎么利用?

(2) rescue 模式的使用;

(3) 启动问题:
a. 熟记启动的详细过程,清楚各个环节:

Initrd

名称
initrd -- 由启动加载器进行初始化的RAM DISK

描述
/dev/initrd这个特殊文件是一个只读的块设备文件。/dev/initrd设备文件是一个在内核被启动之前由启动加载器进行初始化的RAM disk。

随后,内核利用/dev/initrd设备文件的内容进行两个阶段的(系统)自举。

在(系统)自举的第一个阶段,内核进行初始化,根据/dev/initrd的内容挂载一个原始根文件系统。

在第二个阶段,一些附加的驱动或者其他模块从原始的根设备中被加载。在加载完附加模块后,一个新的根文件系统(也就是常规的根文件系统)从别的设备被挂载。

自举操作流程
使用initrd进行系统自举,系统初始化如下:

1.启动加载器把内核程序以及/dev/initrd的内容加载到内存

2.在内核初始化过程中,内核把/dev/initrd设备的内容解压缩并拷贝到/dev/ram0设备上,随之释放被/dev/initrd占用的内存空间

3.接着内核以可读写的方式把/dev/ram0设备挂载为原始的根文件系统

4.如果(不知道如何翻译indicated)常规根文件系统也是原始根文件系统(举例来说,/dev/ram0),那么内核跳至最后一步正常启动

5.如果可执行文件/linuxrc存在于原始根文件系统上,/linuxrc就以uid为0的帐户身份被执行。(/linuxrc文件必须具有可执行属性,它可以是包括shell脚本在内的任何有效的可执行文件)

6.如果/linuxrc没有被执行或者当/linuxrc(的运行)终止时,常规根文件系统被挂载。(如果/linuxrc退出时在原始根文件系统上挂载了任意文件系统,那么内核的行为则是不定的。阅读注意事项以确定当前的内核行为)

7. 如果常规根文件系统存在/initrd目录,那么/dev/ram0将从/移动到/initrd。否则如果/initrd目录不存在, /dev/ram0将被卸载。(当从/移动到/initrd而/dev/ram0没有被卸载时,会导致进程仍能从/dev/ram0运行)。如果 /initrd目录不存在,并且当/linuxrc退出时任何进程仍能从/dev/ram0运行,内核的行为是不定的。阅读注意事项以确定当前内核的行 为。)

8.正常的启动过程(比如/sbin/init的调用)将在常规根文件系统上进行
...
注意事项
1.在当前内核下,当/dev/ram0从/被移动到/initrd时,任何已挂载的文件系统依然能被访问。然而,/proc/mounts条目不会被更新。
2.在当前内核下,如果/initrd不存在,如果/dev/ram0被其他进程使用中或者有任何文件系统被挂载其上,/dev/ram0将不会被完全卸载。如果/dev/ram0没有被完全卸载,那么/dev/ram0将驻留在内存

也 就是说,因为模块都编译在 /lib/modules/$(uname -r) 中,在内核启动时,一开始是没有办法挂载 / 分区的,而如果这时有一些内核选项如 SCSI 硬盘等编译成了模块,不使用 initrd 就没有办法加载了!另外,如果内核太大,既影响性能,又不利于备份。如果挂载的原始文件系统也是最终的根文件系统,系统将跳过initrd处理而继续正常 的初始化过程。


创建 /dev/initrd 文件的命令:
# mknod -m 400 /dev/initrd b 1 250
# chown root:disk /dev/initrd
要使用 initrd,编译内核时必须选择以下两项:
CON-FIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_INITRD=y
即 RAM disk driver 不能作为模块加载。

想知道你的initrd.img中包含了哪些驱动程序吗?
# cat initrd.img | gunzip > /tmp/myinitrdfs
# mkdir /mnt/tmp
# mount -o loop -t ext2 /tmp/myinitrdfs /mnt/tmp
然后查看 /mnt/tmp 中的文件 linuxrc 中的内容即可知道启动时会装入哪些驱动程序。

你也可以更改其中的内容,假设我们想加另一种 SCSI 驱动 aic7xxx.o 进入你的 initrd.img:
# cd /mnt/tmp
# vi linuxrc 加上一行 insmod /lib/aic7xxx.o
# cp /lib/modules/`uname -r`/scsi/aic7xxx.o lib/
# cd /
# umount /mnt/tmp
# dd if=/tmp/myinitrdfs | gzip > /boot/initrd2.img
至此,新的initrd文件initrd2.img就包含了aic7xxx的驱动程序了。

http://www.linuxsir.org/bbs/showthread.php?t=113586

b. 在启动时注意出现的问题,查看启动信息;

c. grub 和 lilo 的使用和排错;

d. 一些启动的关键程序和文件被替换或丢失的情况:如 /bin/mount, /etc/inittab;

(4) 分析系统日志及系统监视:了解一些关键应用和服务在什么日志文件中,及如何使用 logwatch;
. iptables 可以使用如下方式进行日志记录:

modprobe ipt_LOG
... -j LOG --log-level 0 --log-prefix "STRING: "


(5) X Window 排错;

(6) 系统排错一般思路;
/etc/securetty root 可以登陆的终端!

2. 网络架设:
(1) 编译内核;
System.map 是内核符号表,然而很多文档提及,它并非用于内核,换言之,内核不需要它来确定函数位置;它大多用于 log 工具以及调试工具。

(2) ssh,注意结合 X Window;

(3) NIS:注意 auotfs;

3. 其他:
(1) 所有在线文档的查阅!

没有评论: