系统启动
常用命令:
runlevel who -r **/etc/inittab:**定义启动级别 **/etc/rc.d/init.d/NetworkManager **定义网络管理程序的详细信息 **/etc/rc.d/rc.sysinit **系统初始化脚本 **/etc/rc.d//rc[0-6].d/**定义6个级别对应的服务程序开启或关闭 **/etc/rc.d/rc.local **开机最后一步要执行的脚本可以放到此文件中 自定义服务
chkconfig --list 查看定义服务程序详情列表 testsrv需要放入**/etc/rc.d/init.d/**目录下testsrv 内部定义
#!/bin/bash chkconfig: 345 66(s-启动) 44(k-关闭) description: test service echo ##########
ntsysv可以设置当前级别模式哪些进程启动或不启动,重启生效。*为开机启动项。
chkconfig --add testsrv chkconfig --del testsrv chkconfig NetworkManager on|off 不加--level 默认设置2345
>/boot/grub/grub.conf
>grub-md5-crypt或者grub-crypt --md5
>grub-crypt 默认采用sha512
>grub-crypt --sha-256
>主要项有
>default=0
>timeout=5
>hiddenmenu
>passwd --md5 $$$$$$$$$$$$$$$$$$$$$$$$$$加密后的密码
>passwd --encrypted ########################加密后密码
>title centos
>kernel (hd0,0)/vmlinuz-2.6.32-754.el6.x86_64 root=UUID-xxxxx
>initrd (hd0,0)/initramfs-xxxxxxxxxxx
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz 该文件为启动选项背景图片,可以自行修改:(ImageMagick包,convert -resize 640*480 -colors 14 centos.jpg centos.xpm)
hiddenmenu
title CentOS 6 (2.6.32-754.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=a6d8689c-a3ec-415b-a2d2-7fb209c352c9 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-754.el6.x86_64.img
TIPS:
核心驱动文件在**/boot/vmlinuz-3.10.0-957.el7.x86_64****内核中 按需加载/usr/lib/modules/3.10.0-957.el7.x86_64中驱动模块 辅助的伪根系统/boot/initramfs-3.10.0-957.el7.x86_64.img**(打包文件,内部放有内核挂载所需识别驱动模块) cpio -tv < initramfs-3.10.0-957.el7.x86_64.img 查看内部文件。
modinfo ext4:查看驱动模块所在位置 lsmod:查看所有加载到内存的驱动模块
模拟故障实验1,initramfs-3.10.0-957.el7.x86_64.img伪根文件丢失
重启后故障图: 方法1:进入光盘救援模式
chroot /mnt/sysimage切根 mkinitrd /boot/initramfs-`uname -r`.img `uname -r` --force(此项如果boot下没有initramfs文件可不加)------重新生成伪根img文件 或者 dracut /boot/initramfs-$(uname -r).img $(uname -r)------重新生成伪根img文件 exit-------退出当前根 reboot--------重启系统
模拟故障实验2,vmlinuz-3.10.0-957.el7.x86_64内核文件丢失
重启后故障图: 方法1:进入光盘救援模式
mount /dev/sr0 /mnt/sysimage/data **cp /mnt/sysimage/data/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz--$(uname -r)**从光盘里把内核文件拷贝到/原boot目录下并加版本信息 reboot--------重启系统
模拟故障实验3,/etc/inittab里,默认启动级别错误定义到0或者1
方法:在开机倒计时时,按任意键调出菜单,下面有提示,按a键进入内核模式,在后面补上启动级别3,即可进入系统。进入系统后再重新修改/etc/inittab内默认启动级别为正常级别即可。
模拟故障实验4,MBR里前446字节被清空,grub,stag1被破坏,导致的无法启动系统。(全部清空的话,没有备份分区表无法恢复,切记)
方法:进入光盘救援模式
chroot /mnt/sysimage切根 grub安装 安装grub: (1) **grub-install ** 此命令可用于修复/boot/grub/下的所有文件除了grub.conf和*.xmp.gz文件 但是如果使用grub-install修复后,再把除了grub.conf以外的所有文件拷贝走,重启后将无法进入系统,需要进入救援模式切根再执行grub-install /dev/sda命令 操作完后多此执行sync,防止数据在内存中未写入硬盘 安装grub stage1和stage1_5到/dev/DISK磁盘上,并复制GRUB相关文件到 DIR/boot目录下 grub-install --root-directory=DIR(boot的上级父目录名称) /dev/DISK (2) grub grub> root (hd#,#) 中间有空格 grub> setup (hd#)
模拟故障实验5,MBR里前446字节被清空,/boot目录下被清空。
方法:进入光盘救援模式
chroot /mnt/sysimage切根 grub-install /dev/sda mount /dev/sr0 /mnt cp /mnt/isolinux/vmlinuz /boot/vmlinuz-
uname -r
dracut /boot/initramfs-uname -r
.imguname -r
最后写grub.cfg文件
default=0
timeout=5
hiddenmenu
title Centos 6
root (hd0,0)
kernel /vmlinuz-2.6.32-754.el6.x86_64 root=UUID=a6d8689c-a3ec-415b-a2d2-7fb209c352c9
initrd /initramfs-2.6.32-754.el6.x86_64.img
模拟故障实验6,MBR里前446字节被清空,/boot目录下被清空。/etc/fstab文件被删除。进行恢复(前提是/和/home还有swap都是逻辑卷创建的文件系统)
方法:进入救援模式 由于分区表没有坏,所以先找分区,写fstab文件 因为所有文件系统都是逻辑卷创建的,默认逻辑卷没有被激活 需要激活用(vgchange -ay) 创建临时根目录,挂载逻辑卷/到临时根目录 然后写fstab文件 需要重启重读fstab配置文件。 之后参照实验5,或者安装光盘里的rpm -ivh /mnt/Package/kernel.... --nodeps --force 最后sync几遍重启
模拟故障实验7,grub.conf文件内,initrd和 kernel上下行颠倒
启动菜单出现后按e编辑菜单,因为两行上下颠倒,所以d删除上面的一行,在剩下行上面o新创一行,然后e取编辑一下,输入initrd /initramfs-xxxxxxx 回车,然后b启动,以上修改为临时性修改。进入程序后再修改grub.conf文件。
模拟故障实验8,开机启动卡在某服务,排错
方法:在开机倒计时时,按任意键调出菜单,下面有提示,按a键进入内核模式,在后面补上启动级别1,进入单用户维护模式。将启动不了的服务临时设置为开机不启动chkconfig testsrv off。然后reboot,开机后再想办法解决。
模拟服务自己写一个testsrv,实现service testsrv start|stop|status|restart
#!/bin/sh
#
#chkconfig: - 66 22
#description:testsvr
service=`basename $0`
. /etc/init.d/functions
start(){
if [ -f /var/lock/subsys/$service ];then
echo "$service has been started"
else
touch /var/lock/subsys/$service
action "Starting $service"
fi
}
stop(){
if [ -f /var/lock/subsys/$service ];then
rm -rf /var/lock/subsys/$service
action "stopping $service"
fi
}
status(){
if [ -f /var/lock/subsys/$service ];then
echo "$service is running"
else
echo "$service is stopped"
fi
}
case $1 in
start)
$1
;;
stop)
$1
;;
restart)
stop
start
;;
status)
$1
;;
*)
echo "Usage service `basename $0`start|stop|status|restart "
esac
Centos6启动流程 网址转载流程图 https://s4.51cto.com/wyfs02/M02/87/20/wKiom1fVBELjXsvaAAUkuL83t2Q304.jpg
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控制主机
启动流程
POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测
ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自举程序等 RAM:CMOS互补金属氧化物半导体,保存各项参数的设定 按次序查找引导设备,第一个有引导程序的设备为本次启动设备
bootloader: 引导加载器,引导程序
windows: ntloader,仅是启动OS Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核 LILO:LInux LOader GRUB: GRand Unified Bootloader GRUB 0.X: GRUB Legacy, GRUB2
MBR:第一个扇区
前446字节 bootloader 中间64字节 分区表 最后2字节 55AA
GRUB
primary boot loader : 1st stage,1.5 stage secondary boot loader :2nd stage,分区文件
kernel
自身初始化: 探测可识别到的所有硬件设备 加载硬件驱动程序(借助于ramdisk加载驱动) 以只读方式挂载根文件系统 运行用户空间的第一个应用程序:/sbin/init