分类: LINUX
2010-04-12 22:35:24
linux基础 2010-03-24 20:39:42 阅读24 评论0 字号:大中小
二,开机后以下几个配置文件非常重要,请务必搞清楚。.... 1
3,加载自定义模块 /etc/modprobe.conf. 3
4, 相关服务的设定档 /etc/sysconfig/*. 3
正文:
如上图所示,boot loader 可以载入 kernel 与 initrd (这两个几乎是同时加载的!) ,然后在内存中让 initrd 解压缩成为根目录, kernel 就能够借此载入适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统, 就能够开始后续的正常开机流程
答: 不见得的!需要 initrd 最重要的原因是,当开机时无法挂载根目录的情况下, 此时就一定需要 initrd ,例如你的根目录在特殊的磁盘介面 (USB, SATA, SCSI) , 或者是你的文件系统较为特殊 (LVM, RAID) 等等,才会需要 initrd。
如果你的 Linux 是安装在 IDE 介面的磁盘上,并且使用预设的 ext2/ext3 文件系统, 那么不需要 initrd 也能够顺利的开机进入 Linux 的!
注意:第一支程序 init
[root@www ~]# vim /etc/inittab <==所有的设定都是在这里定义的。所有一定要搞清楚这个文件!!!
id:5:initdefault: <==预设的 runlevel 设定, 此 runlevel 为 5
si::sysinit:/etc/rc.d/rc.sysinit <==准备系统软体执行的环境的脚本执行档
# 7 个不同 run level 的,需要启动的服务的 scripts 放置路径:
l0:0:wait:/etc/rc.d/rc 0 <==runlevel 0 在 /etc/rc.d/rc0.d/
l1:1:wait:/etc/rc.d/rc 1 <==runlevel 1 在 /etc/rc.d/rc1.d/
l2:2:wait:/etc/rc.d/rc 2 <==runlevel 2 在 /etc/rc.d/rc2.d/
l3:3:wait:/etc/rc.d/rc 3 <==runlevel 3 在 /etc/rc.d/rc3.d/
l4:4:wait:/etc/rc.d/rc 4 <==runlevel 4 在 /etc/rc.d/rc4.d/
l5:5:wait:/etc/rc.d/rc 5 <==runlevel 5 在 /etc/rc.d/rc5.d/
l6:6:wait:/etc/rc.d/rc 6 <==runlevel 6 在 /etc/rc.d/rc6.d/
# 是否允许按下 [ctrl]+[alt]+[del] 就重新开机的设定项目:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# 底下两个设定则是关于不断电系统的 (UPS),一个是没电力时的关机,一个是复电的处理
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
1:2345:respawn:/sbin/mingetty tty1 <==其实 tty1~tty6 是由底下这六行决定的。
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon <==X window 则是这行决定的!
如果你使用 vim 去查阅过 /etc/rc.d/rc.sysinit 的话,那么可以发现他主要的工作大抵有这几项:
2.1. 取得网络环境与主机类型:
读取网络设定档 /etc/sysconfig/network ,取得主机名称与预设通讯闸 (gateway) 等网络环境。
2.2. 测试与挂载内存装置 /proc 及 USB 装置 /sys:
除挂载内存装置 /proc 之外,还会主动侦测系统上是否具有 usb 的装置, 若有则会主动载入 usb 的驱动程序,并且尝试挂载 usb 的文件系统。
2.3. 决定是否启动 SELinux :
我们在第十七章谈到的 SELinux 在此时进行一些检测, 并且检测是否需要帮所有的文件重新编写标准的 SELinux 类型 (auto relabel)。
2.4. 启动系统的乱数产生器
乱数产生器可以帮助系统进行一些密码加密演算的功能,在此需要启动两次乱数产生器。
2.5. 设定终端机 (console) 字形:
2.6. 设定显示于开机过程中的欢迎画面 (text banner);
2.7. 设定系统时间 (clock) 与时区设定:需读入 /etc/sysconfig/clock 设定值
2.8. 周边设备的侦测与 Plug and Play (PnP) 参数的测试:
根据核心在开机时侦测的结果 (/proc/sys/kernel/modprobe ) 开始进行 ide / scsi / 网络 / 音效 等周边设备的侦测,以及利用以载入的核心模块进行 PnP 装置的参数测试。
2.9. 使用者自订模块的载入
使用者可以在 /etc/sysconfig/modules/*.modules 加入自订的模块,则此时会被载入到系统当中
2.10. 载入核心的相关设定:
系统会主动去读取 /etc/sysctl.conf 这个文件的设定值,使核心功能成为我们想要的样子。
2.11. 设定主机名称与初始化电源管理模块 (ACPI)
2.12. 初始化软体磁盘阵列:主要是透过 /etc/mdadm.conf 来设定好的。
2.13. 初始化 LVM 的文件系统功能
2.14. 以 fsck 检验磁盘文件系统:会进行 filesystem check
2.15. 进行磁盘配额 quota 的转换 (非必要):
2.16. 重新以可读写模式挂载系统磁盘:
2.17. 启动 quota 功能:所以我们不需要自订 quotaon 的动作
2.18. 启动系统虚拟乱数产生器 (pseudo-random):
2.19. 清除开机过程当中的暂存文件:
2.20. 将开机相关信息载入 /var/log/dmesg 文件中。
还记得我们在 /etc/rc.d/rc.sysinit 当中谈到的载入使用者自订模块的地方吗?就是在 /etc/sysconfig/modules/ 目录下啊! 虽然核心提供的预设模块已经很足够我们使用了,但是,某些条件下我们还是得对模块进行一些参数的规划, 此时就得要使用到 /etc/modprobe.conf 啰!
[root@www ~]# cat /etc/modprobe.conf
alias eth0 8139too <==让 eth0 使用 8139too 的模块
alias scsi_hostadapter pata_sis
alias snd-card-0 snd-trident
options snd-card-0 index=0 <==额外指定 snd-card-0 的参数功能
options snd-trident index=0
不说您也知道,整个开机的过程当中,老是读取的一些服务的相关设定档都是记录在 /etc/sysconfig 目录下的!那么该目录底下有些啥玩意儿?我们找几个重要的文件来谈谈:
? authconfig:
这个文件主要在规范使用者的身份认证的机制,包括是否使用本机的 /etc/passwd, /etc/shadow 等, 以及 /etc/shadow 密码记录使用何种加密演算法,还有是否使用外部密码伺服器提供的帐号验证 (NIS, LDAP) 等。 系统预设使用 MD5 加密演算法,并且不使用外部的身份验证机制;
? clock:
此文件在设定 Linux 主机的时区,可以使用格林威治时间(GMT),也可以使用台湾的本地时间 (local)。基本上,在 clock 文件内的设定项目’ ZONE ‘所参考的时区位于 /usr/share/zoneinfo 目录下的相对路径中。而且要修改时区的话,还得将 /usr/share/zoneinfo/Asia/Taipei 这个文件复制成为 /etc/localtime 才行!
? i18n:
i18n 在设定一些语系的使用方面,例如最麻烦的文字介面下的日期显示问题! 如果你是以中文安装的,那么预设语系会被选择 zh_TW.UTF8 ,所以在纯文字介面之下, 你的文件日期显示可能就会呈现乱码!这个时候就需要更改一下这里啦!更动这个 i18n 的文件,将里面的 LC_TIME 改成 en 即可!
? keyboard & mouse:
keyboard 与 mouse 就是在设定键盘与滑鼠的形式;
? network:
network 可以设定是否要启动网络,以及设定主机名称还有通讯闸 (GATEWAY) 这两个重要信息呢!
? network-scripts/:
至于 network-scripts 里面的文件,则是主要用在设定网络卡~ 这部份我们在伺服器架设篇才会提到!
总而言之一句话,这个目录下的文件很重要的啦!开机过程里面常常会读取到的!
Q:如何察看与修改 runlevel 呢?
察看很简单,只要输入’ runlevel ‘就可以得知。而如果要修改目前的 runlevel , 可以直接输入 init [level] 例如要去到 runlevel 3 可以:’ init 3 ‘即可。 如果想要每次开机都设定固定的 runlevel ,那么可以修改 /etc/inittab 这个文件! 将里面这一行改成:’id:3:initdefault:’即可。
Q:让一个程序在 Linux 系统下一开机就启动,但是在关机前会自动的先结束该程序,怎么做?
由于 /etc/rc.d/rc[0-6].d 里面有的 Sxxname 与 Kxxname 可以设定开机启动与关机结束的事项!所以我就可以轻易的写一个 script 放在 /etc/rc.d/init.d 里面,并连结到我的 run-level 里头,就可以让他自由自在的启动与结束了!
Q:万一不幸,我的一些模块没有办法让 Linux 的核心捉到,但是偏偏这个核心明明就有支援该模块, 我要让该模块在开机的时候就被载入,那么应该写入那个文件?
应该写入 /etc/modprobe.conf (kernel 2.6.x) 或者是 /etc/modules.conf (kernel 2.4.x) 这个文件,他是模块载入相关的地方呢!当然,也可以写入 /etc/sysconfig/modules/* 里面。
Q:如何在 grub 开机过程当中,指定以’ run level 1 ‘来开机?
在开机进入 boot loader 之后,利用 grub shell 的功能,亦即输入’ e ‘进入编辑模式, 然后在 kernel 后面增加:
kernel (hd0,0)/boot/vmlinuz ro root=/dev/hda1 .... single
那个 single 也可以改成 1 ,就能够进入。同样的,若使用 lilo 时,按下 tab 按键后, 输入
label_name -s
就能够进入 run level 1 啰!
Q:由于一些无心之过,导致系统开机时,只要执行 init 就会产生错误而无法继续开机, 我们知道可以在开机的时候,不要以 init 载入系统,可以转换第一支执行程序, 假设我第一支执行程序想要改为 /bin/bash ,好让我自行维护系统(不同于 run level 1 喔!), 该如何进行此一工作?
在开机的过程当中,进入 lilo 或 grub 的画面后,在 kernel 的参数环境下,加入 init=/bin/bash 来取代 /sbin/init ,则可略过 init 与 /etc/inittab 的设定项目,不过,您必须相当熟悉 grub 与 lilo 的设定才行喔!
Q:在 CentOS 当中,我们如何自动可载入的模块?
可以经由设定 /etc/modprobe.conf 或者是将自行做好的设定档写入到 /etc/sysconfig/modules/ 目录中, 并且将档名取为 filename.modules ,注意喔,文件结果务必是 .modules 才行。 相关信息可以参考 /etc/rc.d/rc.sysinit 喔!
Q:如果你不小心先安装 Linux 再安装 Windows 导致 boot loader 无法找到 Linux 的开机选单,该如何挽救?
方法有很多,例如:
(1)借助第三方软体,安装类似 spfdisk 的软体在 MBR 里面,因为他同时认识 Linux 与 Windows ,所以就可以用他来进入 Linux 啦!
(2)或者使用类似 KNOPPIX 的 Live CD 以光碟开机进入 Linux 之后,再以 chroot 软体切换根目录 (/),然后重新安装 grub 等 boot loader ,同样也可以重新让两个作业系统存在啦!
总之,只要你知道 MBR / Super block / boot loader 之间的相关性,怎么切换都可能啊