linux开机简略流程:
POST-->bootloader-->kernel-->usr_space_ Application
##############################################################################
POST阶段:
计算机加电后,处理器执行的第一条指令定位到BIOS芯片(ROM)把ROM中的程序加载到内存,接着会跳转到ROM中的程序所在的内存地址段,将这段程序加载到处理器执行,进行加电自检。(通常服务器主板上有两个ROM,防止升级BIOS固件版本失败,导致无法开机)
一般BIOS固有的功能
BIOS features
– UEFI (Unified Extensible Firmware Interface) # 统一的可扩展固件接口(可认为是一种新型的BIOS,具体自行百度)
– SMBIOS 2.5 (DMI) # 相当于数据库 通过 DMI ,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息
– ServerHardware Design Guide #设置BIOS时一些帮助提示 (比如F10保存退出...)
– WfM 2.0 #连线管理。由 Intel开发的规范,用于提高台式计算机、便携式计算机和服务器的可管理性;WfM 标准包括 DMI、PXE 和远程唤醒
– ACPI 2.0support #具有能耗管理功能(比如定时开关机,远程开机...)
– USB keyboard/mouse
– bootpossible from: #可选的启动项
– CD-ROM/DVD(SATA)
– hard disk(SATA, SAS, USB)
– LAN
– consoleredirection support #远程控制支持
– OEM logo #厂商信息
– CPU,memory disable #启用禁用CPU 内存某插槽等等
-------
当BIOS程序起来后,把BIOS程序看成一个操作系统,这个系统运行起来后会检测硬件,如果硬件损坏它会报警(相对应的指示灯会变成橙色或者红色),如果损坏程度达到了能开机的极限,则会卡死在某一界面;否则直接将损坏的硬件屏蔽(多路处理器,坏了一颗处理器,照样可以开机,内存同理);这一整个过程为加电自检(POST)。
POST的最后一步是执行INT 0x19指令,这个指令从引导设备第0柱面第0磁道第一个扇区读取512字节,装入地址0x7c00;其中512字节的主引导程序(bootloader)占446个字节,第二部分是Partitiontable区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magicnumber,占2个字节,固定为0xAA55或0x55AA,如果发现这个扇区结尾为0xAA55或0x55AA(魔数),则BIOS会认为这是一个已经有系统的设备,然后交权给这512字节的小系统。
--------------------------------------------------------------------------------------------
Boot Loader阶段(启动程序)
BootLoder(GRUB)中的程序亦可当成一个小系统,这个小系统的作用就是找到内核,让内核加载到内存后运行,最后交权给内核。
--------------------------------------------------------------------------------------------
Kernel阶段:
kernel有加载到内存后自解压运行的能力,它会会全面扫描所有硬件,并且加载相对应的硬件驱动,挂载根文件系统等
--------------------------------------------------------------------------------------------
user_space_ Application阶段:
当内核启动完成后,内核会在用户空间启动第一个用户空间程序/sbin/init(7系列为:systemd),这个程序会设置对应的运行级别,时区,键盘,环境变量... 最终是打印出登入界面
##############################################################################
grub相关介绍
bios已经固定在主板芯片上,对于设置BIOS一般我们不会有过多的干涉,因为硬件出厂时已经设置完毕,而grub是启动内核的关键点,熟悉GRUB配置也是LINUX管理员的必学的知识之一。
GRUB支持的文件系统:
Support multiple filesystem types
Supportmultiple filesystem types transparently, plus a useful explicit blocklistnotation. The currently supported filesystem types are BSD FFS, DOS FAT16 andFAT32, Minix fs, Linux ext2fs, ReiserFS, JFS, XFS, and VSTa fs.
grub可以引导多个系统(Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, andLinux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are supportedvia a chain-loading function.
)
--------------------------------------------------------------------------------------------
GRUB启动三个步骤:Stage1 Stage1.5 Stage2
GRUB 包含如下几个启动模块:两个必须的场景文件(Stage1,Stage2)。非必需的Stage1.5,首先对他们有一个大致的了解。
Stage1
第一阶段的代码存储在MBR中。这段代码包含一块指向列表的下一个阶段GRUB,stage1_5或Stage2,启不启动Stage1.5取决于Stage2所在的文件系统。
[[email protected] ~]# dd if=/dev/sda count=1 of=/tmp/MBR #复制MBR的内容到tmp下 1+0 records in 1+0 records out 512 bytes (512 B)copied, 0.000298384 s, 1.7 MB/s [[email protected] ~]# file /tmp/MBR #查看文件类型 /tmp/MBR: x86 bootsector; GRand Unified Bootloader, stage1 version 0x3, boot drive 0x80, 1st sector stage2 0x849fe,GRUB version 0.94; partition 1:ID=0x83, active, starthead 32, startsector 2048, 1024000 sectors; partition 2:ID=0x8e, starthead 221, startsector 1026048, 40916992 sectors, code offset 0x48 [[email protected] ~]# [[email protected] ~]# file /boot/grub/stage1 #此文件内容和mbr中的446字节内容一样 /boot/grub/stage1:x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, GRUB version 0.94,code offset 0x48
Stage1.5
Stage1的全部的工作是从本地磁盘把Stage 2或者Stage 1.5装载进来。由于对 stage1大小(446字节)的限制,代码不可能设计的过于复杂庞大,它只能识别基本的linux文件系统(fdisk -l ID 为83的文件系统),如果是其他的文件系统,折衷的方案就是加载Stage1.5,否则不用加载Stage1.5,直接加载Stage2。 相信你已经明白了什么时候需要加载Stage1.5!!
[[email protected] ~]# cd/tmp/
[[email protected] tmp]# cd/boot/grub/
[[email protected]]# ls *stage1_5
e2fs_stage1_5 ffs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5
fat_stage1_5 iso9660_stage1_5 minix_stage1_5 ufs2_stage1_5 xfs_stage1_5
Stage2
第二阶段代码读取/boot/grub/grub.conf来决定如何加载内核选择启动哪个内核(grub可以引导不同的内核),显示grub菜单。Stage2 的代码存储在文件 /boot/grub/stage2
##############################################################################
grub的修复
grub损坏有以下几种修复方法:
1.使用安装系统时原光盘,救援模式
2.使用已经装有grub引导程序的移动设备
3.将硬盘卸载,挂载到能正常开机的PC进行修复
如果以上都方法都不能满足,把硬盘丢了...
以下使用第三种方法修复:
--------------------------------------------------------
手动破坏grub分区
[[email protected] tmp]# dd if=/dev/zero of=/dev/sda bs=400 count=1 #不要超过446字节,不然分区也会损坏
1+0 records in
1+0 records out
400 bytes (400 B)copied, 0.000285534 s, 1.4 MB/s
[[email protected] tmp]# sync
[[email protected] tmp]# sync
[[email protected] tmp]# sync
[[email protected] tmp]#reboot
重启会发现没有找到操作系统
插入光盘
选择救援模式
选择语言键盘类型等
是否启动网络功能 选择NO
继续
可以看到源磁盘临时挂载到了 /mnt/sysimage 目录下
选择start shell
切换根目录
重新安装grub到MBR扇区中,注意是引导系统的那块硬盘设备,不能随便安装到其它硬盘同步重启
grub修复完成!!
############################################################################################
使用GRUB引导系统
GRUB已经损坏,但是源光盘丢失,也可以使用手中移动设备做一个linux,使用做好引导移动设备引导系统(相当于winPE)
修改启动项从移动设备启动(此步骤可以略过,bios会从第一启动项扫描,直到找到可启动的分区)
进入grub命令行界面:
---------------------------------------------
设置GRUB密码
设置密码防止其他人使用单用户模式恶意修改修改root密码,造成不必要的损失
将密码放在grub.conf里不同的地方起到不同的作用, 一种是输入密码以后才可以使用grub菜单的命令行模式,进行编辑, 一种是输入密码后才可以启动系统(相当于设置硬盘密码)
生成密码:
[[email protected] ~]#
grub-md5-crypt
Password:
Retype password:
$1$.Fn1S$Q1dbZ39KfVf7Ot5UIn4vT. #复制加密的密码
修改配置文件
[[email protected] ~]#
vi /boot/grub/grub.conf
password --md5 $1$.Fn1S$Q1dbZ39KfVf7Ot5UIn4vT. # password --md5 生成的密码添加到配置文件中对应的位置
保存退出重启生效
#####
清空密码
[[email protected] ~]#
vi /boot/grub/grub.conf
保存后下次重启生效