2018-09-29

1、简述linux操作系统启动流程

大家都知道Linux内核是一个操作系统中非常重要的一环,它是底层硬件与上层软件链接的枢纽,Linux系统的组成:内核+根文件系统

Linux内核特点:

支持模块化:.ko 

支持模块运行时动态装载或卸载


组成部分:

1.核心文件:/boot/vmlinuz-VERSION-release


2.ramdisk:(动态创建临时根文件,里面是内核启动加载磁盘文件系统根必须的磁盘驱动程序等,在某些个人计算机上,可以设计无需此帮助,使用缓冲和缓存来加速对磁盘上的文件访问,把内存当硬盘使用)

ramdisk:ramdisk --> ramfs

CentOS 5: initrd    工具程序:mkinitrd

CentOS 6,7: initramfs   工具程序:dracut, mkinitrd

(文件位置)CentOS 6,7:/boot/initramfs-VERSION-release.img


3.模块文件:(包含许多内核需要加载的模块文件,如文件系统类型文件存放)

/lib/modules/VERSION-release


如我这里的vmlinuz-3.10.0-327.e17.x86_64 就是内核的核心文件

initramfs-3.10.0-327.el7.x86_64.img 就是相对应的ramdisk文件

而、lib/modules/就是相对应内核版本的模块文件


centos 系统启动流程

1.内核空间

(1)POST:加电自检;ROM:CMOS     BIOS:Basic Input and Output System

ROM+RAM

(2)Boot Sequence:按次序查找各引导设备,第一个有引导程序的设备即为本次启动要用到的设备;


*MBR:Master Boot Record

512bytes:

446bytes:bootloader

64bytes:fat

2bytes:55AA (有效)非55AA(无效)


(3)bootloader:引导加载器,程序 Linux:(放置于MBR中)

LILO:LIinux  LOader

GRUB:Grand Uniform Bootloader

(这个过程是选择操作系统内核,将内核装载到内存特定空间中。把系统控制权给内核)


*GRUB                                                                       

bootloader:1st stage

Partition:filesystem driver, 1.5 stage

Partition:/boot/grub, 2nd stage


(MBR)bootloadder—————(GRUB)Partition(第二阶段,提供交互式界面,选择内核类型)————加载内核


(4)加载内核(kernel)

开始自身初始化

探测可识别的所有硬件设备——加载硬件驱动(可能借助ramdisk)———只读挂载文件系统(读取根文件系统)————运行总父程序init(用户空间的老大)


*init程序的类型:

CentOS 5-:SysV init     配置文件:/etc/inittab

