系统启动和内核管理

1.centos6的启动管理

·kernel实现进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能等功能

·rootfs包括程序和glibc库

程序:二进制执行文件

库:函数集合,function,调用接口(头文件负责描述)

 1.加载bios的硬件信息,获取第一个启动设备

2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息

3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备

4.核心执行init程序,并获取默认的运行信息

5.init程序执行/etc/re.d/rc.sysinit文件,重新挂载根文件系统

6启动核心的外挂模块

7init执行运行的各个批处理文件

8init执行/etc/rc.d/rc.local

9执行/bin/login程序,等待用户登录

10.登录之后开始shell控制主机

2.硬件启动POST

POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU,主板,内存,硬盘子系统,显示子系统,串并行接口,键盘等硬件情况的检测

主板的ROM:BIOS,Basic Input and Output system,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置,开机加电自检程序和系统启动自举程序等

主板的RAM:CMOS互补金属氧化物半导体,保存各项参数的设定,按次序查找引导设备,第一个有引导程序的设备为本次启动设备

3.启动加载器bootloader

grub功能和组成

bootloader:引导加载器,引导程序

·windows:ntloader,仅是启动os

·linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压,展开,并把系列控制权移交给内核

Linux的bootloader

·LILO:linux loader,早期的bootloader,功能单一

·GRUB:GRand Unified Bootloader,Centos 5,6  ,Centos7以后使用GRUB 2.02

GRUB启动阶段

·primary boot loader:

1st stage:MBR的前446个字节

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

·seconday boot loader :2nd stage,分区文件/boot/grub/

 4.利用grub命令修复grub

[19:13:37 root@centos7 ~]$dd if=/dev/zero of=/dev/sda bs=1 count=446
446+0 records in
446+0 records out
446 bytes (446 B) copied, 0.00103883 s, 429 kB/s
破坏grub第一阶段
[19:14:38 root@centos7 ~]$hexdump -C -n 512 /dev/sda
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 20 |............... |
000001c0 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa |!...(....... ...|
000001d0 29 82 8e fe ff ff 00 08 20 00 00 f8 df 18 00 00 |)....... .......|
000001e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200

[19:16:24 root@centos7 ~]$reboot

无法重启,出现下面提示



 光盘启动,进入rescue模式

chroot /mnt/sysimage
grub2-install /dev/sda  centos6是grub-install /dev/sda
sync
exit
exit
reboot

修复grub的第1.5阶段故障
[19:30:24 root@centos7 ~]$dd if=/dev/zero of=/dev/sda bs=521 count=25 seek=1
[19:16:24 root@centos7 ~]$reboot
无法重启,出现下面提示
chroot /mnt/sysimage
grub2-install /dev/sda  centos6是grub-install /dev/sda
sync
exit
exit
reboot


