多方面修复linux系统

在这篇文章,您将看到以下方面的修复方法:

●内核文件和虚拟

●grub.conf

●grub目录

●boot分区

●fstab文件

●root密码破解

 

首先,要想很愉快的修复linux启动的各种问题,就必然要把linux的启动流程搞清楚。

1. 加载 BIOS 的硬件信息和进行自我测试,并依据设定取得第一个可开机的装置;

2. 读取并执行第一个开机装置内 MBR 的 boot Loader (grub等程序);

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 程序,最后就等待用户登入;

 

boot loader中grub有两个阶段(stage),其中,stage1是引导boot所在的分区,因为我们的kernel在这里面,又因这个分区可能是由不同文件系统格式化的,例如,xfs,ext等,单单MBR的446个bytes不可能存放这么多的东西,所以还要有stage1_5阶段来加载boot分区的驱动,当然是什么驱动那就由你安装操作系统时由什么文件系统格式化决定了,因此在这里我们可以认为为stage1_5的数据在mbr以后。

最终,通过stage1_5识别boot分区,然后加载vmlinuz开头的内核文件。当然,识别boot分区以后,并不是上来就读取内核,而是当识别好boot分区后,它会进入boot/grub/目录的,这个目录存放有stage2阶段的文件,并且有个grub.conf文件,这个文件里记录了linux启动的很多重要启动内容,比如刚才说的了内核文件在哪,根文件系统(rootfs)也就是“/”在哪,但我们知道,rootfs也会有自己的文件系统,它有可能与boot分区都不是同一个文件系统,那么/boot下还要存有rootfs的驱动,也就是以initramfs开头的文件,我们称为虚拟文件系统 (Initial RAM Disk 或 Initial RAM Filesystem) (centOS5x是initrd…)。这里注意,初始默认是ro(只读)挂载。

根挂载完了,就开始加载系统第一个进程——init。首先读取/etc/inittab 文件,它定义了默认的启动模式(defaultrunlevel),然后,在进入相应的启动模式之前,读取/etc/rc.d/rc.sysinit 初始化系统的各项配置,包括/etc/fstab (主机名,swap分区,raid,lvm等),随后再进入例如3模式:/etc/rc.d/rc3.d/K*,S*,然后执行/etc/rc.d/rc.local,最后是mingetty的tty1-6。

既然启动的各项流程都明了的话,接下来开始我们的主题大破坏!!!

首先,解读一下/boot/grub/grub.conf的这个可以调整内核参数的文件:

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS Linux 6 (2.6.32-642.el6.x86_64)

        root (hd0,0)

        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=aa1e2a6c-5e45-4da4-9429-b33d23861411 rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet selinux=0 max_loop=100

        initrd /initramfs-2.6.32-642.el6.x86_64.img

●default :grub菜单默认启动的内核,相对于下一个title(启动菜单描述)

●timeout :默认等待时长

●splashimage :grub菜单背景图片位置。

●kernel /vmlinuz- 这个是修复的必要字段,这个“/”意味着相它的根(存放位置)是boot分区,也 就是上面的root(hd0,0),而/boot这个分区又是相对主机的第一块硬盘的第一个分区,即 /dev/sda1。所以我们也可以这样写:kernel(hd0,0)/vmlinuz

●root=UUID:这个是操作系统的根分区,必不可少,也可以写设备名:/dev/sda2

●ro : 只读挂载根分区,可不加。为了安全考虑,默认是加上的。

●initrd /initramfs: 虚拟文件系统文件,必要!

●rhgb :centOS6启动时的图形界面,不写就变成字符模式。

●quiet:不显示内核启动时等其它一些加载的信息,不写就显示。

可以在quiet后加算定的内核参数,如selinux,max_loop等。

可以在/var/log/boot.log查看启动相关信息,CentOS字样显示之后的过程,没有内核信息。


/etc/rc.d/rc.sysinit 被破坏/删除


默认情况下,系统会按照init进程中的顺序执行,但是如果你把rc.sysinit这个文件删了的话,后续的进程与服务就启动不了,停住不动了。这时,我们可以不运行init,把它指定到别的shell里。

例如:init=/bin/bash

这样的话,我们至少可以执行一些基本的命令或工具来进行修复。


/boot/grub/中的一个或多个或所有文件被破坏/删除  


情况一:grub.conf内容有错误

若单单是grub.conf的内容出问题,例如,title下的kernel或initrd,没了等,我们可以:

重启–>倒计时按任意键–> 进入相应的内核菜单选项按e或c键编辑对应的kernel或initrd–>回车完成。

最简单的可以这样写(initrd同下):

kernel (hd0,0)/vmlinuz-(版本号) root=/dev/sda2

