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