centos6修复方法

 rm -rf /boot/*
用光盘进入救援模式
chroot /mnt/sysimage
切根
mount /dev/sr0 /mnt/
挂载光盘
rpm -ivh /mnt/Packages/kernel.xxx.rpm --force
安装内核包
centos 7方法
grub2-mkconfig -o /boot/grub2/grub.cfg
centos6方法
grub-install /dev/sda
vim /boot/grub/grub.conf
default=0
timeout=5
title centos
kernel /vmlinuz root=/dev/sda2
initrd /initramfs.img

exit
reboot

 对/etc/fatab进行恢复
用光盘进入救援模式
找到/所在分区并恢复/etc/fstab
fdisk -l
mkdir /mnt/rootdir
mount /dev/sdaN /mnt/rootdir
挂在看是否为/
ls /mnt/rootdir
查看底下的文件确定为跟分区
mount /dev/sda2 /mnt/rootdir
 vi /mnt/rootdir/etc/fstab
/dev/sda1 /boot ext4 defaults 0 0
/dev/sda2 / ext4 defaults 0 0
reboot

 5.init初始化

POST-->BootSqruence(BIOS)-->Bootloader(MBR)-->kernel(ramdisk)-->rootfs(只读)-->init(systemd)

init程序的类型:

SysV:init,centos 5之前

配置文件:/etc/inittab

Upstart:init,centos6

配置文件:/etc/inittab,/etc/init/*.conf

Systemd:systemd,Centos 7

配置文件:/uer/lib/systemd/system,/etc/systemd/system

运行级别

运行级别:为系统运行或维护等目的而设定;0-6:7个级别,一般使用3,5做默认级别

0:关机

1:单用户模式(root自动登录),single,维护模式

2:多用户模式,启动网络功能,但不会启动NFS:维护模式

3:多用户模式,正常模式:文本界面

4:预留级别:可同3级别

5:多用户模式,正常模式;图形界面

6:重启

6.centos6服务管理

centos6服务管理
service 服务 start|stop|restart service --status-all

/etc/rc.d/rc控制服务脚本的开机自动运行

for i in /etc/rc$runlevel.d/K* ; do
$i stop
done
for i in /etc/rc$runlevel.d/S* ; do
$i start
done

说明:rc N -->意味着读取/etc/rc.d/rcN/d/

k:k##:运行次序;数字越小,越先运行,数字越小的服务,通常为依赖到别的服务

s:s##:运行次序;数字越小,越先运行,数字越小的服务,通常为依赖到别的服务

配置服务开机启动

chkconfig命令

chkconfig命令管理服务

[18:50:59 root@centos6-1 rc3.d]$chkconfig --level 3 iptables off
设定iptables在级别为3的情况下开机不自起
[18:51:51 root@centos6-1 rc3.d]$ls
K10saslauthd    K89netconsole  S02lvm2-monitor  S10network  S13iscsi             S25netfs      S80postfix
K87multipathd   K89rdisc       S07iscsid        S11auditd   S15mdmonitor         S26udev-post  S90crond
K87restorecond  K92iptables    S08ip6tables     S12rsyslog  S25blk-availability  S55sshd       S99local
[18:55:15 root@centos6-1 rc3.d]$chkconfig --del iptables
删除服务
[18:56:38 root@centos6-1 rc4.d]$chkconfig --add iptables
添加服务

[18:57:02 root@centos6-1 rc4.d]$chkconfig --list iptables
iptables 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭

查看服务

开机启动文件rc.local

/etc/rc.local

/etc/rc.d/rc.local

最后启动一个服务s99local没有连接至/etc/rc.d/init/d一个服务脚本,而是指向了/etc/rc.d/local脚本

想开机自动运行的,可直接放置于/etc/rc.d/rc.local

7.centos启动过程总结

centos6

1.post加电自检

这个过程是开机后,BIOS或UEFI进行硬件检查的阶段

2.MBR引导

自检硬件没有问题时候,这里以BIOS为例,BIOS将会直接去找硬盘的第一个扇区,找到前446字节,将MBR加载到内存中,MBR将告诉程序下一阶段去哪里找系统grub引导。此阶段属于grub的第一阶段。grub还有1.5阶段和2阶段。

3.GRUB引导

grub第1.5和2阶段,信息默认存放在扇区中,如果使用grub-install生成的2阶段的文件是存放在/boot分区中的。
为了加载内核系统,不得不加载/boot分区,而加载/boot分区,需要有/boot分区的驱动,/boot分区驱动是放在/boot分区中的,啊,我们好像进入了死循环了,Linux是怎么解决的呢?就是靠放在1.5阶段中的数据,是放在第一个扇区后的后续扇区中,具体占用多少字节,不太清楚,只知道1.5阶段和2阶段总共27个扇区。

stage1.5

mbr之后的扇区,识别stage2所在的分区上的文件系统

stage2

开机启动的时候看到的Grub选项、信息,还有修改GRUB背景等功能都是stage2提供的,stage2会去读入/boot/grub/grub.conf或者menu.lst等配置文件

4.读取grub.conf文件

读取grub.conf文件以确定内核启动的参数,准备启动内核

5.启动内核

加载内核,核心开始解压缩,启动一些最核心的程序。
因为为了让内核足够轻小,硬件驱动并没有放在内核文件里面,我们可以看到内核很小,才4M左右,我们可以想象Windows中的驱动,安装系统时候还需要使用驱动软件下载好长时间呢
因此需要使用/initramfs-2.6.32-696.el6.x86_64.img来驱动硬件

6.启动init进程

grub中默认指定init=/sbin/init程序,可以在grub.conf中kernel行自定义执行程序init=/bin/bash,此时可以绕过下面步骤直接进入bash界面。
内核源代码文件中显示996行左右,规定了init启动的顺序,/sbin/init->/etc/init->/bin/init->/bin/sh,/bin/bash没有写,应该是和/bin/sh一样吧

1)读取/etc/inittab文件

inittab文件里面定义了系统默认运行级别

2)执行/etc/rc.d/rc.sysinit程序

系统初始化一些脚本

3)/etc/rc#.d/文件(各种服务)

里面定义的是各种服务的启动脚本

4)/etc/rc.d/rc.local文件

这里面可以自定义开机启动的命令。

8.执行/bin/login

执行/bin/login程序,等待用户登录

 

参看:http://s4.51cto.com/wyfs02/M02/87/20/wKiom1fVBELjXsvaAAUkuL83t2Q304.jpg


1.uefi或BIOS初始化,开始post开机自检

2.加载mbr到内存

3.GRUB阶段

4.加载内核和inintamfs模块

5.内核开始初始化,使用systemd来代替centos6以前的init程序

(1)执行initrd.target

包括挂载/etc/fstab文件中的系统,此时挂载后,就可以切换到根目录了

(2)从initramfs根文件系统切换到磁盘根目录

(3)systemd执行默认target配置

centos7表面是有“运行级别”这个概念,实际上是为了兼容以前的系统,每个所谓的“运行级别”都有对应的软连接指向,默认的启动级别时/etc/systemd/system/default.target,根据它的指向可以找到系统要进入哪个模式
模式:

  • 0 ==> runlevel0.target, poweroff.target
  • 1 ==> runlevel1.target, rescue.target
  • 2 ==> runlevel2.target, multi-user.target
  • 3 ==> runlevel3.target, multi-user.target
  • 4 ==> runlevel4.target, multi-user.target
  • 5 ==> runlevel5.target, graphical.target
  • 6 ==> runlevel6.target, reboot.target

(4)systemd执行sysinit.target

有没有很眼熟?是的,在CentOS6上是被叫做rc.sysint程序,初始化系统及basic.target准备操作系统

(5)systemd启动multi-user.target下的本机与服务器服务

(6)systemd执行multi-user.target下的/etc/rc.d/rc.local

6.Systemd执行multi-user.target下的getty.target及登录服务

getty.target我们也眼熟,它是启动终端的systemd对象。如果到此步骤,系统没有被指定启动图形桌面,到此就可以结束了,如果要启动图形界面,需要在此基础上启动桌面程序



8.linux系统所需文件

 1.分区并创建文件系统

2挂载boot

3安装grub

4准备内核和initramfs文件

5建立grub.conf

6.准备根下面相关程序和库

复制bash等命令和相关库文件

准备网卡驱动

7准备新的虚拟机

将前一虚拟机sdb硬盘对应的vmdk文件增加进去,删除原有磁盘,开机启动

9.systemd

system特性

systemd:从Centos7版本之后开始用systemd实现init进程,系统启动和服务器守护进程管理器负责在系统启动或运行时,激活系统资源,服务器进程和其它进程

新特性

·系统引导时实现服务并行启动

·按需启动守护进程

·自动化的服务依赖关系管理

·同时采用socket式与D-Bus总线式激活服务

·socket与服务程序分离

·向后兼容sysv init脚本

·使用systemctl命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,systemctl无法与之通信和控制

·系统状态快照

systemctl管理系统服务service unit

systemctl command name.service

启动:相当于service name start

systemctl start name.service

停止:相当于service name restart

systemctl stop name.service

重启:相当于service name restart

systemctl restart name.service

查看状态:相当于service name status

systemctl status name.service

禁止自动和手动启动:

systemctl mask name.service

取消禁止

systemctl unmask name.service

设定某服务开机自启,相当于chkconfig name on

systemctl enable name.service

设定某服务开机禁止启动:相当于chkconfig name off

systemctl disable name.service

开机并立即启动或停止

systemctl enable –now postfix

systemctl disable –now postfix

 10.Centos7,8修改密码

在GRUB2启动屏下按e进入编辑模式

找到linux16那段,添加内核参数rd.break

按ctrl-x启动

mount -o remount,rw /sysroot

chroot /sysroot

echo 123|passwd --stdin root

exit

reboot

添加grub密码

grub2-setpassword

清空grub密码

cat /dev/null > /boot/grub2/user.cfg

原文地址:https://www.cnblogs.com/aiyoubucuo/p/14247853.html