设为首页 收藏本站
查看: 671|回复: 0

[经验分享] linux系统开机流程以及grub的配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-10 08:53:03 | 显示全部楼层 |阅读模式
QQ截图20150910085218.png
在grub命令行手动启动系统:
前提:在系统启动时无法正常进入界面,但根据提示错误判断引导程序并没有损坏的情况下可以手动进入grub命令行来进行启动系统。
在grub引导时进入grub命令行界面(就是在系统启动读秒的时候按c键进入grub命令行界面)
第一步:先设定grub所在的根路径在哪个设备上。然后看当前系统上的/boot/下的目录是否完整,使用find命令查找


第二步:指定kernel的位置及其参数和initrd的位置并使用boot命令重启。



修复grub的三种方式
第一种:grub损坏后没有重启系统。可以使用grub命令来修复(此方法必须保证在当前系统存在boot/grub目录及其个极端的文件,而且不能损坏)
grub> root (hd0,0)   
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)   
setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... yes
Checking if "/grub/stage2" exists... yes
Checking if "/grub/e2fs_stage1_5" exists... yes
Running "embed /grub/e2fs_stage1_5 (hd0)"...  27 sectors are embedded.
succeeded
Running "install /grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.
grub>
修复完成,退出即可

第二种:重新安装grub(此方法会检查boot/grub目录及其各阶段文件,如果没有,则之间自动创建之)
[iyunv@localhost grub]# grub-install --root-directory=/  dev/sda

--root-directory :用来指定grub的根目录,就是是boot所在的目录
/dev/sda  :表示grub就创建在当前磁盘的中


第三种方法:进入紧急救援模式修复
当grub在损坏的时候,我们可以进入救援模式来修复geub或者将硬盘拆下来到其他主机上修复grub。
首先,我们模拟grub损坏的场景.执行
dd  if=/dev/zero of=/dev/sda bs=200 conut  

这个表示我们将sda磁盘的前200个字节用特殊设备/dev/zero破坏,即破坏了MBR中的前200个字节
开始修复过程:
第一步:由于硬盘的grub已经损坏,所以此时从硬盘引导启动是不可能的。因此我需要从其他具有安装grub引导管理器的设备上来引导启动此系统,可以是光盘、u盘等启动盘。所以我们需要进入biso界面选择以光盘镜像启动。

第二步:在grub引导的时候选择

根据步骤选择


选择装有完整grub的设备(就是修复要用到的镜像)

下一步网络选择,因为我们这里不需要使用网络来引导,因此可以不设置网络

下一步,很重要,提示我们修复环境会寻找磁盘上的可安装程序并将其挂载到/mnt/sysimage目录下,如果不是对这个过程特别熟悉,能做到自动挂载的话就选择continue

下一步提示我们找到磁盘上的第一个可安装引导程序

提示挂载系统系统,接下来进入救援模式


接下来更改系统路径

使用grub-install命令进行修复,并制定修复的grub所在的磁盘设备,一切都会自动生成

然后重启系统,进入biso修改启动项为硬盘启动,系统就可以正常启动了


手动安装制作grub.
前提:有时候根据需要将bootloader替换掉,或者将LILO更换为grub。或者新增一个bootloader。比如将一个操作系统已复制方式备份到另一个分区是,MBR中的的数据就没有备份,此时就需要在备份的那一边新建bootloader。

第一步:首选确定系统是否安装grub软件。在centos5或6上使用grub 0.x的版本,就叫做grub,而在centos7上使用的是grub 1.x版本,被称为grub2.可使用rpm查看是否安装。我的实验环境是centos6。模拟情景是在一块新硬盘上手动创建grub
[iyunv@localhost grub]# rpm -q grub
grub-0.97-93.el6.x86_64

第二步:给系统添加一个新硬盘,显示为/dev/sdb(添加过程不在写)。然后对其进行分区。并使内核重读分区表(注意如果是新添加的空白磁盘,partx 命令使内核重读分区表可以在/proc/partitions文件中立即查看到,如果磁盘此前有过分区,可能需要重启系统才能在/proc/partitions文件中查看到新的分区情况)
[iyunv@localhost ~]# cat /proc/partitions
major minor  #blocks  name

   8        0  104857600 sda
   8        1     204800 sda1
   8        2   62914560 sda2
   8       16   10485760 sdb
   8       17    6425968 sdb1
   8       18    4056412 sdb2
