全功能
把所有功能集成于同一个程序
每种功能使用一个单独子系统实现
# 内核
如:文件系统,硬件驱动,网络协议等
支持内核模块的动态装载和卸载
POST加电自检->MBR引导->GRUB->加载内核->启动init进程->读取/etc/inittab文件,/etc/init/*.conf文件
执行/etc/rc.d/rc.sysyinit初始化脚本->执行/etc/rc.d/rc脚本->加载/etc/rc#.d/下所有脚本(#为启动级别,这里是开机要启动的各种服务)->执行/etc/rc.d/rc.local脚本(所有服务启动后执行此脚本)->执行/bin/login 程序,进入登录状态
1. 加载BIOS 的硬件信息,获取第一个启动设备
2. 读取第一个启动设备MBR 的引导加载程序(grub) 的启动信息
3. 加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4. 核心执行init 程序,并获取默认的运行信息
5.init 程序执行/etc/rc.d/rc.sysinit 文件
6. 启动核心的外挂模块
7.init 执行运行的各个批处理文件(scripts)
8.init 执行/etc/rc.d/rc.local
9. 执行/bin/login 程序,等待用户登录
10. 登录之后开始以Shell控制主机
注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d的一个服务脚本,而是指向了
/etc/rc.d/rc.local脚本
若不想把服务脚本放置于/etc/rc.d/init.d/目录
且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中/etc/rc.d/rc.local在指定运行级别脚本后运行
可以根据情况进行自定义修改
是BIOS 功能的一个主要部分 。负责 完成对CPU 、主板、内存 、硬盘 子系统、显示 子系统、 串并行接
口、键盘、CD-ROM 光驱 等 硬件情况 的 检测 。
保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、 开机加电 自检程序和系统启动自举程序等。
保存各项 参数的设定按次序查找引导设备,第一个有引导程序的设备为本次启动设备
446: bootloader, 64: 分区表, 2: 55AA
GRUB 0.X: GRUB Legacy, , GRUB2
primary boot loader : 1st stage ,1.5 stage
secondary boot loader :2nd stage ,分区文件
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件
访问,并加载相应的硬件驱动
POST --> BootSequence (BIOS) -->
Bootloader(MBR) --> kernel(ramdisk) --> rootfs( 只读) --> init (systemd) )
## ramdisk 文件的制作:
(1) mkinitrd 命令
为当前正在使用的内核重新制作ramdisk 文件
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
(2) dracut 命令
为当前正在使用的内核重新制作ramdisk 文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
配置文件:/etc/inittab
配置文件:/etc/inittab, /etc/init/*.conf
配置文件:/usr/lib/systemd/system
/etc/systemd/system
/sbin/init CentOS6之前
num | complications |
---|---|
0 | 关机 |
1 | 单用户模式(root 自动登录), single, 维护模式 |
2 | 多用户模式,启动网络功能,但不会启动NFS ;维护模式 |
3 | 多用户模式,正常模式;文本界面 |
4 | 预留级别;可同3 级别 |
5 | 多用户模式,正常模式;图形界面 |
6 | 重启 |
默认级别: 3, 5
切换级别:init #
查看级别:runlevel ; who -r
runlevel
N 3
N为占位符,如果是从其他级别切换过来,则n显示的上次的运行级别
init 读取其初始化文件:/etc/inittab
初始运行级别(RUN LEVEL)
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS 电源终端/ 恢复脚本
在虚拟控制台生成getty
在运行级别5 初始化X
配置文件:/etc/inittab
每一行定义一种action 以及与之对应的process
id:runlevel:action:process
action:
wait: 切换至此级别运行 一次
respawn :此process 终止,就重新启动之
initdefault :设定默认运行级别;process 省略
sysinit :设定系统初始化方式,此处一般为指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now #ctrl+alt+del在字符界面重启
#设置f1-f6六个虚拟终端,可以增加
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
7:2345:respawn:/sbin/mingetty tty10 # 新增的
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon #设置5为图形界面
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
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now(t3延时3秒)生产中最好注释此行,防止误操作重启(对图形界面无效)
/etc/inittab
设置系统默认的运行级别
id:3:initdefault:
破解CentOS5 和6 的root 口令
说明:rc N --> 意味着读取/etc/rc.d/rcN.d/
K*: K##* :## 运行次序;数字越小,越先运行;数字
越小的服务,通常为依赖到别的服务
S*: S##* :## 运行次序;数字越小,越先运行;数字
越小的服务,通常为被依赖到的服务
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
# chkconfig命令
chkconfig [–list] [name]
SysV 的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name
#!/bin/bash
#LLLL 表示初始在哪个级别下启动,- 表示都不启动
# chkconfig: LLLL nn nn
chkconfig --del name
chkconfig [–level levels] name
–level LLLL: 指定要设置的级别;省略时表示2345
进入的请求首先被xinetd 代理
配置文件:/etc/xinetd.conf 、/etc/xinetd.d/与libwrap.so 文件链接
chkconfig tftp on
1:2345:respawn:/usr/sbin/mingetty tty1
2:2345:respawn:/usr/sbin/mingetty tty2
...
6:2345:respawn:/usr/sbin/mingetty tty6
mingetty 会自动调用login 程序
x:5:respawn:/etc/X11/prefdm -nodaemon
开机POST加电自检,检测cpu内存等硬件是否有问题,检测完成后在BISO里面查找引导计算机启动的设备的设置,该设置存储于CMOS,如果是硬盘引导启动会读取硬盘的MBR(446字节+64+2),此时进入stage1;接下来加载/boot/文件系统,由于446字节无法存储/boot文件系统,所有在446字节里面存储的是找到文件系统的指针,这个阶段叫1.5阶段;然后进入stage2读取/boot/grub/grub.conf,加载内核vmlinuz,为了挂载根先加载initramfs作为虚拟文件系统来识别根文件系统;根挂载完后访问下面第一个程序/sbin/init,此程序将读取操作系统配置/etc/inittab,读取运行级别设置,进行服务初始化/etc/rc.d/rc.sysinit,继而读取/etc/fstab挂载,根据相应的启动级别加载/etc/rc.d/rcn.d/下面的服务脚本,先执行k开头的(S25netfs会重读fatab挂载网络资源)最后执行/etc/rc.d/rc.local(s99local)脚本(非服务脚本),然后出现登录界面
POST --> Boot Sequence(BIOS) --> Boot Loader -->
Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init –
(/etc/inittab, /etc/init/*.conf) --> 别 设定默认运行级别 --> 系统
初始化脚本 rc.sysinit --> 务 关闭或启动对应级别的服务 --> 启动终端
grub 0.97: grub legacy
grub 2.x: grub2
grub legacy:
stage1: mbr
stage1_5: mbr 之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2 :磁盘分区(/boot/grub/)
a :内核参数
e: 编辑模式,用于编辑菜单
c: 命令模式,交互式接口
允许传递参数给内核
可隐藏启动菜单
#### (3) 为菜单提供了保护机制
为编辑启动菜单进行认证
为启用内核或操作系统进行认证
help: 获取帮助列表
help KEYWORD: 详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE: :
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的
内核文件;额外还可添加许多内核支持使用的cmdline 参数
例如:max_loop=100 selinux=0 init=/path/to/init
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核
提供额外文件的 的ramdisk
boot: 引导启动选定 的内核
2.6.32/Documentation/kernel-parameters.txt
(hd#,#)
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro
root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
设定项 | 含义 |
---|---|
default=# | 设定默认启动的菜单项;落单项(title) 编号从0 开始 |
timeout=# | 指定菜单项等待选项选择的时长 |
splashimage=(hd#,#)/PATH/XPM_FILE | 菜单背景图片文件路径 |
hiddenmenu | 隐藏菜单 |
password [–md5] STRING | 启动菜单编辑认证 |
title TITLE | 定义菜单项“标题”, 可出现多次 |
root (hd#,#) | 查找stage2及kernel文件所在设备分区;为grub 的根 |
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS] | 启动的内核 |
initrd /PATH/TO/INITRAMFS_FILE | 内核匹配的ramfs 文件 |
password [–md5|–encrypted ] STRING | 启动选定的内核或操作系统时进行认证 |
### 生成grub 口令
vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --encrypted $6$6zfuNMferERFGffg/hf$JdwlfhK
启动系统时,设置其运行级别1
安装grub stage1 和stage1_5 到/dev/DISK 磁盘上,并
复制GRUB到 相关文件到 DIR/boot 目录下
grub-install --root-directory=DIR /dev/DISK
grub> root (hd#,#)
grub> setup (hd#)
yum install ImageMagick
onvert -resize 640x480 -colors 14 win.jpg win.xpm
head -n 10 win.xpm
cp win.xpm /boot/grub
/boot/grub
gzip win.xpm
#initramfs文件
chroot /mnt/sysimage
df#可以看到原系统的磁盘设备
cd /boot
ls
#是initframs内核文件丢失导致,解决方案:
#修复initramfs文件
mkinitrd ./initramfs-`uname -r`.img `uname -r`
#如果是CenOS5 则执行
mkinitrd ./initrd-`uname -r`.img `uname -r`
若修复失败可重装内核
#查看当前系统使用的内核
uname -r
从光盘安装内核(注意要先切换根)
lsblk 可以看到光盘设备是sr0
挂载光盘
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
df
rpm -ivh kernel-2.6.e64.......rpm --force
启动后出现grub,则需要修复grub
chroot /mnt/sysimage
grub-install /dev/sda
exit
exit
reboot
#vmlinuz文件
光盘里面/images/preboot/vmlinuz和/isolinux/vmlinuz即为内核文件,可以直接cp过来
# vmlinuz的文件名可参考/boot/grub/grub.conf中的配置,亦可直接改配置中的文件名,两者保持一致即可
cp -av /mnt/cdeom/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
开机回车,a->1|s|signal进入单用户模式
或者
开机回车,a->3
然后将/etc/inittab改回来
cd /etc/init.d/
vim testsrv
输入以下内容
#!/bin/bash
#chkconfig:2345 99 00
#description:this service is used for test
case $1 in
start)
echo 'the service is started'
touch /root/testsrv
;;
stop)
echo 'the service is stopped'
rm -f /boot/testsrv
;;
status)
[ -f /boot/testsrv ] && echo 'service testsrv is running...'||echo 'service testrv is stopped'
;;
*)
echo 'Usage start|stop|status'
注意#chkconfig:2345 99 00这里开机启动的序号不能大于99
#给执行权限
chmod +x testsrv
chkconfig --add testsrv
chkconfig testsrv --level 1 on
修改启动时间
reboot
#!/bin/bash
#chkconfig:12345 00 00
#description:this service is used for test
case $1 in
start)
echo 'the service is started'
sleep 100000
touch /root/testsrv
;;
由于启动序号设置太小,网络服务还没起来,无法连接xshell,而单用户模式也设置了开机启动,所以需要按照如下方法修复
开机按回车进入内核选则项
按a 在quite后添加 init=/bin/bash(默认为/sbin/init)
此时开机进入bash以后根目录是以只读方式挂载的,需要重新挂载
mount -o remount,rw /
chkconfig --level 12345 testsrv off
exit
reboot
注意grub.conf文件会丢失,要提前备份
#备份mbr
dd if=/dev/sda of=/root/mbr bs=1 count=466
进入单用户模式
chroot /mnt/sysimage
grub-install /dev/sda 从“/dev/sda”中找到GRUB程序并进行修复
设备名参考
(hd#,#)
hd#: 磁盘编号,用数字表示;从0 开始编号
#: 分区编号,用数字表示; 从0 开始编号
(hd0,0) 第一块硬盘,第一个分区
grub命令依赖于grub目录里面的文件
grub
grub> root (hd#,#)
grub> setup (hd#)
#备份分区表
dd if=/dev/sda of=/root/mbr count=446 bs=1 conv=notrunc
# 备份grub.conf
cp -av /boot/grub/grub.conf /root/
# 破坏mbr
dd if=/dev/zero of=/dev/sda bs=1 count=446 conv=notrunc
启动时会出现operating System not found的提示,说明没有mbr来引导操作系统
reboot
chroot /mnt/sysimage
df 查看boot和/是否挂载
grub
root (hd0,0) # (hd0,0)表示第一块硬盘的第一个分区,也就是sda的sda1
setup (hd0)
1.5阶段前512字节记录的是后面27个扇区具体要读取的内容,如果将后面的内容破坏掉,系统仍无法正常启动
#备份
dd if=/dev/sda of=/root/mbr2 bs=1 count=2048 skip=512
#破坏
dd if=/dev/zero of=/dev/sda bs=1 count=2048 seek=512 conv=notrun
c
reboot
此时开机界面不会出现倒计时
进入救援模式
用grub或grub-install修复
chroot /mnt/sysimage
grub-install /dev/sda
sync
exit
exit
reboot
#备份/boot/grub/grub.conf
#清空/boot/grub目录
rm -rf /boot/grub
reboot
# 进入救援模式
df 确保/boot已挂载
chroot /mnt/sysimage
df
grub-install /dev/sda
sync
exit
exit
reboot
此时由于没有/boot/grub/grub.conf文件,开机会进入grub命令行
输入ker(tab补全) /v(tab)补全 root=/dev/vg0/root selinux=0 回车
ini(tab补全) /initra(tab补全) 回车
boot
(也可以在救援模式下手写grub文件)
8.为grub加口令
#生成md5口令
grub-md5-crypt
#grub-crypt (sha512)
[root@lee: /root]# grub-crypt
Password:
Retype password:
$6$IwfTNtZWfvNHA2ec$RWiVdrt78Tbbw2fsvAA/icQWCfIgy3KGkoFJHRntceUBwK.Vnn9Mhmz1JfRt/yWdtEbbMaWeWFSTiYUuxTiPn.
添加至配置文件
default=0
timeout=5
#sha512的加密方式需要指定--encrypted
password --encrypted $6$IwfTNtZWfvNHA2ec$RWiVdrt78Tbbw2fsvAA/icQWCfIgy3KGkoFJHRntceUBwK.Vnn9Mhmz1JfRt/yWdtEbbMaWeWFSTiYUuxTiPn.
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_lee-lv_root rd_LVM_ LV=vg_lee/lv_root rd_NO_LUKS rd_LVM_LV=vg_lee/lv_swap rd_NO_MD crashkernel=128M LANG =zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
# 也可直接用明文
password $1$fYmOJ/$0n6c5b/WPxt0nDOJPsrJq0
1)/boot/vmlinuz
cp /mnt/cdrom/isolinux/vmlinuz /boot/vmlinuz-`uname -r`
2)/boot/initramfs.img
mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
rpm -ivh /mnt/cdrom/Packages/kernel.XXX.rpm
3)grub/*
grub-install /dev/sda
4)grub/grub.conf
default=0
timeout=3
title 23M
kernel /vmlinuz-XXXX root=/dev/sda2
initrd /initramfs-XXXX.img
``
10. 在普通分区,删除/boot/ 所有内容及/etc/fstab,恢复
1)救援模式,先/etc/fastab恢复
df
blkid
mount /dev/sda1 /mnt/sda1
mount /dev/sda2 /mnt/sda2
mount /dev/sda3 /mnt/sda3
vim /etc/fstab
2)reboot,重新进入救援模式
df 确保挂载成功
3)修复grub
grub-install /dev/sda
4)修复kernel initramfs.img
mount /dev/sr0 /mnt/
rpm -ivh /mnt/Packages/kernel-XXX.rpm --force
5)vim /boot/grub/grub.conf
11. 使用逻辑卷,删除/boot/ 所有内容及/etc/fstab,恢复
1)救援模式,先/etc/fastab恢复
lsblk(失效)
df
blkid
fdisk -l
sda1带*为boot分区
mkdir /mnt/{sda1,sda2}
mount /dev/sda1 /mnt/sda1
mount /dev/mapper/vg_lee-lv_root /mnt/sda2
lvdisplay (可以看到NOT available)
vgchange -ay 激活卷组
lvdisplay
vim /mnt/sda2/fstab(r!blkid)
2)reboot,重新进入救援模式
df 确保挂载成功
3)修复grub
grub-install /dev/sda
4)修复kernel initramfs.img
mount /dev/sr0 /mnt/
rpm -ivh /mnt/Packages/kernel-XXX.rpm --force
5)vim /boot/grub/grub.conf
default=0 timeout=5
title=CentOs6.8
kernel /vmlinuz-2.6.32-642.el6.x86_6 root=/dev/mapper/vg_lee-lv_root selinux=0
initrd /initramfs-2.6.32-642.el6.x86_64.img
免责声明:
一切资料仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。资料来自网络,版权争议与本人无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我联系处理。
更=多=课程请加=v=信=== a518958666
基于SpringCloud 微服务架构 广告系统设计与实现
系统学习docker
docker前后端分离实战
Docker+Kubernetes(k8s)微服务容器化实战
Go语言实战抽奖系统
Go语言开发分布式任务调度 轻松搞定高性能Crontab
20小时快速入门go语言
Java从零到企业级电商项目实战
SSM主流框架入门与综合项目实战
Socket网络编程进阶与实战
…
…
更=多=课程请加=v=信=== a518958666
╭══════════════════════════════════════════╮ ║
║ 说明:教程版权归原作者所有,本人只是负责搜集整理,本人 ║
║ 不承担任何技术及版权问题。本人分享的任何教程仅提 ║
║ 供学习参考,不得用于商业用途,请在下载后在24小时 ║
║ 内删除。 ║
║ ║
║ 1.请遵守中华人民共和国相关法律、条例 ║
║ 2.本人提供的各类视频教程仅供研究学习,本人不承担观看 ║
║ 本教程后造成的一切后果 ║
║ 3.本人不保证提供的教程十分安全或是完全可用,请下载后 ║
║ 自行检查 ║
║ 4.本人提供的教程均为网上搜集,如果该程序涉及 ║
║ 或侵害到您的版权请立即写信通知我们。 ║
║ 5.如不同意以上声明,请立即删除,不要使用,谢谢合作 ║
║ ║
╰═════════════════════════════════════════╯