Linux系统启动
1、简述linux操作系统启动流程
需要了解Linux系统启动,首先需要了解几个概念:
POST:加电自检;这个想必搞IT的应该都了解,就是计算机在电源连接的时候主板上会有一个自己检测的过程,一般如果有检测卡的话,可以根据提示的代码来表示哪些硬件有问题,这里涉及到硬件方面的问题,不做过多解释,一般大家所需要关注的硬件状态就是CPU,内存,硬盘,电源,风扇,当然还有显卡和其他扩展卡是否有松动等问题;
CMOS,BIOS:这两个程序应该不会太陌生,一般是主板生产厂商在生产主板的时候添加的一个基本控制系统,Basic Input and Output System;我们主要是在BIOS里查看系统所认到的硬件信息,包括CPU,内存,硬盘,其他PCI扩展卡的信息,还有就是调整启动顺序也是在这个调整的,大家应该不会陌生,加载ROM和RAM等;
Bootloader:引导加载器;是一个通过事先定义好的文件或程序引导硬件怎么启动,怎么工作的,一般Linux系统的Bootloader有两种GRUB和LILO;
GRUB:Grand Uninform Bootloader;其版本有经典版0.X,和grub2的1.X等版本,其功能是提供一个菜单,允许用户选择要启动的系统或者不同的内核版本,把用户选定的内核装载到RAM中的特定空间中,解压,展开,而后把系统控制权移交给内核;如果需要进入单用户模式,或救援模式,就可以通过grub进入;
MBR,GPT:Master Boot Record;主启动记录信息;一般是在硬盘上的前512个字节,其中前446个字节为引导信息,后64个字节为分区列表,最后2个字节为魔数,一般是校验用的,为55AA;如果硬盘的MBR信息被损坏了,那么恭喜你,系统是启动不起来了,不过在损坏之后没有重启系统之前,是可以通过工具修复MBR的;
kernel:Linux系统内核,运行在内核空间,探测可识别到的所有设备,并加载各种硬件的驱动程序,以只读的方式挂载根文件系统,之后运行用户空间的第一个应用程序:/sbin/init,余下的所有程序都是此进程的子进程,不同的Linux系统版本init程序也不一样,CentOS 5的是经典的sysV init,CentOS 6是Upstart,之后的CentOS 7是systemd进程;其init进程都有相应的配置文件,以.conf结尾存在其目录下,systemd的配置文件在/etc/systemd/system/和/usr/lib/systemd/system/,upstart的配置文件在/etc/inittab和/etc/init/*.conf,sysV的配置文件也是/etc/inittab,upstart是sysV的升级版,但并没有多大的改变;
那么,Linux系统启动的流程可以分为:
POST加点自检-->BIOS-->BootLoader查找启动的MBR(这里的MBR不一定非得是硬盘上的,看你是用什么启动的,比如U盘,光盘,网络什么的)-->Kernel加载内核的ramdisk文件-->rootfs挂载根文件系统(因为内核文件需要挂载到一个根上才能启动,这里可以理解gurb文件给内核文件提供了这样的环境,自己理解的)-->switchroot切换根(内核启动完成后,这里就要切换到用户空间了)-->/sbin/init(运行用户空间的init进程)-->根据配置文件设定运行级别(一般分为7个级别,3表示字符界面,5表示图形,0表示关机,1表示单用户,6表示重启)-->根据系统初始化脚本初始化-->关闭或启动对应级别下的服务-->启动终端。
2、简述grub启动引导程序配置及命令行接口详解
grub实际上是一个系统启动的引导程序,其功能有:
1.提供菜单,并提供交互式的接口;按键e,用户编辑菜单,按键c,命令模式,交互式接口;
2.加载用户选择的内核或操作系统,允许传递参数给内核;
3.为菜单提供了保护机制,可在编辑菜单的时候添加密码,也可在启动内核或操作系统的时候添加密码;
grub的命令行接口:可使用命令进行编辑和查看;
help:获取帮助列表,help KEYWORD 命令的详细帮助信息;
find:(hd#,#)/PATH/TO/SOMEFILE,查找某个分区上的某个文件,hd#,磁盘编号,第2个#表示分区编号,都用数字表示,从0开始编号,例如hd0,0;
root:(hd#,#)挂载某个磁盘的某个分区为根分区;
如何手动在grub命令行接口启动系统:
grub>root(hd0,0) 挂载第一块磁盘的第一个分区为根文件系统;
grub>kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE 以只读方式启动内核文件,挂载根文件系统的设备;
grub>initrd /initramfs-VERSION-RELEASE.img 启动initramdisk文件;
grub>boot 启动系统;
以CentOS 6为例,查看grub配置文件,/etc/grub/grub.conf,CentOS 7的grub配置文件与6的不同。
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=37af9d40-c6ab-42fb-b439-0b93c750590d rd_
NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYP
E=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
常用配置项:
default:设定默认启动的菜单项,菜单项的编号,从0开始;
timeout:指定菜单项等待选项选择的时长,单位为秒;
splashimage:指明菜单背景图片文件路径,一般为压缩文件;
hiddenmenu:隐藏菜单
password [--md5] STRING:这里可以给编辑菜单的时候添加密码认证;
title:可以自定义一个标题;
root:grub查找第二阶段及kernel文件所在的设备分区,为grub的根;
kernel:启动的内核;
initrd:内核匹配的ramfs文件;
password [--md5] STRING:这里可以为启动内核或者操作系统时添加密码进行认证;
3、实现kickstart文件制作与光盘镜像制作
CentOS系统安装可实现无人值守的自动安装,由anaconda程序完成,但需要kickstart配置文件做引导文件;
kickstart文件遵循一定的语法格式,分为命令段,程序包段,脚本段等;
#version=DEVEL
# System authorization information 设置认证方式
auth --enableshadow --passalgo=sha512 指定认证方式为sha512的方式
# Use CDROM installation media
cdrom 这里是光盘引导,因为我用的是虚拟机里的anaconda文件,所以当时安装时用的是光盘镜像安装
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us' 设置键盘类型
# System language
lang en_US.UTF-8 设置语言类型
# Network information 设置网络参数
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network --hostname=localhost.localdomain
#这里是DHCP获取IP,网卡是ens33,设置主机名hostname。
# Root password 设置root密码,当然是加密的。
rootpw --iscrypted $6$IQfljVyZYBY.rbgS$OWU6hNHEiYNKVojTfoY9u3Ov3OEt5XenRG077HB7c8KHq33oALjCVNJsj19P
yMRe6BZFvikh4P1lLLsLC.fD41
# System services 设置服务
services --disabled="chronyd" 这里时钟服务是关闭的
# System timezone 设置系统时区,亚洲,上海。
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration 设置系统BootLoader配置
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
"anaconda-ks.cfg" 53L, 1561C 1,1 Top
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
#这里以上的内容有重复的
# Partition clearing information 分区情况
clearpart --none --initlabel
# Disk partitioning information 这里是磁盘分区信息,包括boot分区,交换分区,根,以及文件系统
part pv.253 --fstype="lvmpv" --ondisk=sda --size=42056
part /boot --fstype="xfs" --ondisk=sda --size=500
volgroup centos --pesize=4096 pv.253
logvol / --fstype="xfs" --size=40000 --name=root --vgname=centos
logvol swap --fstype="swap" --size=2048 --name=swap --vgname=centos
%packages 程序包段,指明要安装的程序包,以及包组,也包含不安装的程序包;这里是最小化安装;
@^minimal
@core
@development
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
也可通过web界面的形式定制kickstart文件:
1.安装程序包:yum install system-config-kickstart
2.启用命令:system-config-kickstart
检查语法错误:ksvalidator 可制定完文件后检查是否有错误;
如何创建光盘镜像:
1.首先挂载系统光盘:mount /dev/cdrom /media/cdrom
2.进入挂载目录,复制isolinux文件至自己创建的目录下,创建ks.cfg文件用于引导,比如目录为myboot
3.执行制作镜像命令:
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS-6-x86_64-boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/
注意:可能有的系统上没有mkisofs命令,需要手动安装程序包,可以先yum provides mkisofs查看下依赖的是哪个程序包,然后yum install的安装。
[[email protected] ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS-7-x86_64" -c isolinux/boot.cat -b myboot/isolinux/isolinxu.bin -o /root/boot.iso myboot/
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage 1.1.11 (Linux)
Scanning myboot/
Scanning myboot/isolinux
Excluded by match: myboot/isolinux/boot.cat
Excluded: myboot/isolinux/TRANS.TBL
Writing: Initial Padblock Start Block 0
Done with: Initial Padblock Block(s) 16
Writing: Primary Volume Descriptor Start Block 16
Done with: Primary Volume Descriptor Block(s) 1
Writing: Eltorito Volume Descriptor Start Block 17
genisoimage: Uh oh, I cant find the boot image 'myboot/isolinux/isolinxu.bin' !
[[email protected] ~]#
这里需要大神们帮我查看下最后一个错误在哪里,实在找不到了,请不懂的同学不要效仿怎么制作光盘镜像,后期我在做更改。
下一篇: ButterKnife,你真的了解吗?