1、简述linux操作系统启动流程
* Linux系统的组成部分:内核+根文件系统
内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能
* 运行中的系统环境可分为两层:内核空间、用户空间
用户空间:应用程序(进程或线程)
内核空间:内核代码(系统调用)
* 内核设计流派:
单内核设计:把所有功能集成于同一个程序;例如Linux系统
微内核设计:每种功能使用一个单独的子系统实现;例如:Windows系统
* Linux内核特点:
支持模块化: .ko (kernel object)
支持模块运行时动态装载或卸载;
(1)内核版本查询
(2)内核文件 可以多内核
(3)内核模块里的文件
(4)ramdisk虚拟根
ramdisk: 虚拟根 启动时候在内存中虚拟一个根 用于加载当前硬件驱动(适用不同硬件的主机), 如果是编译安装系统 仅针对本机硬件, 不需要这个虚拟根。
(5)系统的启动流程
(6)系统的初始化
(7)内核空间的启动流程:
(8)CentOS的运行级别init
(9)配置inittab文件
文件所在位置/etc/inittab,inittab在启动中起着非常重要的作用
每行定义一种action(动作)以及与之对应的process(任务)
id:runlevels:action:process
id:一个任务的标识符;
runlevels:在哪些级别启动此任务;#,###,也可以为空,表示所有级别;
action:在什么条件下启动此任务;
process:任务;
action:
wait:等待切换至此任务所在的级别时执行一次;
respawn:一旦此任务终止,就自动重新启动之;
initdefault:设定默认运行级别;此时,process省略;
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;
例如:
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
…………
l6:6:wait:/etc/rc.d/rc 6
意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务;
K*:要停止的服务;K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的;
S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;
(10)用户空间的启动流程:设置默认运行级别 –>运行系统初始化脚本,完成系统初始化 –>关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务–>设置登录终端 [–>启动图形终端]
2、简述grub启动引导程序配置及命令行接口详解
(1)什么是grub
GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
(2)grub版本
grub 0.x: grub legacy经典版本:Centos6和Centos5使用该版本
grub 1.x: grub2:Centos7使用该版本
(3)grub启动的三个阶段
第1阶段:stage1: 用于启动mbr中Boot loader
第1.5阶段: stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
第2阶段 stage2:读取grub.conf 配置文件,并实现引导功能的扩展,第二阶段的内核通常放置在一个基本磁盘分区上。
(4)与grub相关的配置文件
与grub相关的配置文件包括:/etc/grub.conf和/boot/grub/grub.conf,其实/etc/grub.conf是指向/boot/grub/grub.conf的软链接,grub程序在引导启动时会读取这个配置文件并按照该文件的配置参数引导启动系统。
通常其内容为:
default=0:表示有多个grub引导菜单时,选择哪一个作为默认启动引导菜单,default=0表示默认使用第一个title菜单中的配置;
timeout=5:在grub选择菜单中,5秒内,如果用户没有选择任何一个title,则使用default中指定的titile菜单中的配置进行启动。
splashimage:指定引导菜单中的背景图片的路径;
titile:指定title菜单到的名称;
root:表示kernel和initrd文件所在的分区路径,而不是“根分区”;其设置格式为:root (hd#,#),硬盘均会被识别为hd,第一个#表示第几个硬盘,从0开始;地第二个#表示同一个硬盘上的不同分区,也使用数字标识,从0开始;
kernel:通常用于指定要运行的内核文件路径,如:/vmlinuz-2.6.32-642.el6.x86_64;另外也可在其后设置相关的内核参数,如:ro表示只读,root表示指定根分区所在路径,关闭selinux等等;
initrd:为内核运行指定其可用的ramdisk文件,其版本须与内核版本相一致;
(5)grub程序的功能
1)、 提供菜单、并提供交互式接; e: 编辑模式,用于编辑菜单;c: 命令模式,交互式接口;
2) 、加载用户选择的内核或操作系统, 允许传递参数给内核,也 可隐藏此菜单。
3)、 为菜单提供了保护机制,为编辑菜单进行认证,为启用内核或操作系统进行认证。
在系统开机启动过程中,有几秒的过渡页面,此时按任意键可进入到菜单页面中:
按e键进入编辑模式
按c键进入命令模式,按esc键返回
(6)grub的命令行接口
在菜单页面按c即可进入命令行接口,在此命令行接口, 我们可以配置相关的grub设置,如指定root 路径、kernel文件的路径等等。grub命令行接口的常用指令有:
help:查看命令帮助;
root (DEVICE):指定系统和内核文件所在的分区,如root(hd0,0)。
find (hd0,0) /path/to/file:用于查找对应分区下的文件。常用于当不确认内核文件在哪个分区时,可使用此命令确认文件所在路径;支持tab补全;
kernel /path/to/kernel_file:用于指定要运行的内核文件。
initrd /path/to/kernel_file:指定initrd文件;
boot:以当前配置好的grub配置启动系统;
(7)进入单用户模式:
1) 、编辑grub菜单(选定要编辑的title,而后使用e命令);
2) 、在选定的kernel后附加
1, s, S或single都可以;
3)、 在kernel所在行,键入“b”命令;
(8)安装grub方法:
1)、 grub-install命令
格式: grub-install –root-directory=ROOT /dev/DISK
DEVICE:安装的目标磁盘;
–root-directory=DIR:指grub映像文件的存放位置,默认为当前系统根目录。grub-install会在指定的目录下创建boot/grub/的层级目录,并生成相关的grub文件生成在DIR/boot/grub/下。
2)、在grub中安装grub
[root@bogon ~]# grub #输入grub命令
Probing devices to guess BIOS drives. This may take a long time.
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> root (hd0,0) #指定boot分区位置
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0) #安装grub
setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub> quit #退出grub
3、实现kickstart文件制作与光盘镜像制作
anaconda的配置方式:
(1) 交互式配置方式;
(2) 支持通过读取配置文件中事先定义好的配置项自动完成配置;遵循特定的语法格式,此文件即为kickstart文件;
安装kickstart工具
[root@localhost ~]# yum -y install system-config-kickstart #安装kickstart工具
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Repository base is listed more than once in the configuration
Determining fastest mirrors
* base: mirrors.sohu.com
* extras: mirrors.163.com
* updates: mirrors.163.com
base | 3.7 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 7.0 MB 00:02
解决依赖关系
Kickstart配置文件内容
kickstart文件的格式
命令段:
指定各种安装前配置选项,如键盘类型等;
必备命令
可选命令
程序包段:
指明要安装程序包,以及包组,也包括不安装的程序包;
%packages
@group_name
package
-package
%end
脚本段:
%pre:安装前脚本
运行环境:运行安装介质上的微型Linux系统环境;
%post:安装后脚本
运行环境:安装完成的系统;
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
lang zh_CN.UTF-8 #系统语言支持
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6 #开机onboot设置成yes
rootpw 12345 #密码修改
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai #设定时区
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #BootLoader设定
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all --drives=sda
volgroup VolGroup --pesize=4096 pv.008002
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1984 --maxsize=1984
part /boot --fstype=ext4 --size=500
part pv.008002 --grow --size=1
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
%packages
@additional-devel
@base
@chinese-support
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@desktop-platform-devel
@development
@directory-client
@eclipse
@emacs
@fonts
@general-desktop
@graphical-admin-tools
启用窗口配置ks
[root@localhost ~]# system-config-kickstart &
创建一个目录
[root@localhost ~]# mkdir /myboot
转到这个目录并查看光盘
[root@localhost ~]# cd /myboot
[root@localhost myboot]# ls /media/CentOS_6.9_Final/
CentOS_BuildTag EULA images Packages repodata RPM-GPG-KEY-CentOS-Debug-6 RPM-GPG-KEY-CentOS-Testing-6
EFI GPL isolinux RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-6 RPM-GPG-KEY-CentOS-Security-6 TRANS.TBL
拷贝光盘里面isolinux整个目录
[root@localhost myboot]# cp -a /media/CentOS_6.9_Final/* ./
转到isolinux本地目录下并赋予写入权限
[root@localhost myboot]# cd isolinux/
[root@localhost isolinux]# chmod +w *
[root@localhost isolinux]# ll
总用量 28
-rw-r--r--. 1 root root 2048 5月 3 23:48 boot.cat
修改相关项目.
[root@localhost isolinux]# vim isolinux.cfg
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.9!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^Install or upgrade an existing system ^-^
menu default
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
拷贝anaconda文件到myboot目录
[root@localhost myboot]# cp /root/anaconda-ks.cfg ks.cfg
[root@bogon myboot]# ls -a
. EULA Packages RPM-GPG-KEY-CentOS-Security-6
.. GPL RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
CentOS_BuildTag images repodata TRANS.TBL
.discinfo isolinux RPM-GPG-KEY-CentOS-6
EFI ks.cfg RPM-GPG-KEY-CentOS-Debug-6
注意查看myboot目录里面查看是否有.discinfo这个隐藏文件,如果没有使用镜像会报错无法找到光盘,从新到光盘里面拷贝出来即可。
创建光盘镜像
[root@localhost ~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso /myboot/
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage 1.1.9 (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
Size of boot image is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor Block(s) 1
Writing: Joliet Volume Descriptor Start Block 18
Done with: Joliet Volume Descriptor Block(s) 1
Writing: End Volume Descriptor Start Block 19
Done with: End Volume Descriptor Block(s) 1
Writing: Version block Start Block 20
Done with: Version block Block(s) 1
Writing: Path table Start Block 21
Done with: Path table Block(s) 4
Writing: Joliet path table Start Block 25
Done with: Joliet path table Block(s) 4
Writing: Directory tree Start Block 29
Done with: Directory tree Block(s) 2
Writing: Joliet directory tree Start Block 31
Done with: Joliet directory tree Block(s) 2
Writing: Directory tree cleanup Start Block 33
Done with: Directory tree cleanup Block(s) 0
Writing: Extension record Start Block 33
Done with: Extension record Block(s) 1
Writing: The File(s) Start Block 34
21.94% done, estimate finish Fri May 4 00:43:47 2018
43.79% done, estimate finish Fri May 4 00:43:47 2018
65.72% done, estimate finish Fri May 4 00:43:47 2018
87.57% done, estimate finish Fri May 4 00:43:47 2018
Total translation table size: 4701
Total rockridge attributes bytes: 1438
Total directory bytes: 2048
Path table size(bytes): 26
Done with: The File(s) Block(s) 22660
Writing: Ending Padblock Start Block 22694
Done with: Ending Padblock Block(s) 150
Max brk space used 0
22844 extents written
查询新建的iso文件
[root@localhost ~]# ls
anaconda-ks.cfg boot.iso install.log install.log.syslog 公共的 模板 视频 图片 文档 下载 音乐 桌面
拷贝出来boot.iso并加载使用
启动虚拟机并加载
设置语言并完成安装
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97473