情况二:grub.conf文件被删除

●方法一(重启,grub命令):

重启后会出现以下画面:

图像 002.png 

输入以下命令,包括指定内核与虚拟文件位置。

图像 001.png 

然后会有一段较长的修复时间,修复完成后还要再输一次,方可登入。但因为grub.conf文件并未生成,如果不写一个下次重启还要指定。

●方法二:

光盘启动–>救援模式(recuse)–>start shell(前面选项略)–>cd /mnt/sysimage/boot/grub。vim一个grub.conf。

        情况三:stage系文件被删除

    ●方法一(全面)

MBR主引导446bytes被擦除(dd if=/dev/zero of=/dev/sda bs=10 count=1)。

光盘启动–>救援模式(recuse)–>start shell(前面选项略)–>cd /mnt/sysimage–>grub install /dev/sda

这个命令会在/boot下,创建grub目录,恢复里面的所有除grub.conf文件。

这里因为已经切到了根目录,且boot分区所在的父目录就是根目录。所以就无需再指定 –root-directory=/了。

    ●方法二(依赖grub目录下的stage备份文件)

grub命令–>root(hd0,0)–>setup (hd0)


root密码被破解


我们都知道grub菜单默认是任何人都可以对内核参数修改,从而进入单用户模式(添加init 1参数),最终破解root用户密码。这是很不安全的,所以要对其加密。方法是在grub.conf的timeout

后添加password xxx。如果加在initrd后,则启动都需要密码(对于那个内核)。


内核,虚拟文件系统被删除


vmlinuz-和iniramfs文件没了怎么办呢?当然这时靠grub是不可能的了,我们可以用光盘:

光盘启动–>救援模式(recuse)–>start shell(前面选项略)–>挂载光盘–>复制光盘里的isolinux下的vmlinuz到/boot下,改名称vmlinuz-`uname -r`–>mkinitrd initramfs-`uname -r`.img (有空格)`uname -r`

 

网络救援引导模式

用光盘模拟:

光盘启动–>救援模式(recuse)–>Setup Networking窗口选择“Yes”–>此时用Ctrl+Alt+f2可切换一下,看看是否有IP地址,如果没有回到原终端,即可手动指定,也可DHCP自动获取–>shell–>lftp


/boot所有内容被删除

终极大法,一下解决所有问题:

光盘启动–>救援模式(recuse)–>shell–>rpm -ivh /mnt/cdrom/Packages/kernel…rpm  –root=/mnt/sysimage –replacepkgs |forcegrub目录除外,都恢复了)–> grub-install /dev/sda–>vim grub.conf


/etc/fstab被删除


若这个文件没了则意味着,根分区和boot分区没挂载上,我们需要手动挂载。用df命令看一下分区信息,我们姑且可以先从分区大小大概猜出哪个是boot,哪个是根,然后,临时建一个目录,把觉得有可能的分区挂到这个目录下,进入查看一下内容,发现是目标再vim /etc/fstab 写进去。  

原创文章,作者:菩提本无树,如若转载,请注明出处:http://www.178linux.com/45432

(1)
上一篇 2016-09-13 11:17
下一篇 2016-09-13 11:17

相关推荐

  • Linux下的LVM管理命令

    一. 何为LVM?     Logical Volume Manager的缩写,它可以把多个分区、硬盘甚至RAID组合成一个存储设备来使用,并可以扩展或缩减空间。LVM有三层组成组成:底层的PV,中间的VG,上层的LV,如图所示         &n…

    Linux干货 2015-12-06
  • 通过虚拟机制作RAID5

    制作RAID5的过程,包括制作RAID5的制作,增加和删除RAID

    2017-12-10
  • 马哥教育网络班22期+第十周课程练习

    1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情)    CentOS系统启动流程为:POST –> BootSequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> r…

    Linux干货 2016-12-13
  • 防火墙之iptables使用

    一、防火墙简介           Firewall:防火墙,隔离工具;工作于主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测,对于能够被规则匹配到的报文作出相应处理的组件;        软件防火墙(软件逻辑):一般寄生在操作系统…

    2017-06-18
  • 权限管理练习题

    权限管理练习题:     1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?         不能cd到该目录下,不能ls -l访问目录里面文件元数据的信息    &nbsp…

    Linux干货 2016-08-04
  • N28-第四周:正则表达式练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。
    2、编辑/etc/group文件,添加组hadoop。
    3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。
    4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。
    5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。
    6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;
    7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
    8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;
    9、找出/etc/passwd文件中的一位数或两位数;
    10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
    11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
    12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;
    13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

    2017-12-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 14:06

    理论部分写的很详细,后面实际操作简单带过?注重理论也要注重实践哦。