技术文章 Linux Linux在PC机引导过程
Skip TOC

文章索引

  1. Linux在PC机引导过程 current position
  2. Page No

Linux在PC机引导过程

用户登录过程剖析-开机到控制台(console)

Linux在PC机引导过程

Read More

Linux从开机到控制台登录出现过程如下图。

graphics1
    • 开机/重置后,系统自检,BIOS到CMOS找引导设备(光驱,硬盘,USB设备等)。
    • PC机一般使用硬盘作为引导设备,BIOS将硬盘的第一个扇区(512字节)调入内存,MBR剖析图如下
graphics2
    • GRUB STAGE1加载完成后,STAGE1加载GRUB STAGE1.5,可以识别文件系统,读取/boot/grub/menu.lst文件。加载内核,和initrd文件,GRUB STAGE2 完成。
    • 现在linux kernel获得系统的控制权,由于在系统引导时候,可要使用一部分设备的驱动如,网卡,SCSI设备,RAID,LVM,或者rootfs 是在网络文件系统(NFS),USB设备等原因。为了提高系统引导过程的灵活性。引入了临时根文件系统,即initrd或者initramfs,前者是一 个文件系统(ext2,cramfs),后者是initramfs。后者有比前者有很多的灵活性,详细稳定请参考 Documentation/filesystems/ramfs-rootfs-initramfs.txt。
    • 如果有initrd存在,kernel会加载initrd或者initramfs,进行系统硬件初始化等工作,然后mount真的根文 件系统,在改变临时的根文件到真的文件系统,然后运行/sbin/init进程。initrd和initramfs实现方法不同,请参考相关文档。以上过 程由/linuxrc(initrd),/init(initramfs)实现。
    • 如果没有initrd,内核安装根文件系统,运行/sbin/init进程。init的配置文件是/etc/inittab,init 进程是用户空间(user space)的第一个进程(PID=1),所有其他应用程序都是它的子进程。init完成硬件配置,网络等初始化,启动对应运行级别的应用,运行 getty启动终端等待用户登录。依照时间顺序起过程如下。
      • 系统配置(硬件参数配置,时钟,文件系统检测,设置主机名等),初始化。Debian, si::sysinit:/etc/init.d/rcS,这条语句表示,系统初始化时候运行脚本/etc/init.d/rcS,脚本的内容是按数字顺 序(如相同按字母升序)运行/etc/rcS.d/下面的脚本,K字母开头的是/etc/rcS.d/Knum_something stop,S字母开头是/etc/rcS.d/Snum_something start。类RedHat的系统是si:S:sysinit:/etc/rc.d/rc.sysinit。
      • 启动缺省的运行级别,起启动过程如上所述,Debian: l3:3:wait:/etc/init.d/rc 3,RedHat: l3:3:wait:/etc/rc.d/rc 3。
      • 启动getty,打开虚拟终端等待用户登录。Debian: 1:2345:respawn:/sbin/getty 38400 tty1,RedHat:c1:12345:respawn:/sbin/agetty 38400 tty1。

说明:系统配置(sysinit)初始化在init -b 时不运行。 init的运行级别一般为(0-6),0:关机,1(S):单用户;6:重启。其他为多用户环境。图行界面的登录由相应运行级别的脚本启动实现如/etc /rc3.d/gdm等。除以上任务,init还有设置ctrl-alt-del的响应,电源响应等。详细过程请参考man inittab,init,getty,login。

到此,linux的启动过程结束,用户可以在虚拟终端(virtual console),显示管理器(Display Manager)登录。应用的运行级别配置工具:类RedHat:chkconfig 例子:列出服务的运行级别 chkconfig --list name,增加服务 chkconfig --add name, 删除服务 chkconfig --del name 指定运行级别启动或者关闭 chkconfig --level level_number name on|off|rest, Debian:update-rc.d:例子: update-rc.d apache2 start 25 3 . stop 09 0 1 6 .(设置apache2在运行级别3启动顺序是25,在运行级别0,1,6停止,顺序是09) ;update-rc.d -f apache2 remove(删除apache2的系统启动); update-rc.d apache2 defaults(设置apache2在运行级别2345启动,016关闭)。

系统恢复

Page No

Linux系统的引导过程明了后,系统的恢复工作依照系统启动的原理和流程,可分为引导过程中的系统恢复(常见的是文件系统的恢复),和恢复模式,既单用 户模式。按内容分可分为Loot Loader(现在常用是GRUB)修复,和Linux引导过程中的问题修复。

  1. GRUB的安装配置维护:Stage1,位于MBR或者引导分区,其作用是用来加载stage1.5或者stage2的第一扇区。所以GRUB的安装实际 上是,安装Stage1到MBR或者引导分区,并告诉Stage1到哪里加载Stage1.5/stage2。可以使用GRUB Shell或者grub-install脚本安装。GRUB Shell的安装命令。
    GRUB Shell
    BRUB shell
    grub> root (hd0,0)
    grub> find /boot/grub/stage1
    grub> setup (hd0) ; Stage1安装到MBR,指定stage1.5/stage2到hd0的第一个分区。
    grub> setup (hd0,0) ; Stage1安装到第一个分区,指定stage1.5/stage2到hd0的第一个分区。

    grub-install
    grub-install
    grub-install --root-directory=/boot /dev/hda
    Stage1安装到hda的MBR,指定stage1.5/stage2到boot对应的文件系统。
    GRUB linux引导的命令
    GRUB linux引导的命令
    title Debian GNU/Linux, kernel 2.6.26-2-686
    root (hd0,5)
    kernel /vmlinuz-2.6.26-2-686 root=/dev/hda7 ro single

    说明: root:GRUB 以下命令的根文件系统。 kernel:内核,及其加载的引导参数,常用的是single 或者1告诉系统以运行级别以启动,用于系统维护。 init=/bin/bash : initrd:加载initrd文件。

  2. Linux相关的系统恢复包括,系统引导过程中如果根文件系统安装失败,要手工运行fsck修复文件系统,使用telinit命令转换到 单用户模式进行系统维护。 常用的fsck选项是 -a 自动修复, -r 交互式修复。telinit选项常用的是 q 读取inittab内容,telinit runlevel,切换到 runlevel 运行级别。

用户在控制台登录基本流程是:由init进程启动getty产生几个虚拟控制台(tty1,tty2等)。在控制台上显示登录,当用户敲入用户 时,getty执行(exec)登录(login)进程,进入登录认证过程过程,认证成功后,登录进程(login)会fork相应用户shell的子进 程,至此登录过程结束。用户可以在对应的shell下工作。其过程是getty, login, shell一般是bash。

 
scroll back to top
Top