CentOS 6:Upstart        配置文件:/etc/inittab/etc/init/*.conf

CentOS 7:Systemd       配置文件:/usr/lib/systemd/system/, /etc/systemd/system/


总结

*内核空间(内核级别的启动流程)

POST(电自检)——Boot Sequence(查找引导设备)——(MBR)bootloadder—————(GRUB)Partition(第二阶段,提供交互式界面,选择内核类型)————加载内核————探测可识别的所有硬件设备——加载硬件驱动(可能借助ramdisk)———只读挂载文件系统(读取根文件系统)————运行总父程序init(用户空间的老大)


2.用户空间(分别从5,6,7版本说明)


centos 5 (级别适用于6,7)

*设置默认运行级别

运行级别:为了系统的运行或维护等目的而设定的机制;0-6:7个级别;

默认级别:3, 5

级别切换:init #

级别查看:(1)who -r   (2)runlevel

配置文件:/etc/inittab

0:关机, shutdown

1:单用户模式(single user),root用户,无须认证;维护模式;

2、多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式;

3、多用户模式(mutli user),完全功能模式;文本界面;

4、预留级别:目前无特别使用目的,但习惯以同3级别功能使用;

5、多用户模式(multi user), 完全功能模式,图形界面;

6、重启,reboot

目录下的服务脚本所控制服务;

K*:要停止的服务;K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的;

S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;


inittab服务

配置文件地址:/etc/init.d/服务名

 chkconfig  后台服务管理命令

 /etc/init.d/* (/etc/rc.d/init.d/*)


centos7 init,centos5 inttab服务位置

 脚本框架:#!/bin/bash# (级别)(启动优先级)(关闭优先级) 

                            # chkconfig: LLL NN NN#

 description: (非必要) 

 for srv in /etc/rc.d/rc#.d/K*; do

 $srv stop 

done 

 for srv in /etc/rc.d/rc#.d/S*; do

 $srv start 

done

脚本执行方式:# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}# service SRV_SCRIPT {start|stop|restart|status} 

 每个服务脚本在各级别下的启动或关闭状态;

 查看:chkconfig --list name 

添加:chkconfig --add name

 删除:chkconfig --del name 

修改模式状态chkconfig --level number name

*系统初始化脚本:/etc/rc.d/rc.sysinit(相对于centos5来说)

(1) 设置主机名;

(2) 设置欢迎信息;

(3) 激活udev和selinux;

(4) 挂载/etc/fstab文件中定义的所有文件系统;

(5) 检测根文件系统,并以读写方式重新挂载根文件系统;

(6) 设置系统时钟;

(7) 根据/etc/sysctl.conf文件来设置内核参数;

(8) 激活lvm及软raid设备;

(9) 激活swap设备;

(10) 加载额外设备的驱动程序;

(11) 清理操作;

*终端配置文件

tty1:2345:respawn:/usr/sbin/mingetty tty1

... ...

tty6:2345:respawn:/usr/sbin/mingetty tty6

(1)mingetty会调用login程序;

(2)打开虚拟终端的程序除了mingetty之外,还有诸如getty等;


centos 6 服务配置

init程序:upstart,但依然为/sbin/init,其配置文件:

/etc/init/*.conf, /etc/inittab(仅用于定义默认运行级别)

注意:*.conf为upstart风格的配置文件;

rcS.conf

rc.conf

start-ttys.conf

CentOS 7 服务配置

init程序:systemd,配置文件:/usr/lib/systemd/system/*,  /etc/systemd/system/*

完全兼容SysV脚本机制;因此,service命令依然可用;不过,建议使用systemctl命令来控制服务;

# systemctl  {start|stop|restart|status}  name[.service]


centos7全新的rc服务脚本位置

总结

*用户空间(用户级别的启动流程)

/sbin/init——/etc/inttab(访问配置文件)——设置默认运行级别—————运行系统初始化脚本,完成系统初始化————关闭K服务开启S服务————设置登录终端---------启动图形终端(非必要)


合并总结

*内核空间+用户空间(相对于centos5,6而言)

POST(电自检)——Boot Sequence(查找引导设备)——(MBR)bootloadder—————(GRUB)Partition(第二阶段,提供交互式界面,选择内核类型)————加载内核————探测可识别的所有硬件设备——加载硬件驱动(可能借助ramdisk)———只读挂载文件系统(读取根文件系统)————运行总父程序init(用户空间的老大)/sbin/init——/etc/inttab(访问配置文件)——设置默认运行级别—————运行系统初始化脚本,完成系统初始化————关闭K服务开启S服务————设置登录终端---------启动图形终端(非必要)



2、简述grub启动引导程序配置及命令行接口详解


我们知道Linux开机过程中遇到grub交互界面,来选择内核和系统类型,ramdisk等


对于(centos5,6来说)
grub legacy:

stage1: mbr

stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;

stage2:磁盘分区(/boot/grub/)

配置文件:/boot/grub/grub.conf <-- /etc/grub.conf

stage2及内核等通常放置于一个基本磁盘分区;

功用:

(1) 提供菜单、并提供交互式接口

e: 编辑模式,用于编辑菜单;

c: 命令模式,交互式接口;

(2) 加载用户选择的内核或操作系统

允许传递参数给内核

可隐藏此菜单

(3) 为菜单提供了保护机制

为编辑菜单进行认证

为启用内核或操作系统进行认证

如何识别设备:

(hd#,#)

hd#: 磁盘编号,用数字表示;从0开始编号

#: 分区编号,用数字表示; 从0开始编号

(hd0,0)

grub的命令行接口

help: 获取帮助列表

help KEYWORD: 详细帮助信息

find (hd#,#)/PATH/TO/SOMEFILE:

root (hd#,#)

kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

例如:init=/path/to/init, selinux=0

initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;

boot: 引导启动选定的内核;

手动在grub命令行接口启动系统:

grub> root (hd#,#)

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot

配置文件:/boot/grub/grub.conf

配置项:

default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;

timeout=#:指定菜单项等待选项选择的时长;

splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

hiddenmenu:隐藏菜单;

password [--md5] STRING: 菜单编辑认证;

title TITLE:定义菜单项“标题”, 可出现多次;

root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;

kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核

initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;

password [--md5] STRING: 启动选定的内核或操作系统时进行认证;

grub-md5-crypt命令 

内核保护密码设置明文,来是登入输入密码加载内核

进入单用户模式:

(1) 编辑grub菜单(选定要编辑的title,而后使用e命令);

(2) 在选定的kernel后附加

1, s, S或single都可以;

(3) 在kernel所在行,键入“b”命令;

安装grub:

(1) grub-install

grub-install --root-directory=ROOT /dev/DISK

(2) grub

grub> root (hd#,#)

grub> setup (hd#)

练习:

1、新加硬盘,提供直接单独运行bash系统;

2、破坏本机grub stage1,而后在救援模式下修复之;

3、为grub设置保护功能;

编辑开机grub信息


我在这里不仅添加bash,还添加了ls命令

使用镜像修复(紧急救援模式)


为grub设置保护功能



3、实现kickstart文件制作与光盘镜像制作



为了将Linux系统内的文件传输到window中,我通过QQ邮箱来,但是通过下载包rz命令,可以通过window向Linux传输文件


你可能感兴趣的:(2018-09-29)