linux:系统启动及内核管理
Linux组成:
1 kernel(内核):进程管理、内存管理、网路管理、驱动、文件系统、安全功能 2 rootfs:程序和glibc 3 库:函数集合 4 程序:二进制执行文件
内核:
linux内核特点:
1 模块化:.ko文件(内核对象)。如文件系统,硬件驱动,网络协议等。 2 支持内核模块动态的加载和卸载
内核组成部分:
1 /boot/vmlinuz #压缩内核,二进制文件
CentOS6启动流程:
-
POST:加电自检BIOS主要功能,负责对硬件检测
1 ROM:BIOS 2 RAM:保存BIOS设置的各种参数
-
MBR引导:
1 MBR:磁盘第一个扇区 2 前445字节 记录bootloader程序,bootloader启动后寻找grub.conf配置表,找到内核位置 3 中间64字节分区表 4 最后2字节 55AA 结束标记位
-
bootloader:引导加载操作系统
1 windows:ntloader,仅支持windows os,无法启用linux 2 Linux:GRUB,支持多系统,功能强大 3 #/boot/grub/grub.conf #记录了内核位置 、及initramfs驱动文件位置
grub.conf配置文件
-
1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda2 8 # initrd /initrd-[generic-]version.img 9 #boot=/dev/sda 10 default=0 #系统内核默认选项 11 timeout=5 #默认选择时间 12 splashimage=(hd0,0)/grub/splash.xpm.gz #背景图片 13 passwd --ecrypted $6$OIfGMYIEaz7KOTMZ$uv63xhWyJZogEpeeVne2wwTP.n7bFnRvMdZOgSTFvckZFrgkd0JjQX2BVYwkQ73GZAEjNQL8hOtv0XJ4XeGi2 #进入内核选项的密码 --ecrypted为sha512加密,grub-crypt可以生成 14 hiddenmenu 15 #第一个启动选项 16 title CentOS (2.6.32-754.27.1.el6.x86_64) 17 root (hd0,0) #boot位置,hd0表示第一块磁盘 ,0表示第一个分区 18 kernel /vmlinuz-2.6.32-754.27.1.el6.x86_64 ro root=UUID=5b1aa7f8-0764-408a-8fcf-283908647f3b 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 19 initrd /initramfs-2.6.32-754.27.1.el6.x86_64.img #内核驱动位置 20 #第二个启动选项 21 title CentOS 6 (2.6.32-754.el6.x86_64) 22 root (hd0,0) 23 kernel /vmlinuz-2.6.32-754.el6.x86_64 ro root=UUID=5b1aa7f8-0764-408a-8fcf-283908647f3b 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 24 initrd /initramfs-2.6.32-754.el6.x86_64.img
4 加载系统内核:/boot/vmlinuz(内核文件)
1 自身初始化: 2 检测硬件设备 3 加载驱动程序(借助ramdisk加载驱动)-->boot/initramfs这个文件 4 只读挂载根文件系统 5 运行初始化/sbin/init(systemd)——>再从磁盘读取驱动,重新挂载根(可读写)
init程序类型:
-
Sysv:/sbin/init,Centos5之前
配置文件:/etc/inittab
1 id:5:initialization #设置系统开机运行级别 2 si::sysinit:/etc/rc.d/rc.sysinit #加载系统开机脚本 3 l3:3:wait:/etc/rc.d/rc 5 #加载/etc/rc.d/rc脚本,用于启动或关闭服务 ,5表示运行runlevel 5
- Upstart:/sbin/init,Centos6
- 配置文件:/etc/inittab,/etc/init/*.conf
- Systemd:systemd,Centos7
- 配置文件:/usr/lib/systemd/system,/etc/systemd/system
/etc/rc.d/rc.sysinit:初始化系统脚本,由/sbin/init初始化程序调用
1 #此脚本只在系统开机时运行一次。 2 1、设置主机名 3 2、设置欢迎信息 4 3、激活udev(设备名)和selinux 5 4、挂载/etc/fstab文件中定义的文件系统 6 5、检测根文件系统,以读写方式重新挂载跟文件系统 7 6、设置系统时钟 8 7、激活swap设备 9 8、根据/etc/sysctl.conf文件设置内核参数 10 9、激活lvm及software raid设备 11 10、加载额外设备的驱动程序 12 11、清理操作
/etc/rc.d/rc:此脚本负责启动或关闭系统服务,将根据系统设置启动级别,加载不同的服务。
1 #脚本中引用的服务存放位置/etc/rc.d/ 2 ls /etc/rc.d/ 3 init.d/ rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ #存放着不同运行等级文件夹 4 ll /etc/rc.d/rc5.d #查看运行级别5文件夹下具体内容, 5 #看到的是各种服务的软连接 6 K01smartd -> ../init.d/smartd #服务脚本真正存放位置/etc/rc.d/init.d/<serve> 7 S05rdma -> ../init.d/rdma 8 S99locale -> ../rc.local #比较特殊,存放在/etc/rc.d/rc.local ,脚本内添加的命令,开机后其他服务全部启动完成,将会运行.centos 7 需要好手动给此脚本添加执行权限 9 rc启动脚本将开始以S开头的服务
服务脚本:存放路径 /etc/rc.d/init.d/<serve> ,自定义服务需要使用chkconfig命令,向/etc/rc.d/rc0-6/下添加软连接,添加后,可以支持service <serve> start 这种写法
1 以at服务为例格式要求 2 #!/bin/sh 3 # atd Starts/stop the "at" daemon 4 # chkconfig: 345 95 5 #这行必须有,235 表示level 345模式 自启动,95表示自启动S编号 5表示程序关闭K编号 5 # description: Runs commands scheduled by the "at" command at the time \ #这个描述也必须有 6 # specified when "at" was run, and runs batch commands when the load \ 7 # average is low enough.
调整开机启动服务:
-
ntsysv:一次只能调整一个模式
1 ntsysv --level=3 #调整level 3的启动服务 2 跳出界面,*表示自启动,按空格取消
chkconfig:可以同时调整多个level centos7不好用
1 #显示服务 2 chkconfig --list #显示多个level 服务自启动状态 list后面可指定服务名 3 NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off 4 abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off 5 abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off 6 #设置自启动服务 7 chkconfig --level 35 atd on #这是3,5运行级 atd服务自启动 8 chkconfig --level atd on # 不加运行级,默认设置2345级 9 # 添加自定义服务 10 chkconfig --add testsry #自定义服务名。 必须放在/etc/init.d/下
自定义服务脚本示例:vim /etc/rc.d/init.d/testsry.sh (centos6环境)
1 #!/bin/bash 2 # 3 # chkconfig: - 98 3 4 #description: test service 5 . /etc/init.d/functions #调用系统函数库 ,主要用action函数,显示服务信息 6 # 定义函数 7 start(){ 8 touch /var/lock/subsys/`basename $0` #测试用 9 action "starting `basename $0`" 10 } 11 stop(){ 12 rm -f /var/lock/subsys/`basename $0` 13 action "stoping `basename $0`" 14 } 15 status(){ 16 [ -f /var/lock/subsys/`basename $0` ] && echo `basename $0` is running || echo `basename $0 is stoped` 17 } 18 19 case $1 in 20 start) 21 start 22 ;; 23 stop) 24 stop 25 ;; 26 restart) 27 stop 28 start 29 ;; 30 status) 31 status 32 ;; 33 *) 34 echo "Usage: /etc/init.d/`basename $0` {start|stop|status|restart}" 35 esac 36 #脚本结束 37 38 #设置自启动 39 chkconfig --add testsrv #加入服务列表 40 chkconfig --level testsry on #开启服务 41 42 # 后续可以使用 service testsry [start | stop] 控制服务
启动排错:
1.error 15 : File not found #内核错误,未找到
1 修复 /boot/vmlinuz内核 2 #进入救援模式,救援开始 3 查看原系统挂载目录,默认/mnt/sysimage 4 mkdir /mnt/cdrom;mount /dev/sr0 /mnt/cdrom #挂载修复光盘 5 cp /mnt/cdrom/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r` #复制内核文件 6 保存重启
2.光标一直闪:无法加载文件系统驱动,无法挂载内核
1 修复/boot/initramfs 驱动文件 2 #进入救援模式,救援开始 3 chroot /mnt/sysimage/ #切换/到,真正磁盘上的/ 4 mkinitrd /boot/initramfs-`uname -r`.img `uanme -r` #利用修复工具重新生成驱动文件 5 保存重启
3.开机后自动关机或者一直重启:可能系统runlevel错误的被设置为0或者6(centos6)
3.1当程序显示下面这个界面时,快速按下任意键,进入引导菜单
3.2进入引导菜单后,按a修改内核参数

3.3进入内核参数修改界面,输入3进入 runlevel3级(命令行模式)

3.4成功进入系统后,修改/etc/inittab配置文件
1 vim /etc/inittab 2 id:3:initdefault: #找到对应的行,修改
4.系统开机在某个服务卡住不动:

1 按住 ctrl+alt+del 重启电脑 2 重启后进入单用户模式 3 chkconfig 服务名 off #临时关闭当前无法启动的服务
4.1 如果单用户也无法进入:进入内核修改模式

1 #进入内核模式修改模式 2 init=/bin/bash 3 bash-4.1# #此事进入bash,根为只读模式,需要重新挂载 4 mount -o remount,rw / 5 chkconfig --level 123456 服务名 off #关闭服务 6 exit #重新启动
5.重制root密码:
1 #centos6 2 进入单用户模式 3 passwd #直接修改密码 超级简单。 4 5 #centos7
6:启动磁盘mbr被破坏
1 #方法1进入救援模式 2 bash-4.3# grub #执行grub命令 3 grub> root (hd0,0) #指定boot在哪个硬盘和分区 4 grub> setup (hd0) #重新写入mbr 5 quite #退出grub 6 sync #同步磁盘 7 #重启完成 8 9 #方法2 grub-install --root-directory=DIR /dev/disk #--root-dirctory=/ 是默认选项。 10 #进入救援模式 11 grub-install /dev/sda
7:修复grub1.5-2.0阶段->默认会进入下图模式

1 grub> root (hd0,0) #boot位置 2 grub> setup (hd0) #修复过了1.5阶段 3 grub> kernel /vmlinuz-2.6.32-754.el16.x86_64 root/dev/sda2 #指明内核位置 4 grub >initrd /initramfs-2.6.32-754.e16.x86_64.img #指明驱动文件位置。 5 grub > boot 6 #系统重新启动 进入系统化 7 vim /boot/grub/grub.conf #重写修复此文件
工具:
lsmod:查看加载的驱动
rmmod:卸载模块
1 rmmod ext3 #卸载ext3驱动模块
转载于:https://www.cnblogs.com/franc/p/12587462.html

浙公网安备 33010602011771号