253        0   20971520 dm-0
253        1    2097152 dm-1
253        2   10485760 dm-2
253        3   20971520 dm-3
然后格式化文件系统类型为ext4类型
[iyunv@localhost ~]# mke2fs -t  ext4 /dev/sdb1
[iyunv@localhost ~]# blkid /dev/sdb1
/dev/sdb1: UUID="eed16606-c4ed-4f00-b8fb-925898b6e102" TYPE="ext4"
[iyunv@localhost ~]# mke2fs -t  ext4 /dev/sdb2
[iyunv@localhost ~]# blkid /dev/sdb2
/dev/sdb2: UUID="6c2c0c61-a7ea-46be-8f74-82ab73396970" TYPE="ext4"
因为创建的grub必须要找到boot目录,而当前boot目录正在使用,所有我们在/mnt下创建boot目录,而后将/dev/sdb1挂载至/mnt/boot目录下
[iyunv@localhost mnt]# mkdir boot
[iyunv@localhost mnt]# mount /dev/sdb1 /mnt/boot
[iyunv@localhost mnt]# df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg0-root  20511356 3196124  16266656  17% /
tmpfs                   506144       0    506144   0% /dev/shm
/dev/sda1               194241   27923    156078  16% /boot
/dev/mapper/vg0-usr   10190136 1957908   7707940  21% /usr
/dev/mapper/vg0-var   20511356  331624  19131156   2% /var
/dev/sdb1              5039592   10268   4766664   1% /mnt/boot

然后就可以使用grub-install命令在/dev/sdb1上安装grub了
[iyunv@localhost grub]# grub-install --root-directory=/mnt /dev/sdb

这里必须使用--root-directory指定grub扥根目录,因为grub必须从boot目录下查找grub目录及其相关文件,如果没有,grub-install则会在boot目录下创建grub目录及其子相关文件。但是默认不会创建grub.conf文件,因此需要手动编辑。/dev/sdb1则是指定的grub将要安装的磁盘,

但是要想做启动盘必须有内核文件vmlinus和initrd文件,因此复制这两个文件到这个boot目录下
[iyunv@localhost ~]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/
[iyunv@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot
然后编辑grub.conf配置文件
由于我们是打算将/dev/sdb3作为一个根文件系统来使用,因此需要再其上创建一些文件和目录。
在/mnt/下创建aa目录
[iyunv@localhost mnt]# mkdir aa
挂载/dev/sdb3至/mnt/aa
[iyunv@localhost mnt]# mount /dev/sdb3 /mnt/aa
进入此目录,在其上创建根文件系统需要的基本目录
[iyunv@localhost aa]# mkdir -pv etc bin sbin lib lib64 tmp usr dev proc sys var home root

复制二进制程序/bin/bash及其依赖的库文件到创建的bin目录下
[iyunv@localhost aa]# cp /bin/bash ./bin
[iyunv@localhost aa]# ldd /bin/bash
linux-vdso.so.1 =>  (0x00007fff3a9fd000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000036f7c00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00000036ecc00000)
libc.so.6 => /lib64/libc.so.6 (0x00000036ed000000)
/lib64/ld-linux-x86-64.so.2 (0x00000036ec800000)
[iyunv@localhost aa]# cp /lib64/libtinfo.so.5 ./lib64
[iyunv@localhost aa]# cp /lib64/libdl.so.2 ./lib64
[iyunv@localhost aa]# cp /lib64/libc.so.6 ./lib64
[iyunv@localhost aa]# cp /lib64/ld-linux-x86-64.so.2 ./lib64

切换根目录
[iyunv@localhost aa]# chroot /mnt/aa
bash-4.1#
这表示bash已经可以正常运行,只是作为启动程序的话还需要复制/sbin/init程序及其相关库。但是也可以设定内核启动后的程序不是/sbin/init,而设置为/bin/bash
修改grub.conf配置文件中内核参数init=/bin/bash
[iyunv@localhost grub]# cat grub.conf
default=0
timeout=5
hiddenmenu
title redhat (my linux)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/sda3  selinux=0 init=/bin/bash
initrd /initramfs-2.6.32-504.el6.x86_64.img
然后新建虚拟机,选择新安装的磁盘作为第一块磁盘,启动成功够能够直接进入bash界面






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-111724-1-1.html 上篇帖子: linux(CentOS)下Mrtg的安装詳解 下篇帖子: crontab 调用shell 脚本不运行 linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表