系统无法正常启动的解决之道

先来看下配置文件的格式:

[root@centos6 ~]# uname -r
2.6.32-642.el6.x86_64
[root@centos6 ~]# cat /boot/grub/grub.conf 
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0  
timeout=5  
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=a60b5a4a-0be1-44b6-bce3-363d117f52b7 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
initrd /initramfs-2.6.32-642.el6.x86_64.img

grub最重要的是识别磁盘信息:(hd0,0)

1,硬盘代号以小括号()括起来

2,硬盘以hd表示,后面会跟一组数字,数字之间以逗号隔开

3,是以搜到的顺序来作为磁盘的编号,而非根据磁盘的排线编号(多硬盘情况,搜寻的次序是根据bios中设置的启动顺序,而非插槽编号)

4,第一个搜寻到的磁盘编号为0,第二个为1,以此类推

5,每快磁盘上的第一个分区编号为0,第二个分区为1,以此类推

因此,(hd0,0)表示第一块磁盘上的第一分区

default=0    默认的启动条目,假如同时装有多个操作系统,0表示定义的第一个title系统,1表示           定义的第二个title系统,以此类推

timeout=5    表示可供选择的等待时间,如果超过5秒钟,则使用默认的启动条目default定义的

splashimage=(hd0,0)/grub/splash.xpm.gz    定义启动时的背景图片信息

