【学神】1-15 linux启动及常见故障的排除
2015-11-13 19:55
766 查看
本节所讲内容:
l Linux启动过程详解、影响启动的配置文件、常见的启动故障排除、救援模式的使用、Live CD的使用
2. 读取硬盘中 MBR 的 boot Loader (亦即是 grub,Lilo 等程序);
硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。
MBR=一个分区表的大小*分区表的个数+主引导程序大小+有效标=16*4+446+2=512 其中磁盘默认一个扇区大小为:512字节。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/ae1ff73ec21d3888e4c8cb863386e610.png)
主引导扇区说明第一部分是:主引导程序(boot loader)占446个字节。主引导程序,它负责从活动分区中装载,并运行系统引导程序。第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。第三部分是MBR有效标识位,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。3. 依据 boot loader 的设定,到引导分区加载 Kernel ,Kernel 会开始侦测硬件并加载驱动程序; 4. 在硬件驱动成功后,Kernel会主动执行 init 程序,而 init 会取得 run-level 信息;5. init 执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的作业环境 (如网络、时区等); 6. init 执行 run-level 下各个服务并启动 (script 方式); 7. init 执行开机后自动运行脚本 /etc/rc.d/rc.local 文件; 8. init 执行虚拟终端机控制程序 mingetty 来启动 login 程序,最后就等待用户登入。如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/8599fd715f9aaa8aaf45ebec53ddf225.png)
主要完成了包括读取mount分区、激活swap、初始化环境变量、加载modules、读取主机名和/etc/fstab等重要的工作.
是对应于不同的runlevel下起不同的服务. 这些目录下都是一些符号连接, 连接到/etc/rc.d /init.d下的一些文件。以S开头的表示要启动, 以K开头的不启动. 第一个字母后面的数值是一个优先级。
【例】
【例】
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/9e449b764ef1cf889d5d3fe2b68c493e.png)
重启测试:
编辑grub时,需要按下p键,然后输入密码:123456
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/cbc677b0e18ae96596ef93d917625cc6.png)
物理机:扣电池,让bios恢复出场设置
虚拟机:找到虚拟机安装位置,有个“XXX.nvram”后缀名的文件,删除即可
(1)重启系统进入单用户模式grub界面按任意键,干预启动过程。
e按键,编辑启动时内核介绍的选项,增加“1”。
enter和b按键,按照修改过的选项启动操作系统。
(2)把下图中的x去掉,然后reboot 就可以,再次使用root进入密码,就不需要输入密码。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/2cc25d8d60980d7ae47333fcd916ec63.png)
进入系统passwd就可以修改root,删去“X”
先输入root密码
2、进入救援模式
注意:要安装bash并且指定/在 /mnt/sysimage这个目录下
(1)如果是bootloader丢失
以下是为了创造一个实验grub丢失的环境
先备份出来
只能对/dev/sda 写入446B 写多了 分区表也会被破坏
进入救援模式,安装grub
进入救援模式,重新安装grub软件包
例:当系统坏了,进不去了。进入救援模式拷贝数据(类似Windows里的PE系统一样)
以光盘引导:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/1783cf26d171aa2464efdfabe30f2de5.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/49f0988d8a9b8e91e9bf9d80a0220612.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/8091bc5362b42a4a092f036c231969e9.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/2ef8c199f5816999fd8524bf59eaef75.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/b580ac6a4fcc8994a3a1cfea46ee81f7.png)
ramfs : 内存文件系统
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/8c8c5111fd21828a805df358e6f85b5a.png)
挂载优盘:#mount –t ntfs /dev/sda /opt (如果先插入u盘再启动救援模式,就会先读u盘为sda,具体可用df命令查看)
grub界面按任意键,干预启动过程。
e按键,编辑启动时内核介绍的选项,增加“1”。
enter和b按键,按照修改过的选项启动操作系统。
把下图中的x去掉,然后reboot 就可以,再次使用root进入密码,就不需要输入密码。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/273134e172183c4fc5bfebec9fce11fd.png)
进入系统passwd就可以修改root。
2.1 :磁盘空间已被大量的数据占满,空间耗尽
2.1 :虽然还有可用空间,但文件数i节点耗尽
解决方案:
1. 清理磁盘空间,删除无用、冗余的文件
2 .转移或删除占用大量i节点的琐碎文件
3. 进 入单用户模式、救援模式进行修复或删除文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/99359560333f4de13a9b300fa9cb4fd9.png)
内核丢失
进入救援模式
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/f5f3d881f91c505a215d73e1e1c6df1e.png)
提示识别不到linux分区,fstab这个文件损坏
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/01df32abd58c30675f59b60463cbbbcf.png)
通过fdisk -l 可以得出:
带*的分区是引导分区(/dev/sda1挂载到boot),/dev/sda2是/分区
手动挂载/分区
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/5cbe7df7bd321cdc7784d190267f28e8.png)
修复fstab文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/ebf961ee5a0634fd334f278e7efb5f3e.png)
现在提示变了,提示我可以直接chroot /mnt/sysimage
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/5e82b3ba70ba387c7c27228ab4e7be48.png)
boot目录下是空的
vmlinuz-... initramfs-... grub都没了
先强制安装内核
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/c2ff6fa63dd7df6b0734ad93b6dcdd2b.png)
安装grub
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/bbbd2b6814fe960690c46b6fe300189b.png)
手动创建grub.conf配置文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/44c8d1171d8e977b7935db30d7c04a36.png)
重启,登录系统,主机名丢失
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/02f37f185a94b8866d056b8df7954422.png)
/etc/rc.d/rc.sysinit 有个功能是设置主机名的
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/469c0c395851f7b5c73671e6d9668448.png)
rpm -qf /etc/rc.d/rc.sysinit查看文件对应的安装包rpm -ql查看安装包生成哪些文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/0a58f00de1629af78e91016cd9d8da27.png)
重启检查系统
学神-IT-教育51cto技术交流群:468845589 快来上我们公开课吧! 学神MK老师:1273815479 学神ZY老师:3054384936
学神教育学神VIP-1508-旭斌整理提供
本文出自 “学神IT教育-讲师MK” 博客,请务必保留此出处http://xuegodlinux.blog.51cto.com/10844319/1712601
l Linux启动过程详解、影响启动的配置文件、常见的启动故障排除、救援模式的使用、Live CD的使用
一、Linux启动过程详解
1. 加载 BIOS 的硬件信息,跟据设定取得第一个可开机引导设置,如:光驱,硬盘,网络,USB。2. 读取硬盘中 MBR 的 boot Loader (亦即是 grub,Lilo 等程序);
硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。
MBR=一个分区表的大小*分区表的个数+主引导程序大小+有效标=16*4+446+2=512 其中磁盘默认一个扇区大小为:512字节。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/ae1ff73ec21d3888e4c8cb863386e610.png)
主引导扇区说明第一部分是:主引导程序(boot loader)占446个字节。主引导程序,它负责从活动分区中装载,并运行系统引导程序。第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4。第三部分是MBR有效标识位,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。3. 依据 boot loader 的设定,到引导分区加载 Kernel ,Kernel 会开始侦测硬件并加载驱动程序; 4. 在硬件驱动成功后,Kernel会主动执行 init 程序,而 init 会取得 run-level 信息;5. init 执行 /etc/rc.d/rc.sysinit 文件来准备软件执行的作业环境 (如网络、时区等); 6. init 执行 run-level 下各个服务并启动 (script 方式); 7. init 执行开机后自动运行脚本 /etc/rc.d/rc.local 文件; 8. init 执行虚拟终端机控制程序 mingetty 来启动 login 程序,最后就等待用户登入。如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/8599fd715f9aaa8aaf45ebec53ddf225.png)
二、Linux启动相关的配置文件
1命令行模式启动图形界面
#startx #需启动关闭init 5级别的设置的服务 #init 5 #不需启动关闭init 5级别的设置的服务2grub相关配置文件
[root@xuegod64 Desktop]# vim /boot/grub/grub.conf3启动级别配置文件
[root@xuegod64 Desktop]# vim /etc/inittab #打开启动配置文件 # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
4系统初始化相关配置文件
/etc/rc.d/rc.sysinit主要完成了包括读取mount分区、激活swap、初始化环境变量、加载modules、读取主机名和/etc/fstab等重要的工作.
5开机启动配置文件
/etc/rc.d/rcn.d/ rcn.d (n为1到6)是对应于不同的runlevel下起不同的服务. 这些目录下都是一些符号连接, 连接到/etc/rc.d /init.d下的一些文件。以S开头的表示要启动, 以K开头的不启动. 第一个字母后面的数值是一个优先级。
【例】
[root@xuegod63 rc3.d]# vim /etc/init.d/network #! /bin/bash # # network Bring up/down networking # #chkconfig: 23451090 看有chkconfig的那一行, 2345表示在runlevel 2 3 4 5下被启动, 10是为此服务的启动顺序, 90为关机时闭此服务的顺序。 [root@xuegod64 rc3.d]# ls *network* K01matahari-network S10network [root@xuegod64 rc3.d]# [root@xuegod64 rc3.d]# chkconfig network off [root@xuegod64 rc3.d]# chkconfig --list network #查看不同级别下的network的开机启动情况 network 0:off1:off2:off3:off4:off5:off6:off [root@xuegod64 rc3.d]# ls *network* K01matahari-network K90network #说明:如果在此级别下开机启动,就不再显示其关机顺序了6开机自动执行某个命令配置文件
[root@xuegod64 rc3.d]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 Dec 18 2012 /etc/rc.local -> rc.d/rc.local [root@xuegod64 rc3.d]# vim /etc/rc.d/rc.local #打开rc.local配置文件 touch /var/lock/subsys/local # touch 为给某个文件加锁 [root@xuegod64 rc3.d]# ll /var/lock/subsys -rw-r--r--. 1 root root 0 Feb 7 08:47 vsftpd #重启ftp服务会重新生成这个文件。
【例】
#vim /etc/rc.d/rc.local #添加touch /var/lock/subsys/vsftpd #chkconfig vsftpd off #把vsftpd服务设置为开机不启动 #reboot # service vsftpd status vsftpd dead but subsys locked #说明现在vsftp是一个锁定状态 #service vsftpd restart #重启动ftp服务即可更新subsys下的vsftp文件 # service vsftpd status vsftpd (pid 2100) is running...补充:删除subsys下的文件后查看状态(service vsftpd status),并不会影响查看运行的状态。
7运行mingetty,打开tty1-6
[root@xuegod64 rc3.d]# ps -axu | grep ming Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 2346 0.0 0.0 4116 548 tty2 Ss+ 20:55 0:00 /sbin/mingetty /dev/tty2 root 2348 0.0 0.0 4116 548 tty3 Ss+ 20:55 0:00 /sbin/mingetty /dev/tty3 root 2350 0.0 0.0 4116 544 tty4 Ss+ 20:55 0:00 /sbin/mingetty /dev/tty4 root 2352 0.0 0.0 4116 544 tty5 Ss+ 20:55 0:00 /sbin/mingetty /dev/tty5 root 2354 0.0 0.0 4116 544 tty6 Ss+ 20:55 0:00 /sbin/mingetty /dev/tty6
三、grub bios加密及破解、系统修复
1 设置grub密码
[root@xuegod63 ~]# grub-md5-crypt #生成md5类型的密钥 Password: 123456 Retype password: 123456 $1$oaqo5$3d/cmTosm68jTw6o1wCu31 [root@localhost init]# vim /boot/grub/grub.conf #打开配置文件添加md5串码 #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu password --md5 $1$oaqo5$3d/cmTosm68jTw6o1wCu31 title Red Hat Enterprise Linux (2.6.32-220.el6.x86_64) root (hd0,0)如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/9e449b764ef1cf889d5d3fe2b68c493e.png)
重启测试:
编辑grub时,需要按下p键,然后输入密码:123456
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/cbc677b0e18ae96596ef93d917625cc6.png)
2 grub被加密怎么破解
进入救援模式 bash-4.1#chroot /mnt/sysimage sh-4.1#vim /boot/grub/grub.conf
3 BIOS加密如何破解
(1)如何加密security---> set supervisor password(2)破解密码
物理机:扣电池,让bios恢复出场设置
虚拟机:找到虚拟机安装位置,有个“XXX.nvram”后缀名的文件,删除即可
4 系统故障,忘记root用户的密码
解决方法:(1)重启系统进入单用户模式grub界面按任意键,干预启动过程。
e按键,编辑启动时内核介绍的选项,增加“1”。
enter和b按键,按照修改过的选项启动操作系统。
(2)把下图中的x去掉,然后reboot 就可以,再次使用root进入密码,就不需要输入密码。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/2cc25d8d60980d7ae47333fcd916ec63.png)
进入系统passwd就可以修改root,删去“X”
5系统无法正常启动
1错误的引导级别注意:配置文件/etc/inittab 正常使用3或5级别先进入单用户模式,然后修改启动级别比如系统无限重启,一般都是配置文件里面的启动级别被修改成了62 fstab文件被篡改先输入root密码
(Repair filesystem)#mount -o remount,rw / (Repair filesystem)#ll /dev/disk/by-uuid (Repair filesystem)#vim /etc/fstab3 bash丢失1、重启不了,只能强制关机
2、进入救援模式
注意:要安装bash并且指定/在 /mnt/sysimage这个目录下
bash-4.1#rpm -ivh /mnt/sysimage/var/ftp/pub/Packages/bash... --force --nodeps --root /mnt/sysimage4 grub相关文件丢失
(1)如果是bootloader丢失
以下是为了创造一个实验grub丢失的环境
先备份出来
[root@localhost Desktop]# dd if=/dev/sda of=/root/mbr.bp bs=512 count=1对其进行破坏
[root@ localhost ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
只能对/dev/sda 写入446B 写多了 分区表也会被破坏
进入救援模式,安装grub
bash-4.1#chroot /mnt/sysimage sh-4.1#grub-install /dev/sda(2)如果stage2丢失
进入救援模式,重新安装grub软件包
bash-4.1#rpm -ivh /mnt/sysimage/var/ftp/pub/Packages/grub... --force --root /mnt/sysimage bash-4.1#chroot /mnt/sysimage sh-4.1#grub-install /dev/sda #查看是否有stage2 Stage2借助于grub.conf(3)grub.conf丢失
grub>root (hd0,0) grub>kernel /vmlinuz... ro root=/dev/sda2 grub>initrd /initramfs.... grub>boot 进入系统后手动写grub.conf配置文件 Default=0 Timeout=5 Title mylinux Root (hd0,0) Kernel /vmlinuz ro root=/dev/sda2 #这里写根挂载点 Initrd /initramfs四、进入救援模式步骤:
例:当系统坏了,进不去了。进入救援模式拷贝数据(类似Windows里的PE系统一样)
以光盘引导:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/1783cf26d171aa2464efdfabe30f2de5.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/49f0988d8a9b8e91e9bf9d80a0220612.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/8091bc5362b42a4a092f036c231969e9.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/2ef8c199f5816999fd8524bf59eaef75.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/b580ac6a4fcc8994a3a1cfea46ee81f7.png)
ramfs : 内存文件系统
chroot /mnt/sysimage # 切换文件系统根
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/8c8c5111fd21828a805df358e6f85b5a.png)
挂载优盘:#mount –t ntfs /dev/sda /opt (如果先插入u盘再启动救援模式,就会先读u盘为sda,具体可用df命令查看)
#cp /etc/shadow /opt #ls /opt五、系统故障处理
1 忘记root用户的密码
解决方法:重启系统进入单用户模式,然后重设密码grub界面按任意键,干预启动过程。
e按键,编辑启动时内核介绍的选项,增加“1”。
enter和b按键,按照修改过的选项启动操作系统。
把下图中的x去掉,然后reboot 就可以,再次使用root进入密码,就不需要输入密码。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/273134e172183c4fc5bfebec9fce11fd.png)
进入系统passwd就可以修改root。
2 live cd的使用
2.1无法写入新的文件,提示“… : 设备上没有空间”
2.2部分程序无法运行,甚至系统无法启动故障原因:2.1 :磁盘空间已被大量的数据占满,空间耗尽
2.1 :虽然还有可用空间,但文件数i节点耗尽
解决方案:
1. 清理磁盘空间,删除无用、冗余的文件
2 .转移或删除占用大量i节点的琐碎文件
3. 进 入单用户模式、救援模式进行修复或删除文件
3综合排错练习
删除/boot/* /etc/fstab /etc/rc.d/* 1.rm -rf /boot/* 2.rm -rf /etc/fstab 3.rm -rf /etc/rc.d/*
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/99359560333f4de13a9b300fa9cb4fd9.png)
内核丢失
进入救援模式
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/f5f3d881f91c505a215d73e1e1c6df1e.png)
提示识别不到linux分区,fstab这个文件损坏
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/01df32abd58c30675f59b60463cbbbcf.png)
通过fdisk -l 可以得出:
带*的分区是引导分区(/dev/sda1挂载到boot),/dev/sda2是/分区
手动挂载/分区
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/5cbe7df7bd321cdc7784d190267f28e8.png)
修复fstab文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/ebf961ee5a0634fd334f278e7efb5f3e.png)
现在提示变了,提示我可以直接chroot /mnt/sysimage
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/5e82b3ba70ba387c7c27228ab4e7be48.png)
boot目录下是空的
vmlinuz-... initramfs-... grub都没了
先强制安装内核
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/c2ff6fa63dd7df6b0734ad93b6dcdd2b.png)
安装grub
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/bbbd2b6814fe960690c46b6fe300189b.png)
手动创建grub.conf配置文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/44c8d1171d8e977b7935db30d7c04a36.png)
重启,登录系统,主机名丢失
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/02f37f185a94b8866d056b8df7954422.png)
/etc/rc.d/rc.sysinit 有个功能是设置主机名的
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/469c0c395851f7b5c73671e6d9668448.png)
rpm -qf /etc/rc.d/rc.sysinit查看文件对应的安装包rpm -ql查看安装包生成哪些文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201912/27/0a58f00de1629af78e91016cd9d8da27.png)
重启检查系统
学神-IT-教育51cto技术交流群:468845589 快来上我们公开课吧! 学神MK老师:1273815479 学神ZY老师:3054384936
学神教育学神VIP-1508-旭斌整理提供
本文出自 “学神IT教育-讲师MK” 博客,请务必保留此出处http://xuegodlinux.blog.51cto.com/10844319/1712601
相关文章推荐
- Linux编程——文件操作
- AT&T汇编(linux内核学习必须掌握)
- Linux 程序获取文件系统挂载信息
- CentOS更改yum源
- CentOS 6 中安装Node.js 4.0 版本或以上
- Linux编程——进程与线程
- 无需要编程基础创建自己的 Linux 发行版,Linux Tycoon
- Linux下目录 /opt 和目录 /usr/local 的区别
- Linux编程——静态库和动态库
- Linux编程——信号
- SSH 远程登陆很慢的解决办法
- 测试Centos硬盘读写速度
- linux串口接收不到0x0d|0x11|0x13解决
- centos下搭建ruby on rails环境
- centos中部署java项目
- 制作自己的网站第二步***在Linux上装上需要的软件以及部署项目配置**
- linux下安装fms服务器
- 修改linux用户密码(passwd)
- Linux中使用ptrace获取pthread线程的寄存器信息
- Linux命令之stty - 显示和修改终端行设置