一、电脑的启动过程
(一)大概过程
开机找到BIOS--》找到硬盘的MBR--》加载引导程序(lilo grub等) --》加载kernel内核(挂载设备和硬件和必要的内核模块)--》启动用户空间程序。
(二)详细过程
(1)BIOS:开机--》bios启动,载入基本输入输出设备--》找到CPU,内存,和基本的IDE和SCSI硬盘
(2)根据设备的启动顺序找到硬盘(或其他存储设备如光盘、USB等)中的MBR(存放引导文件和分区引导的地方即bootloader,常用的bootloader程序有GRUB,lilo)--》通过grub等引导程序会列出操作系统列表,并标识出操作系统的引导文件所在的分区。
(3)引导文件找到操作系统的内核,并加载内核Kernel-->内核通过initrd文件进入虚根,用以访问存于文件系统中的内核模块,并加载相关设备的驱动和模块,加载完成后切换到实根--》后启动/sbin/init进程,内核开始初始化内存,并设置内核与相关模块。
(4)最后系统根据运行级别确定启动或停止哪些服务。根据/etc/inittab中设定的运行级来启动相关的服务和脚本。
(5)进入用户空间程序。
(三)几个关键概念:
1、mbr
MBR:位于0磁道,0扇区,共512字节。
其中446字节用于存放bootloader。常用的bootloader程序有grub,lilo等。
64字节用于存放分区,其中16字节存放一个分区,所以硬盘只能划分四个主分区,要想划分更多的分区,就需要用到扩展分区。
2字节标注MBR是否有效。
2、内核
linux内核设计: 单内核+模块
内核在/boot分区目录下
模块在/lib/modules/内核版本号相同的目录/ 此目录下。
inux内核是单内核,单内核会让内核文件相当大,因为需要把所有的驱动都加载进来。所以Linux虽是单内核为了更优化,做成了核心内核和外围模块的模 式。启动时只是启动了内核核心。
而动态加载的内核外围模块有:驱动程序、文件系统(因为不仅仅只有一种文件系统)、加密文件等。
3、虚根
因为核心内核加载外围模块,就需要先加载存放外围模块这个磁盘的驱动,并能访问文件系统。而驱动又存于硬盘的文件系统的模块目录中。而没有驱动又无法识别出硬盘和文件系统,就没法加载模块。所以 内核就先设置了一个中间层叫虚拟根,有基本的/proc /sys /dev等目录,此虚根可以访问相关的模块文件,可以加载驱动,等加载完相关模块后会切换到实根。可以用chroot命令切换根目录。
kernel-->initrd-->ROOTFS, 即内核通过initrd找到文件系统才能找需要挂载的模块。
(内核载入从BIOS中取得的基本硬件相关数据(CPU和内存等),然后再查找各接口,以找到不同接口上的新硬件(如硬盘、网卡、显卡、USB等)--》如果探测到新硬件,则把相关信息加进/etc/sysconfig/hw.conf中,如设备驱动名称。
如需要特殊设备驱动,刚把技术规范加入/etc/modules.conf中。下次启动时会读取modules文件,装入所需的驱动。所以新设备如果没有驱动时,需要装入驱动。驱动一般在modules文件夹下。
(4)载入相关硬件后,内核开始初始化内存,并设置内核与相关模块。
(四)命令
dmesg 命令查询启动过程的交互信息
/proc 目录下提供了linux安装的硬件信息
lsmod 命令检查安装的模块。
rmmod {模块名} 删除模块
insmod {模块名} 安装模块
(五)/etc/inittab中的六个运行级:
0: 停止、关闭linux,停止所有服务
1:单用户方式,不联网
2、多用户方式,不能访问NFS
3、多用户方式,启动计算机上的网络监控
5、图形登录
6、重新启动
二、排错
(一)启动模式
1、单用户模式
也就是运行级 1 。只启用两个服务。 可用于根口令忘记; /etc/fstab文件损坏,文件系统无法装载等故障。
单用户的方式:
grub下:
(1)如果GRUB有口令,则先键入P键输口令
(2)选择想引导的版本,ELSMP版为支持 多处理器版,EL为单处理器版
(3)在想选择的版本上按e 键编辑
(4)到本行行末键入空格,然后输入single,回到引导行,输入b键开始引导。
可用的常用命令:
passwd root 更改根口令
检查卸载硬盘的命令 如 fsck
exit退出单用户模式后,不需要重启电脑。
lilo下:
必须按 ctrl+x退出图形屏幕,在 boot:提示符下输入 linux single即可。
2、救援模式
用引导盘或第一张光盘引导到安装模式下输入: linux rescue
三个选项:
(1)contunue:linux会搜索硬盘中的安装文件,所有找到的文件系统都装载成/mnt/sysimage的子目录。是一种自动救援模式。其实就是单用户模式。将/etc/fstab文件中相应文件系统都装载成/mnt/sysimage的子目录。可以用fsck /dev/分区来检查磁盘;mount命令来重载分区设备。
(2)read-only: 只读,与上一方式差不多,只是找到的所有文件系统都装载成只读,是只读救援模式。可以在启动时,把单用户模式时输入的single改为emergency即可。
(3)skip: 跳过:则直接出现单用户方式中的shell提示,不查找可用的文件系统,是手工救援模式。
(二)MBR和GRUB
1、MBR概念
位于0磁道,0扇区,共512字节。
其中446字节用于存放bootloader。常用的bootloader程序有grub,lilo等。
64字节用于存放分区,其中16字节存放一个分区,所以硬盘只能划分四个主分区,要想划分更多的分区,就需要用到扩展分区。
2字节标注MBR是否有效。
2、grub概述
grub存于MBR中的bootloader区域,因为只有446字节大小,所以grub只把启动放于mbr中,只是用于找到/boot/grub目录,其他的文件放置于/boot/grub目录下。
grub分为三阶段:
stage1:存于mbr中,只为了引导然后找到/boot/grub目录
stage1.5:识别常见的不同文件系统。因为需要找到/boot/grub就需要先找到此分区,且识别出文件系统,所以需要此阶段。
stag2:/boot/grub目录。
3、/boot/grub/grub.conf配置文件详解
default=0 //默认启动哪个内核
timeout=5 //等待用户选择时间
splashimage=(hd0,0)/grub/splash.xpm.gz //grub背景图片
hiddenmenu //隐藏菜单,去掉此项就不隐藏
password grub密码 //明文的。
password --md5 //加密的密码格式,然后保存,再用gurb -md5-crpt命令生成一个密码文件,再把生成的密码复制到 此处的后面,以后编辑GRUB就需要输密码
title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64) //要引导内核的标题,可以更改,第一行title是表示第0个内核。
root (hd0,0) //内核文件所在位置,对grub而言,所有类型的硬盘一律为hd.
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=UUID=e6f3c00e-91be-4c8d-b3da-a8685be82bd3 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
//内核文件路径及传递给内核的参数:
vmlinuz-2.6.32-358.el6.x86_64是内核版本,一定要写全。
ro 是只读的意思
root=LABEL= 后面是指定根文件系统所在分区,因为这里没有给根文件系统指定卷标,所以用uuid值指示根文件系统所在分区。
rhgb 图形方式启动
quiet 不输出启动信息
initrd /initramfs-2.6.32-358.el6.x86_64.img //ramdisk文件路径 ,即虚拟根磁盘路径。
4、MBR修复(grub修复)
为防止MBR损坏,最好把MBR内容备份下来,然用把备份的内容放到其他机器或介质上保存。
MBR损坏,修复MBR
可通过借助别的主机修复和使用紧急救援模式两种模式修复MBR,主要讲紧急模式修复:
(1)使用完整的系统安装光盘引导,进入rescue模式
(2)安装grub:
grub
grub>root (hd0,0) //指定/boot挂载在哪个地方,即内核所在的硬盘和分区。如果不知道可以用命令 find (hd0,0) / 来查找根在哪个硬盘的哪个分区,如果不是,就一个一个分区查找。
注:(hd0,0)中hd0是指第一个硬盘,linux中用hda表示,而grub用hd0表示,以此类推,具体看自己的linux内核安装在哪个硬盘;0指第一个分区。
grub>setup (hd0) //安装grub
grub>quit
sync //同步到磁盘。
5、grub配置文件丢失修复
grub>root (hd0,0) //指定/boot所在分区
grub>kernel /vmlinuz-2.6.32-358.el6.x86_64 //注意,前面的内核版本一定要写全,如果不记得根分区此时也可以不添加。
grub>initrd /initramfs-2.6.32-358.el6.x86_64.img //指定Initrd文件,一定要完全相同。
grub>boot //重新启动
进入系统,重建grub.conf文件。参照上面grub配置文件。
(三)其他常见错误修复
1、把默认级别设定为0,或6, 进行单用户模式,编辑intttab文件
2、/etc/rc.d/rc3.d 不小心删除了, 进入单用户模式,修改目录系统
3、服务故障
如果某个服务无法启动,进入单用户模式下,先关掉此服务。然后再启动电脑,然后修复此服务后再启用此服务。或重启进入交互模式(敲I键),手工确认是否启动某服务。
4、/etc/rc.local 语法错误,也进入单用户模式下,修改此脚本。
5、用户无法登录系统(bash程序故障)
光盘安装:
进入紧急救援模式
mkdir /media/cdrom
mount /dev/hdc /media/cdrom //在紧急救援模式下,光驱被映射成了 /dev/hdc
找到bash包安装。
rpm -ivh --replacepkgs --root /mnt/sysimage bash-3.2-32.e15.i386.rpm // -root 指定安 装位置为实根/mnt/sysimage下。
chroot /mnt/sysimage //切换到实根
6、命令无法运行
手动指定PATH
或修改/etc/profile文件