📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: Hanky@FruitTea1 (骗谁啊?), 信区: Linux <BR>标 题: SysV init 2.6 的开机过程 (二) <BR>发信站: 果茶小站 (Wed May 29 21:29:06 1996) <BR> <BR>再来我们讲一下 /etc/init.d/boot 这个 script. <BR> <BR>既然 kernel bootstrapping 完, 我们就要开始做一些 <BR>很基本的检查、设定, 以及做一些『准备工作』。 <BR> <BR>在 kernel bootstrapping 後, 在 mount root as read-only <BR>前会先做一些工作, 以 Linux 为例: <BR> <BR> * 先设定这个 script 的 PATH 及 umask <BR> * 挂入 kerneld 这个 daemon (这个和 kernel modules 有关, 後面再讲) <BR> * mdadd -ar, 把 md device 跑起来 (这也是後面再讲) <BR> * swapon -a, 把所有的 swap partition 打开来用. <BR> * 挂入 update (bdflush) 这个 daemon <BR> <BR>kerneld 是 Linux kernel 1.3.xx 有了 modules 化後, <BR>一个会自动插 modules 进 kernel 的 daemon, 也会把 <BR>经一段时间後不曾用到的 modules 拔出 kernel。 有关 <BR>modules 的概念, 我们等到 kernel 的介绍再谈详细的。 <BR> <BR>md device 是 Linux kernel 1.3.69 後新加入的功能, <BR>它可以把两个以上的 partition 合成一个大的 md device <BR>之後, 直接做出 file system 或 swap space, 而且可以 <BR>『交错地』安排 block 位置, 这就像 RAID-0 一样, 所以 <BR>不但可以将一堆小的 partition 合成大的来用, 也可以增 <BR>进速度。 <BR> <BR>update (bdflush) 这个 daemon 是每隔一段时间 (预设值 <BR>是 5 秒) 就把 'dirty blocks' flush 回 disk 中. 这个 <BR>一定要在跑 fsck 等主要的 I/O 动作前就先挂入的了。 <BR> <BR>好, 最基本的准备完毕後, 我们就要先来 fsck 了。 <BR>首先是把『根』mount 起来, 而且是 read-only: <BR> <BR> * mount -n -o remount,ro / <BR> <BR>其中 -n 的参数是不把 mount 的动作写入 /etc/mtab 中, <BR>因为现在是把 '/' mount 成 read-only, 根本不能写入。 <BR>然後我们开始 fsck: <BR> <BR> * fsck -A -a <BR> <BR>参数 -A 是对 /etc/fstab 中的东西全部 check 一次, -a <BR>的参数是指 auto-repair. 在检查後如果有东西实在是不能 <BR>修好, 就会执行 sulogin, 然後 reboot. 如果正常, 那就 <BR>把 '/' remount 成 read-write: <BR> <BR> * mount -n -o remount,rw / <BR> <BR>因为後面还会 mount -a, 所以这次我们还是用了 -n 参数。 <BR> <BR>接下来是跑一些『当 '/' 可以 write 了』之後, 立刻要做的 <BR>事: <BR> <BR> * 跑 modules 的设定 <BR> * 把一些 /etc 及 / 下的档案清除 <BR> * 更新 psdatabase <BR> <BR>□例如下: <BR> <BR>----------[/etc/init.d/boot 部份内容]------------------------- <BR># Load the appropriate modules. <BR>if [ -x /etc/init.d/modules ] <BR>then <BR> /etc/init.d/modules <BR>fi <BR> <BR># Remove /etc/mtab*, /etc/rmtab, /etc/nologin and /fastboot. <BR>rm -f /etc/mtab* /etc/nologin /fastboot /etc/rmtab <BR> <BR># update /etc/psdatabase <BR>psupdate 2> /dev/null <BR># or <BR>#ps -U 2> /dev/null <BR>---------[□例结束]-------------------------------------------- <BR> <BR>上面的东西, 我想大家大概都看得懂...... <BR> <BR>好, 再来就是把所有的 local partitions 都给它 mount 起来. <BR> <BR> * mount -avt nonfs <BR> <BR>那为何是 -t nonfs 呢? 很简单, 因为我们还没开始设定 network. <BR>然後, 如果我们有一些 swap file 是在 mount -a 後才出现的, <BR>这时就要再跑一次 swapon: <BR> <BR> * swapon -a 2>/dev/null <BR> <BR>才会把 swap file 开来用。 <BR>OK, 然後设定网路 (这时是去叫用一个独立的 script, <BR>如果这个 script 不存在, 我们就无法设定 network) <BR>及主机名称, 然後再 mount -a -t nfs 来加挂人家 export 出来的 fs. <BR> <BR>------[□例如下]------------------------------------------------ <BR>if [ -x /etc/init.d/network ] <BR>then <BR> /etc/init.d/network <BR>fi <BR># 然後设定 hostname <BR># If there's no /etc/HOSTNAME, fall back on this default: <BR>if [ ! -r /etc/HOSTNAME ]; then <BR> echo "Henry.Dorm10.NCTU.edu.tw" > /etc/HOSTNAME <BR>fi <BR>cat /etc/HOSTNAME | cut -f1 -d . > /etc/hostname <BR>hostname --file /etc/hostname <BR> <BR># Now that TCP/IP is configured, mount the NFS file systems in /etc/fstab. <BR>echo "Mounting remote file systems..." <BR>mount -a -t nfs <BR>------[□例结束]------------------------------------------------ <BR> <BR>好, 这时才把所有的 file system(含 nfs) 都 mount 起来了, <BR>所以现在立刻要做的事, 就是更新 /etc/ld.so.cache 这个档, <BR>设定 system clock, 然後清除 /tmp, /var/run 及 /var/lock <BR>下的大部份垃圾: <BR> <BR> * /sbin/ldconfig <BR> * clock -s <BR> * 清除 /tmp, /var/run, /var/lock 下的垃圾 <BR> <BR>OK, /tmp, /var/run 及 /var/lock 这些目录下的垃圾都清空了, <BR>这时才去执行 /etc/rc.boot/ 下的所有 script (其中 run-parts <BR>是一个工具程式, 它会把你给的参数[目录]下所有的 scripts 都 <BR>给它跑个一次): <BR> <BR> * run-parts /etc/rc.boot <BR> <BR>如果没有 run-parts 这个工具, 不妨自己学著用 shell script <BR>写一个; 或是用笨方法: 还是乖乖地写在这个 /etc/init.d/boot <BR>script 内吧...... <BR> <BR>然後修改 /dev/ttyXX 的属性 (关於 pty256 容後再介绍): <BR> <BR> * chmod 666 /dev/tty[pqrstuvwxyzabcde]* <BR> * chown root.tty /dev/tty[pqrstuvwxyzabcde]* <BR> <BR>再来就看你还有什麽事打算在这儿就先处理掉的, 也一并在此写入, <BR>或是写个 script 丢到 /etc/rc.boot/ 下也是一样的。 例如把 <BR>powerd 跑起来、建立 /etc/motd、建立 /etc/issue.net、建立一 <BR>些 links......都是不错的主意。 <BR> <BR>以下是我的 /etc/init.d/boot 这个 script: <BR> <BR>[附件一] <BR> <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -