您的位置:首页 > 运维架构 > Linux

linux系统启动流程

2018-03-27 13:50 176 查看
PC:OS(Linux)
POST-->BIOS(BootSequence)-->MBR(bootloader,446)-->Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)
内核设计风格:
RedHat,SUSE
核心::动态加载内核模块
内核:/lib/modules/内核版本号命名的目录/
vmlinuz-2.6.32
/lib/modules/2.6.32/













RedHats: ramdisk-->initrd
RedHats: ramfs-->initramfs
单内核:Linux(LWP)
  核心:ko(kernel object)
  外围模块
微内核:Windows,Solaris(线程)
chroot: chroot /PATH/TO/TEMPROOT[COMMAND.....]
  chroot /test/virrrot /bin/bash
ldd /PATH/TO/BINARY_FILE:显示二进制文件所依赖的共享库
文件系统,进程管理,内存管理,网络管理,安全功能,驱动程序
/ rootfs
/usr,/boot,/home
启动的服务不同:
    运行级别:0-6
        0:halt
        1: single user mode, 直接以管理员身份切入, s,S,single
        2:multi user mode, no NFS
        3: multi user mode, text mode
        4:reserved
        5: multi user mode, graphic mode
        6: reboot

vim /etc/inittab



详解启动过程
         bootloader(MBR)
                   LILO:LInux LOader
                   GRUB:GRand Unified Bootloader
                            Stage1:MBR
                            Stage1_5:用来识别不同的文件系统
                            Stage2:/boot/grub/



rpm -q grub
grub.conf                  
default=0 # 设定默认启动的title的编号,从0开始
timeout=5 # 等待用户选择的超时时长,单位是秒
splashimage=(hd0,0)/grub/splash.xpm.gz  # grub的背景图片
hiddenmenu # 隐藏菜单
password redhat
password --md5$1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG.
title Red Hat Enterprise Linux Server(2.6.18-308.el5)  # 内核标题,或操作系统名称,字符串,可自由修改
         root(hd0,0)  # 内核文件所在的设备;对grub而言,所有类型硬盘一律hd,格式为(hd#,N);hd#, #表示第几个磁盘;最后的N表示对应磁盘的分区;
         kernel/vmlinuz-2.6.18-308.el5 ro root=/dev/vol0/root rhgb quiet   # 内核文件路径,及传递给内核的参数
         initrd/initrd-2.6.18-308.el5.img # ramdisk文件路径
         password--md5 $1$HKXJ51$B9Z8A.X//XA.AtzU1.KuG.
title Install Red Hat Enterprise Linux 5
         root(hd0,0)
         kernel/vmlinuz-5 ks=http://172.16.0.1/workstation.cfg ksdevice=eth0 noipv6
         initrd/initrd-5
         password--md5 $1$FSUEU/$uhUUc8USBK5QAXc.BfW4m.




vim /etc/grub.conf



生成密码md5
grub-md5-crypt
查看运行级别
runlevel
who -r
查看内核release号:
  uname -r
破坏grub
dd if=/dev/zero of=/dev/sda count=1 bs=400
sync
 
安装grub stage1:
# grub
grub> root (hd0,0)  指定内核所在分区
grub> set (hd0)