hiddenmenu    启动时是否要宣示菜单,默认情况下是不显示菜单信息,如果想要显示菜单,可将该配置信息注释即可(行首加#);所谓显示菜单就是下面的信息:

wKiom1fXZzriT_CGAAAUf-xygSc369.png

title   定义各个操作系统的名称

root  表示内核文件存放的位置,这里所指的是分区位置,而非 / 目录

kernel  内核的名称以及一些启动时的核心参数。由于启动过程中需要挂载根目录,因此就需要指定根       目录所在的分区。rhgb表示彩色显示,quiet表示静默模式加载内核

initrd  虚拟文件系统

grub.conf文件的配置方法:

default:  设定默认启动的内核或操作系统

timeout:  超时时长;单位是秒

splashimage:grub  菜单的背景图片(可选)

      图片:xpm格式,压缩为zip,14bits颜色,640X480

      需安装gimp图片编辑工具

hiddenmenu: 隐藏选择菜单(可选)

title  定义一个操作系统或内核

root: 指明引导当前操作系统或内核文件所在分区

kernel: 内核文件路径、根文件系统所在设备,以及传递给内核的参数

initrd: 指明用于辅助内核完成系统启动的ramdisk文件路径再次在内存缓存

实验:

一,设置密码保护编辑功能(在title前面

在grub.conf配置文件里的title之上添加password –md5 “加密后的密码”即可

wKiom1fXqKiBy7IQAAAXcZ3KrjY929.png

生成密码的方式:在vim末行模式下,输入该命令,当光标自动跳到行首时,输入密码后按回车,再输入一次密码后按回车,即生成密码

wKioL1fXrT7CbjDLAAABzMX7Ygw208.png

以后每次开机想要进入菜单进行编辑时,需要输入密码:

wKiom1fXq9PhNOp-AAAU6zcLMvk155.png

二,设置密码保护内核(在title之内

在grub.conf配置文件里的title之内添加password –md5 “加密后的密码”即可

wKioL1fXrQegARvMAAAYPSJABOI325.png

生成密码的方式:在vim末行模式下,输入该命令,当光标自动跳到行首时,输入密码后按回车,再输入一次密码后按回车,即生成密码

wKioL1fXrVryRHhdAAABzMX7Ygw950.png

以后每次开机进入系统时,需要输入密码:

wKiom1fXrxrS_KOyAAAHHlGAff8423.png

三,损坏grub.conf文件后的恢复

系统无法正常启动的解决之道

四,在分区情况下,删除并恢复 /boot 和 /etc/fstab(友情提示:先做快照备份)

1,先查看下本机的分区情况和相关配置文件/etc/fstab, /boot/grub/grub.conf

系统无法正常启动的解决之道

2,删除 /boot 和 /etc/fstab,并重启系统

wKioL1ffS_GAVk12AAAKMLhHkqA723.png

3,由于删除了/boot 和 /etc/fstab,系统找不到启动分区和kernel,就要进入救援模式,提示系统没

有分区,故要先创建分区

wKiom1ffTPHyO_RoAAAKLT8PSqQ081.png

4,创建/boot 和 /etc/fstab

系统无法正常启动的解决之道

系统无法正常启动的解决之道

5,创建grub的配置文件

系统无法正常启动的解决之道

系统无法正常启动的解决之道

6,重启系统,又回到熟悉的界面

五,在逻辑卷情况下,删除并恢复 /boot 和 /etc/fstab(友情提示:先做快照备份)

1,先查看下本机的分区情况和相关配置文件/etc/fstab, /boot/grub/grub.conf

wKiom1ffS_GQ9g8XAAA0siE9LVs281.png

2,删除 /boot 和 /etc/fstab,并重启系统

wKioL1ffS_GAVk12AAAKMLhHkqA723.png

3,由于删除了/boot 和 /etc/fstab,系统找不到启动分区和kernel,就要进入救援模式,提示系统没

有分区,故要先创建分区

wKiom1ffTPHyO_RoAAAKLT8PSqQ081.png

4,创建/boot 和 /etc/fstab

系统无法正常启动的解决之道

5,创建grub的配置文件

系统无法正常启动的解决之道

wKioL1ffaiiBskuYAAAKDdkNHKo967.png

6,重启系统,又回到熟悉的界面

六,在U盘上自制linux

1、给U盘分区并创建文件系统

  # fdisk/dev/sdb

  /dev/sdb1对应 /boot /dev/sdb2对应 /

  # mkfs.ext4 /dev/sdb1

  # mkfs.ext4 /dev/sdb2

2、挂载U盘的 /boot和 /

  # mkdir /mnt/boot

  # mkdir /mnt/sysroot

  # mount /sdb1  /mnt/boot

  # mount /sdb2  /mnt/sysroot

3、安装grub至U盘

  # grub-install –root-directory=/mnt /dev/sdb

    

4、复制内核和initrd文件至U盘

  # cp /boot/vmlinuz-Version  /mnt/boot/vmlinuz

  # cp /boot/initramfs-Version.img  /mnt/boot/iniyramfs.img

5、创建目标文件的根系统文件至U盘

  # mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,src,mnt,media,home,root}

6、移植bash等至U盘的根文件系统

  # bash copy.sh   

   脚本内容如下:

  #!/bin/bash
ch_root="/mnt/sysroot/"
[ ! -d $ch_root ] && mkdir $ch_root
bincopy() {
   if which $1 &>/dev/null;then
      local cmd_path=`which --skip-alias $1`
      local bin_dir=`dirname $cmd_path`
      [ -d ${ch_root}${bin_dir} ] || mkdir -p ${ch_root}${bin_dir}
      [ -f ${ch_root}${cmd_path} ] || cp $cmd_path ${ch_root}${bin_dir}
      return 0
   else
      echo "Command not found"
      return
   fi
}
libcopy() {
   local lib_list=$(ldd `which --skip-alias $1` | grep -Eo '/[^[:space:]]+')
   for loop in $lib_list;do
       local lib_dir=`dirname $loop`
       [ -d ${ch_root}${lib_dir} ] || mkdir -p ${ch_root}${lib_dir}
       [ -f ${ch_root}${loop} ] || cp $loop ${ch_root}${lib_dir}
   done
}
read -p "Please input a command:" command
while [ "$command" != "quit" ];do
    if bincopy $command;then
         libcopy $command
    fi
    read -p "Please input a command or quit:" command
done

7、为U盘创建文件系统的配置文件

 # vim /mnt/sysroot/etc/fstab

   /dev/sda1 /boot ext4 defaults 1 1

   /dev/sda2  /    ext4 defaults 1 2

8、为U盘的grub提供配置文件

  # vim /mnt/boot/grub/grub.conf

    default=0

    timeout=5

    title

        root(hd0,0)

     kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/bin/bash

     initrd /initramfs.img

原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/47829

(0)
pingskypingsky
上一篇 2016-09-19 16:32
下一篇 2016-09-19 17:25

相关推荐

  • 实战自制Linux操作系统

    实战自制Linux操作系统 自制linux系统 步骤概述: 1、新建一个硬盘2、在该新硬盘上新建两个分区,一个当boot分区,一个当/分区3、格式化并且挂载两个分区4、安装grub至目标磁盘5、为grub提供配置文件6、复制内核文件和initrd文件7、创建目标主机根文件系统8、移植bash命令和其库文件到根文件系统9、装载模块,实现网络功能10、启动测试 …

    Linux干货 2016-09-19
  • 学习宣言

    人所缺乏的不是才干而是志向,不是成功的能力而是勤劳的意志。

    Linux干货 2016-10-30
  • 《 Git 权威指南 》学习笔记

    这个没办法直接发博客了,篇幅太长,无法直接在 Blog 上排版了,直接发上 pdf 文档了。 接 《LNAMP Shell 部署脚本》 博文的内容,线上测试系统的 Git 环境部署。 整个 Git 环境包括了:     Git / Gitweb     Gitolite / Gerrit &nbsp…

    Linux干货 2015-10-27
  • Linux的哲学思想

    Linux的哲学思想 一切皆文件 在linux中所有的一切,都是可以通过ls进行查询的到的,甚至可以说ll查看详细信息时表现形式为文件,所有的设备,所有的文件不论后缀,只是一个单纯文件通过vim可以编辑一切 单一目的的小程序,组合小程序完成复杂任务 在linux中,每一个命令都是对应一个功能,通过不同的参数来完成不同的要求,通过繁多的小的命令来完成大型的要求…

    Linux干货 2016-10-30
  • 马哥教育网络21期+第九周练习博客

    马哥教育网络21期+第九周练习博客 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; [root@localhost bin]# cat 1.sh  #!/bin/bash # while&nbsp…

    Linux干货 2016-09-05
  • Apache配置压缩优化时报错——undefined symbol: inflateEnd

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1345264    圣诞都过了,好久没来51发博文了。最近一直在忙考试和其他一些私人事务,感觉长期不发博文,有点不好。不是不发,实在是最近…

    Linux干货 2016-08-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-20 10:35

    写的很好,图示清晰,原理部分阐述的很详细。赞一个