欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux系统启动

程序员文章站 2022-03-16 08:54:37
...

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] ~]# 

这里需要大神们帮我查看下最后一个错误在哪里,实在找不到了,请不懂的同学不要效仿怎么制作光盘镜像,后期我在做更改。

 

相关标签: Linux