安装grub第二种方式:
# grub-install--root-directory=/path/to/boot's_parent_dir /PATH/TO/DEVICE
grub> find
grub> root (hd#,N)
grub> kernel /PATH/TO/KERNEL_FILE
grub> initrd /PATH/TO/INITRD_FILE
grub> boot








mke2fs -j /dev/hda1
mkdir /mnt/boot
mkdir /dev/hda1 /mnt/boot
grub-install --root-directory=/mnt /dev/hda
sync
vim /mnt/boot/grub/grub.conf



sync
重新安装另一台虚拟机
将此磁盘挂载上
配置文件损坏,如何启动系统?
mv /boot/grub/grub.conf /root
sync
shutdown -r now








Kernel初始化的过程:
1、设备探测
2、驱动初始化(可能会从initrd(initramfs)文件中装载驱动模块)
3、以只读挂载根文件系统;
4、装载第一个进程init(PID:1)
/sbin/init:(/etc/inittab)
         upstart:ubuntu, d-bus, event-driven
         systemd:
 
cat /etc/inittab
id:runlevels:action:process
id: 标识符
runlevels: 在哪个级别运行此行;
action: 在什么情况下执行此行;
process: 要运行程序;
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit 

ACTION:
initdefault: 设定默认运行级别
sysinit: 系统初始化
wait: 等待级别切换至此级别时执行
respawn: 一旦程序终止,会重新启动








/etc/rc.d/rc.sysinit完成的任务:
1、激活udev和selinux;
2、根据/etc/sysctl.conf文件,来设定内核参数;
3、设定时钟时钟;
4、装载键盘映射;
5、启用交换分区;
6、设置主机名;
7、根文件系统检测,并以读写方式重新挂载;
8、激活RAID和LVM设备;
9、启用磁盘配额;
10、根据/etc/fstab,检查并挂载其它文件系统;
11、清理过期的锁和PID文件;
for I in /etc/rc3.d/K*; do
  $Istop
done
 
for I in /etc/rc3.d/S*; do
  $Istart
done
##: 关闭或启动的优先次序,数据越小越优先被选定
先关闭以K开头的服务,后启动以S开头的服务;vim test.sh
#!/bin/bash
for I in /etc/rc3.d/K*; do
echo $I
done
bash test.sh




bash脚本编程,SysV服务脚本
MBR(bootloader)-->Kernel --> initrd(initramfs) --> (ROOTFS) --> /sbin/init(/etc/inittab)
         /etc/inittab,/etc/init/*.conf
         upstart     
init /etc/inittab
id:runlevels:action:process
id:5:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
OS初始化
l0:0:wait:/etc/rc.d/rc 0
         rc0.d/
                   K*
                            stop
                  S*
                            start
                           
/etc/rc.d/init.d, /etc/init.d
服务类脚本:
         start
         SysV:/etc/rc.d/init.d
                   start|stop|restart|status
                   reload|configtest
chkconfig                               
# chkconfig: runlevels SS KK                         
     当chkconfig命令来为此脚本在rc#.d目录创建链接时,runlevels表示默认创建为S*开头的链接,-表示没有级别默认为S*开头的链接;除此之外的级别默认创建为K*开头的链接;
         S后面的启动优先级为SS所表示的数字;K后面关闭优先次序为KK所表示的数字;
# description: 用于说明此脚本的简单功能;\, 续行
vim mystart.sh
样例脚本:#!/bin/bash
#
# chkconfig: 2345 77 22
# description: Test Service
#
LOCKFILE=/var/lock/subsys/myservice
status() {
if[ -e $LOCKFILE ]; then
echo "Running..."
else
echo "Stopped."
fi
}
usage() {
echo "`basename $0` {start|stop|restart|status}"
}
case $1 in
start)
echo "Starting..."
touch $LOCKFILE ;;
stop)
echo "Stopping..."
rm-f $LOCKFILE &> /dev/null
;;
restart)
echo "Restarting..." ;;
status
status ;;
*)
usage ;;
esaccp myservice.sh /etc/rc.d/init.d/myservice
chkconfig --list: 查看所有独立守护服务的启动设定;独立守护进程!
         chkconfig--list SERVICE_NAME
   chkconfig --list network  
chkconfig --add SERVICE_NAME
chkconfig --addmyservice
find ./ -name “*myservice*”
chkconfig --del SERVICE_NAME
chkconfig [--level RUNLEVELS] SERVICE_NAME{on|off}
         如果省略级别指定,默认为2345级别;
   chkconfig --level 24 myservice off
/etc/rc.d/rc.local:系统最后启动的一个服务,准确说,应该执行的一个脚本;
/etc/inittab的任务:
1、设定默认运行级别;
2、运行系统初始化脚本;
3、运行指定运行级别对应的目录下的脚本;
4、设定Ctrl+Alt+Del组合键的操作;
5、定义UPS电源在电源故障/恢复时执行的操作;
6、启动虚拟终端(2345级别);
7、启动图形终端(5级别);
mingetty tty1
守护进程的类型:
         独立守护进程
         xinetd:超级守护进程,代理人
                   瞬时守护进程:不需要关联至运行级别
yum install xinetd -y
chkconfig --list xinetd
service xinetd start
chkconfig --list
chkconfig rsync on
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: