Linux启动过程之我见

本章介绍Linux启动过程和涉及的各个文件的作用。

1
2
3
4
5
6
7
8
_________ _ __________________
\__ __/( ( /|\__ __/\__ __/
) ( | \ ( | ) ( ) (
| | | \ | | | | | |
| | | (\ \) | | | | |
| | | | \ | | | | |
___) (___| ) \ |___) (___ | |
\_______/|/ )_)\_______/ )_(

Init进程

  Init进程是第一个启动的进程,ID号为1,这个程序通常位于/sbin.init,改程序的源码位于init/main.c。当然我们也可以指定自己编写的初始化启动程序,传入启动参数的时候传入init=xxx即可。

  /sbin/init/etc/init/bin/init/bin/sh都是作为Init程序的备选者,有一个存在就会进入不再返回。

  busybox的Init会先设置信号处理函数初始化控制台解析inittab等三项工作。

解析Inittab

inittab中每一个条目定义了一个子进程。其条目格式如下:

1
id : runlevels : action : process

  • id 表示这个进程要使用的控制台,(标准输入、标准输出、标准错误输出)
  • runlevels 列出来运行的级别 为空则代表所有级别
  • action 要执行的动作
  • process 要执行的程序

Action详解

action名称 执行条件 说明
sysinit 系统启动后最先执行 只执行一次,init执行完成后才能执行其他操作
wait 系统执行完sysinit后 只执行一次,init进程等待它执行完成后才执行其他操作
once 系统执行完wait进程后 只执行一次, init不等它执行完成
respwan 启动完once进程后 init进程发现子进程退出时,重新启动它
askfirst 启动完respwan进程后 输出“Please Press Enter to activcate this console”等用户输入回车键后才启动子进程
shutdown 系统关机时启动 重启 关闭系统命令时
ctrlaltdel 按下 Ctrl + Alt +Del 时 -

inittab文件实例

1
2
3
4
# /etc/inittab
::sysinit:/etc/init.d/rcS
ttySAC0:askfirst:~/bin/sh
::shutdown:/bin/umount -a

同样在rcS一般只有两行

1
2
3
#/bin/sh
ifconfig eth0 192.168.100.100
mount -a

那么 mount -a依据那个文件呢?

fastab文件

一个典型的fstab文件如下:

1
2
3
4
5
6
7
8
9
10
11
# <file system><dir><type><options><dump><pass>
none /dev/pts devpts defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/cdrom /media/cd iso9660 ro,user,noauto,unhide 0 0
/dev/dvd /media/dvd udf ro,user,noauto,unhide 0 0
/dev/fd0 /media/fl auto user,noauto 0 0
/dev/hda1 swap swap defaults 0 0
/dev/hda4 / ext3 defaults 0 1
/dev/hda3 /home xfs rw,suid,exec,auto,nouser,async 0 2

  • file systems 不是我们通常理解的文件系统,而是指设备(硬盘及其分区,DVD光驱等)。它告知我们设备(分区)的名字,这是你在命令行中挂载(mount)、卸载(umount)设备时要用到的。so one should substitute for this entry the device name, remote partition, or similar.
  • 挂载目录
  • type 指挂载设备或分区为何种文件系统类型(例如:ext2, ext3, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap等)。 archLinux支持许多文件系统。 要得到一个完整的支持名单查找mount man-page。典型 的名字包括这些:ext2, ext3, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap和auto, ‘auto’ 不是一个文件系统,而是让mount命令自动判断文件类型,特别对于可移动设备,软盘,DVD驱动器,这样做是很有必要的,因为可能每次挂载的文件类型不一致。
  • 选项,这部分是最有用的设置,它能使你所挂载的设备在开机时自动加载、使中文显示不出现乱码、限制对挂载分区读写权限。它是与mount命令的用法相关的。
    • noatime 关闭atime特性,提高性能,这是一个很老的特性,放心关闭,还能减少loadcycle
    • defaults 使用默认设置。等于rw,suid,dev,exec,auto,nouser,async,具体含义看下面的解释
    • auto 在启动或在终端中输入mount -a时自动挂载
    • noauto 设备(分区)只能手动挂载
    • iocharset= 在=号后面加入你的本地编码,似乎在这个设备(分区)中做文件IO的时候就会自动做编码的格式转换。
    • ro 挂载为只读权限
    • rw 挂载为读写权限
    • exec 是一个默认设置项,它使在那个分区中的可执行的二进制文件能够执行。
    • noexec 二进制文件不允许执行。千万不要在你的root分区中用这个选项
    • sync 所有的I/O将以同步方式进行
    • async 所有的I/O将以非同步方式进行
  • dump 备份相关
  • pass sck会检查这个头目下的数字来决定检查文件系统的顺序(looks at the number substituted for and determines in which order the file systems should be checked)。允许的数字是0, 1, 和2。 文件系统的选项是0将不会被fsck utility检查。root文件系统应该拥有最高的优先权, 1,而所有其它的文件系统,如果你想让它被check的话,应该写成2。

版权声明:本文为博主原创文章,转载需声明为转载内容并添加原文地址。

原文地址:http://coderdock.com

Dock wechat
欢迎您扫一扫上面的微信公众号,订阅我的公众号