鸟哥的Linux私房菜10.26 开机流程、模块管理与Loader

第20章 开机流程、模块管理与Loader

Linux系统开机流程:

1.加载BIOS的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置;

2.读取并执行第一个开机装置内MBR的boot Loader(亦即是grub,spfdisk等程序);

3.依据boot loader的设定加载Kernel,Kernel会开始侦测硬件与加载驱动程序;

4.在硬件驱动成功后,Kernel会主动呼叫init程序,而init会开始侦测硬件与加载驱动程序;

5.init执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的作业环境;

6.init 执行 run-level 的各个服务之启动(script方式);

7.init执行 /etc/rc.d/rc.local 文件;

8.init 执行终端机仿真程序 mingetty 来启动 login 程序,最后就等待用户登录

boot loader的主要功能如下:提供选项(用户可以选择不同开机项目)

                            载入核心文件(直接指向可开机的程序区段来开始操作系统)

                            转交其他loader:将开机管理功能转交其他loader

最终,boot loader还有一个功能:加载kernel 文件

虚拟文件系统(Initial RAM Disk)在Linux系统开机过程中很重要(当开机时无法挂载根目录),它一般使用的文件名为 /boot/initrd        

第一支程序 init 及配置文件 /etc/inittab 与runlevel

Run level的执行等级(依据有无网络与有无X Window划分)

0 - halt(系统直接关机)
1 - single user mode(单人维护模式,用在系统出问题时的维护)
2 - Multi-user,without NFS(类似底下的runlevel3,但无NFS服务)
3 - Full multi-user mode(完整含有网络功能的纯文本模式)
4 - unused(系统保留)

5 - X11(与 runlevel3类似,但加载使用 X Window)

6 - reboot (重新启动)

/etc/inittab 的内容与语法

1.设定项目:最多四个字符

3.init的动作项目,如下——

其实,这一部分真的很重要,可是太多了…………(⊙o⊙)…

用户自定义开机自启动程序

将它写入 /etc/rc.d/rc.local ,然后就会开机自动加载额

根据 /etc/inittab 设定,加载终端机或X-Window 接口

系统默认会加载六个终端机,最后会执行 /etc/X11/prefdm-nodaemon 来启动X Window

模块对应文件: /etc/modprobe.conf

Run level 的切换

设置成为开机默认的 run level 的话,需要修改 /etc/inittab 内的设定项目

如果只是暂时变更系统的 run level,则使用 init[0-6] 来进行

-----------------------------------------------------------------------------------

核心与核心模块

核心与核心模块的放置位置:

核心: /boot/vmlinuz 或 /boot/vmlinuz-version

核心解压缩所需RAM Disk: /boot/initrd  (/boot/initrd-version)

核心模块: /lib/modules/version/kernel 或 /lib/modules/$(uname-r)/kernel

核心原始码: /usr/src/linux(需要安装,默认不安装)

核心模块与相依性:检查模块相依性主要依靠/lib/modules/$(uname-r)/modules.dep文件,可以用depmod建立这个文件:

使用 lsmod 可以查看到系统加载的模块(名称、大小、是否被其他模块使用)

使用 modinfo 可以检查在核心内的模块详情,还可以查看某个模块的文件

加载/移除模块可以用 modprobe,(推荐)

加载模块也可以用insmod,不过后面需要接完整的文件名

移除模块也可以用rmmod,不过后面需要接完整的文件名

------------------------------------------------------------------------------------------------

Boot Loader:Grub

grub是目前普遍的Linux开机管理程序

硬盘和分区在grub里面是从0开始计数的

grub可以隐藏一些分区

initrd能够提供开机过程中最重要的模块……以下情况下需要initrd:

*根目录所在磁盘为 SATA、USB或 SCSI等连接接口

*根目录所在文件系统为LVM、RAID等特殊格式

*根目录所在文件系统为非传统Linux认识的文件系统

*其他必须要在核心加载时提供的模块

如果要重新创建新的 initrd档案,可以使用 mkinitrd

grub安装过程:下载必要文件

然后去找要安装的文件,不过记得因为boot是独立出来的,所以一定不要在目录前面加/boot

开机以后,进入开机界面的grub是可以在线编辑的哦……如果grub出错导致无法正常开机,我们可以修改grub来开机。实在连grub也打不开的话,可以用含有grub的CD来开机。

核心功能中的vga设定:调整分辨率

BIOS无法读取大容量硬盘的解决方法:

让kernel和initrd文件放在大硬盘的最前面。详见

http://orgs.man.ac.uk/documentation/grub/grub_toc.html#SEC_Contents

为个别开机选项加密码:

加密你的密码:使用 grub-md5-crypt

如果要防止别人破解你的 menu.lst,就只能把加密的密码提出来,然后再要加密的账户处锁定了。

------------------------------------------------------------------------------------------------

开机过程的问题解决

忘记root密码

1.重新启动,2.开机进入grub选项后点击两次 'e',出现下列界面按下[enter]+b 进入单人维护模式

3.系统会以root的权限给你一个shell,此时执行passwd指令重设root密码

init配置文件错误:

不读取init文件,调用 /bin/bash来跳过错误的 init配置文件

此后还要下达两个指令

mount -o remount,rw/   将根目录重新挂载成为可读写

mount -a  参考 /etc/fstab 的内容重新挂载文件系统

BIOS 磁盘对应的问题(device.map)

如果调整BIOS磁盘开机顺序,那么menu.lst内的装置代号就可能对应到错误的磁盘上,此时可以到 /boot/grub/device.map 里面把装置对应的磁盘代号写死,也可以用grub install更新 device.map

因文件系统错误而无法开机

一般都是因为 /etc/fstab 文件的错误,此时可以输入root密码将根目录改为可擦写。如果是因为曾经不正常关机,可能会要检查 /dev/md0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值