rpm -q 查看安装包的版本号rpm -q kernel 查看内核版本号uname -r 查看内核版本号lsmod 列出系统中加载的模块(list modul 列出模块)cpio 文件打包文件cpio -tv < initrd-2.6.18-164.el5.imgcpio 文件解压缩 -v预览文件内容centos 5 驱动模块---initrdcentos 6 q驱动模块--initramfsgunzip initramfs-2…….img.gz 解压缩cpio -tv < initrd-……initramfs-2.6.32-696.el6.x86_64.img 此文件放的是和启动相关的驱动模块vmlinuz-2.6.32-696.el6.x86_64 此文件放的是linux 的核心功能核心文件存放位置:ls /bootls /lib/modules/2.6.32-696.el6.x86_64/
admin 管理员组文章数量: 1184232
核心文件:/boot/vmlinuz-VERSION-releaseramdisk:辅助的伪根系统 CentOS 5: /boot/initrd-VERSION-release.img CentOS 6,7: /boot/initramfs-VERSION-release.img 模块文件:/lib/modules/VERSION-releaserpm -q grubgrub-0.97-99.el6.x86_64centos 6 启动流程:
启动先:post 加电自检---->MBR 引导---->加载grub(ls /boot/grub)---->再加载vmlinuz内核文件(ls /boot/vmlinuz-2.6.32-696.el6.x86_64,按此文在发布的光盘里,只是拷贝了过来)md5sum /boot/vmlinuz-2.6.32-696.el6.x86_64md5sum vmlinuz 做哈希运算,比较俩文件是否一样 ---->再访问硬盘的根:以只读的方式去挂载根根的位置存放在配置文件中:/boot/grub/grub.conf根分区所在文件系统的存放位置:/boot/initrd-2.6.32-696.el6.x86_64.img(虚拟文件系统,以及一些必要的驱动!)(此文件是安装系统的时候临时生成的);通过此文件找到文件系统的驱动;
如果此文件被破坏了咋办?可以用:mkinitrd、重新生成此文件当initrd(initramfs)文件被删了后:mkinitrd /boot/initramfs-`uname -r`.img `uname -r` 可以生成该文件!但如果删了未修复重启咋办?此故障是经过grub之后才会出现问题;光盘引导,进救援模式!首先切换根:chroot /mnt/sysimage/# mkinitrd /boot/initramfs-`uname -r`.img `uname -r`syncsync 强制写到磁盘exit 退出 exit 退出reboot 重启------------------------------------------------------------------实验:删除/boot/所有文件,不包括目录rm -f /boot/*
---->找到启动程序:启动init进程(位置:/sbin/init)(centos7叫:systemd)---->读取软件的相关配置文件:/etc/inittab 此文件定义了必要的内容,比如开机进入什么模式等等; /etc/init/*.conf---->调用大堆的初始化脚本,并最终进入登陆界面;---->-------------------------------------------------------------------1.加载BIOS的硬件信息,获取第一个启动设备 主板内置的程序:Power-On-Self-Test,加电自检bootloader:引导加载器,引导程序windows:ntloader,仅是启动OSLinux: 兼容于windows;最好先装windows,再装Linux,然后linux的bootloader会覆盖windows的bootloadergrub:grand unifiled bootloaderrpm -q grubgrub-0.97-99.el6.x86_64
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息MBR:446:bootloader --->此处只存放了bootloader的第一阶段--->446字节引导完成之后,她开始找/boot分区,和内核相关的文件(前提进入文件系统);前面446字节会告诉我们去哪里找/boot分区的驱动--->相当于grub的第1.5阶段,表现为/boot分区下的文件;1.5阶段:加载/boot的驱动存放在MBR后面的扇区64:分区表,2:55AA
grub:primary boot loader:1st stage,1.5stage
secondary boot loader:2nd stage,分区文件
存放根分区的文件系统的驱动在:/boot/initrd-2.6.32-696.el6.x86_64.imgfile initrd-2.6.32-696.el6.x86_64.img (gzip 压缩文件)解压缩:gzip -d initrd-2.6.32-696.el6.x86_64.img.gz (重命名)fiel initrd-2.6.32-696.el6.x86_64.img (cpio 打包文件)cpio -tv initrd-2.6.32-696.el6.x86_64.img |grep ext4 (查找文件系统的驱动)---------------------------------------------------------------------详细查看:grub (MBR 前446字节)破坏实验一:fisrt、备份 dd if=/dev/sda of=/data/mbr bs=1 count=512sz /data/mbrsecend、破坏dd if=/dev/zero of=/dev/sda bs=1 count=446 清空hexdump -C -n 512 /dev/sda -v 查看是否清空reboot 重启-(硬盘不具有启动功能)直接跳到光盘启动幸运的是分区表没有被破坏,它还能找到挂载的根:/mnt/sysimage/ls /mnt/sysimage/data 查看备份的文件是否还在dd if=/mnt/sysimage/data/mbr of=/dev/sda bs=1 count=446 恢复mbr前446个字节sync sync (确认强行写入硬盘)hexdump -C - n 512 /dev/sda -v 查看是否恢复破坏实验二:如果没有备份dd if=/dev/zero of=/dev/sda bs=1 count=446grub-install /dev/sda 重新安装grub修复(可以修复grub的1阶段、1.5阶段、2阶段)如果机器重启了,咋办?# reboot# chroot /mnt/sysimage/# grub-install /dev/sda# sync# sync同步写磁盘# reboot 重启
修复方法三:# grub# root (hd0,0) (此处root就是boot的意思)指定/boot的分区,在第一个硬盘的第一个分区,表示为:(hd0,0)# setup (hd0) 安装第一阶段,但第一阶段mbr不属于任何分区,所以表示为:(hd0)# quit 成功修复并退出# hexdump -C -n 512 /dev/sda -v此命令的问题是它依赖于目录/boot/grub 下的特定文件 移除/boot/grub 下的所有文件,除了grub.conf(menu.lst)、splash.xpm.gz# reboot刚刚那些文件对启动没有影响,用grub命令去修复得依赖于那些文件所有如果此时破坏了mbr,还得用grub-install /dev/sda 来修复该文件
破坏实验三:破环1.5阶段# dd if=/dev/zero of=/dev/sda bs=1 count=10000 skip=512 seek=512# reboot破坏后的表现:重启后不会进入光盘,它认为硬盘是有启动能力的救援模式,光盘引导修复方法一:# grub# root (hd0,0) (前提是得知道/boot 分区,在哪块硬盘的第几分区)# setup (hd0)# quit# exit备注:!!!如果没有用grub修复过,那么前面那些文件删了也不会影响启动但是如果已经用grub修复过,那么前面的文件如果被删了,则会导致机器起不来
修复方法二:# grub-install /dev/sda# sync# sync# exit# exit--------------------------------------------------------------------详细分析此文件 /boot/grub/grub.confvim /boot/grub/grub.conf#default=0 表示以第一个title 作为默认启动选项#timeout=5 5秒钟的可选时间#splashimage=(hd0,0)/grub/splash.xpm.gz 此界面的图片---------------------------------------------------------------------#passwd magedu 添加一行,即使用户进入单用户模式,也会被要求输入口令的
如何生成加密口令:# grub-md5-crypt# Password: magedu# Retype password: magedu# $1$TVC9r/$HLO5Jf8oP8rqD0neqwLVu1
#passwd --md5 $1$TVC9r/$HLO5Jf8oP8rqD0neqwLVu1
加密算法二:# grub-crypt# Password: magedu# Retype password: magedu# $6$aDGyUYUQqgUjaF7L$WUby3diijIlS8D9gDUF4u.ou6Tjx8ZBjHEThpozNFIkcfZP1PhuzPey234K8yYpZr87JACNxlmP9MkcB2jxdk. (sha512 加密算法)# passwd --encrypted $6$aDGyUYUQqgUjaF7L$WUby3diijIlS8D9gDUF4u.ou6Tjx8ZBjHEThpozNFIkcfZP1PhuzPey234K8yYpZr87JACNxlmP9MkcB2jxdk.
---------------------------------------------------------------------#hiddenmenu 默认下边的菜单是隐藏的#title CentOS 6 (2.6.32-696.el6.x86_64)#root (hd0,0) 表示/boot 分区的位置位于第一块硬盘的第一个扇区#kernel /vmlinuz-2.6.32-696.el6.x86_64 root=UUID=6107ec3f-828f-4a3f-98b1-d10911c8dc13(等价于/dev/sda2)…… (rhgb quiet 取消这俩个,会详细的显示启动的过程)#initrd /initramfs-2.6.32-696.el6.x86_64.img上面俩个文件的位置顺序不能调换!---------------------------------------------------------------------修改一张开机启动选项处的图片:/boot/grub/splash.xpm.gzyum install ImageMagickrpm -ql ImageMagick/usr/bin/convert 图片类型转换工具convert -resize 640x480 -colors 14 win.jpg win.xpmhead win.xpm 查看此文件的头部信息gzip win.xpmmv win.xpm.gz /boot/grub/
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息 which initrpm -qf /sbin/init配置文件:centos5/centos6:/etc/inittabcat /etc/inittabid:5:initdefault 默认以5模式启动;定义开机模式
如果定义成6模式:则会不停的重启,如何修复之?进入启动菜单项,输a键然后输1/single/S/s:让系统临时切换到单用户模式下,然后去修改相关文件!或者直接输5,直接进入图形界面,不去让她读取配置文件,进入系统后再去修改相关文件!扩展,破解口令:开机进入1模式:单用户模式,根本不需要输入密码!启动后直接修改root的密码!系统启动之后跑的第一个初始化脚本:/etc/rc.d/rc.sysinitchkconfig --list
然后开始跑模式对应的服务脚本:ntsysv 可以用来定义或者查看:当前模式下,某个服务的启动状态有[*]代表开机启动没有的[ ]代表开机不启动
ls /etc/rc5.d/Linux开机启动不启动实现的机制就是看:是以K打头,不启动;还是以S打头,启动
不用命令ntsysv来改,直接手动更改服务是否启动:mv K05atd S95atd本质:ntsysv就是该的软连接名ntsysv --lever=3 用来更改3模式,以及更改其他模式的开机启动服务ntsysv淘汰了,更新替代的工具:chkconfigchkconfig --list atd 可以列出某个服务的所有模式下开机启动的状态chkconfig --list 35 atd off 可以同时改3和5模式,atd服务都改为开机不启动chkconfig --list atd on 默认改的是2、3、4、5模式ls /var/lock/subsys 查看处于启动状态的服务,当然只是服务的文件名service atd status 查看服务当前的运行状态service atd start 开启服务service atd stop 关闭服务service atd restart 重启服务
{which service;/sbin/servicecat /sbin/service 是个脚本}chkconfig --list 列出所有的独立服务
创建一个自定义的服务:first:创建一个服务脚本/etc/init.d/格式要求,关键几行:#!/bin/bash# chkcongfig: 345 95 5 (chkconfig:- 代表所有模式都是on的状态)默认什么模式下是on的状态,开启时:S95开头,关闭后:K5开头cd /etc/init.d/vim testsrv#!/bin/bash#chkconfig: 35 96 3#descriptionsource /etc/init.d/functionscase $1 instart) [ -f /var/lock/subsys/testsrv ] && action "testsrv is started" touch /var/lock/subsys/testsrv action i"testsrv is starting" ;;
stop) rm -f /var/lock/subsys/testsrv action "testsrv is stopped" ;;status) [ -f /var/lock/subsys/testsrv ] && echo "testsrv is starting" || echo "testsrv is stoopped" ;;*) echo "Usage: service testsrv start|stop|status" ;;esacchmod +x testsrv第二步:把脚本变成服务:chkconfig --add testsrv(确保脚本在目录里:/etc/init.d/ 且带执行权限的)查看:chkconfig --list testsrvls /etc/rc3.d/ls /etc/rc5.d/chkconfig --level 5 testsrv off 把5模式的testsrv服务设置为开机不启动chkconfig --level 5 testsrv on 把5模式的testsrv服务设置为开机启动chkconfig testsrv on 把所有模式的testsrv服务设置为开机启动service testsrv status 查看testsrv服务当前的状态service --status-all 显示所有服务当前的状态chkconfig --del testsrv 删除testsrv服务,然后手动删除脚本testsrvchkconfig --list 表示开机的时侯,进入到某种模式先,启动还是不启动,并不是当前的状态
模拟故障:假设这个服务出故障了,比如脚本写得有问题。比如有条命令是:sleep 100000 !重启后,服务就卡在这里,系统起不来,怎么办?重启进入1模式:chkconfig testsrv offchkconfig --list testsrv------------------------上面的都是独立服务,还有一种是非独立服务超级守护进程:xinetd(独立服务)telent:提供远程管理,类似于sshyum install telent-serverchkconfig --listvim /etc/xinetd.d/telnet 修改此文件也可以启用或者停止telnet服务:disable = yes /disable = no当然修改了配置文件也得重启xinetd服务:service xinetd restarttelent监听的端口是TCP的23端口,现在xinetd代替telnet服务来监听23端口service xinetd statusservice xinetd stopservice xinted startss -ntl 查看23端口的状态 ss -ntlpe 查看谁在监听23端口当有人访问的时候,真正提供服务的不是xinetd,而是:telnet,此时它会被唤醒yum install telnet 安装客户端telent 192.168.30.6-------------------开机读取文件启动文件:看以何种模式启动先跑一个初始化脚本:/etc/rc.d/rc.sysinit在运行启动脚本:/etc/rc.d/rc {0,1,2,3,4,5,6}
vim /etc/init/control-alt-delete.conf ……centos6 三个强制关机键,建议注释掉vim /etc/inittab ……centos5 开机执行的脚本
---------------------------------------------------------------------
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机--------------------------------------------------------------------
mkdir /mnt/bootmount /dev/sdb1 /mnt/boot
ls /mnt/boot/grubvim /boot/grub/grub.conf
-------------------------破坏性实验四:删除/boot/下的所有文件 rm -rf /boot/rebootchroot /mnt/sysimage/mount /dev/sr0 /mnt 挂载光盘cp /mnt/isolinux/vmlinuz /boot/ mkinitrd initramfs.img `uname -r`grub-install /dev/sdavim grub.confdefault=0timeout=5title wanglinuxkernel /vmlinuz root=/dev/sda2initrd /initramfs.img---------------------(Error 15)修复方法二:mkdir /mnt/cdrommount /dev/sr0rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --root=/mnt/sysimage/ --forcechroot /mnt/sysimage/grub-install /dev/sdavim /boot/grub/grub.confdefault=0timeout=5tilte linuxkernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2 quit rhgb selinux=0initrd /initramfs-2.6.32-696.el6.x86_64.img但是/boot不是一个独立的分区,那么:kernel /boot/vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2initrd /boot/initramfs-2.6.32-696.el6.x86_64.img此处的根/ 指的是/boot 这个目录所在的分区---------------------------------------破坏性实验三:删除/etc/fstabrm -rf /etc/fstabrm -rf /boot/*rebootfdisk -l 查看硬盘的分区情况mkdir /mnt/rootfs 创建文件夹mount /dev/sda1 /mnt/rootfs 把硬盘分区/dev/sda1挂载到/mnt/rootfs上ls 查看:什么也没有,发现它不是根分区(很可能是/boot)umount /mnt/rootfsmount /dev/sda2 /mnt/rootfs 把硬盘分区/dev/sda2挂载到/mnt/rootfs上ls 查看:有根下的文件夹,发现它就是根分区 blkid 查看分区的文件系统vim /mnt/rootfs/etc/fstab/dev/sda2 / ext4 default 0 0/dev/sda1 /boot ext4 default 0 0/dev/sda5 swap awap default 0 0/dev/sda3 /data/ ext4 /default 0 0reboot-------------------------------------------------------------------后续修复详解……(Error 15)修复:mkdir /mnt/cdrommount /dev/sr0rpm -ivh /mnt/cdrom/Packages/kernel-2.6.32-696.el6.x86_64.rpm --root=/mnt/sysimage/ --forcechroot /mnt/sysimage/grub-install /dev/sdavim /boot/grub/grub.confdefault=0timeout=5tilte linuxkernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2 quit rhgb selinux=0initrd /initramfs-2.6.32-696.el6.x86_64.img-------------------------------------------------------------------
本文标签: 内核
版权声明:本文标题:启动内核管理 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1758233078a3083299.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论