- GRUB
- 前言
- 类型
- 利用grub重置密码
- 修复grub1
- 在未开机状态下重写配置文件
- 更改grub背景
- 给新硬盘做一个grub
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
张贺,多年互联网行业工作经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师
个人网站:www.zhanghehe.cn
笔者微信:zhanghe15069028807,现居济南历下区
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
GRUB
前言
对于内核来说rootfs是访问所有分区的入口,而对于grub来说则不然中,grub不遵守内核遵守的那一套,grub更加的简单粗暴,grub并不把rootfs当做是访问文件的入口。
它是一个程序,是安装安装操作系统时的安装程序提供的,MBR是全磁盘级别,不单单属性哪一个操作系统或者分区的,这是整个磁盘共有的。
如果你的c盘安装一个windows8以上的版本,当然用MBR里面的bootloader引导没问题,但是如果你的D盘又安装了一个linux呢?没有办法了,因为windows8以上的版本就会锁定MBR(曰:防止病毒入侵MBR),不允许有其他的操作系统给MBR做任何操作,而微软给MBR安装的bootloder只能引导微软自己的系统,同时微软的操作系统也不让别的bootloder进行引导。如果一个人不接受任何的建议,只听从自己的本能,这是有多可怕。这像“金三胖”不允许国人出去,也不许另人进入自己的国家,不准上网,不准拍照,更可笑的是朝鲜官方还发布了一个视频,这个视频说美国人民都生活在野外,我们要去美国拯救他们,但是朝鲜一年要饿死的人数最多,这是政策“愚民政策”。而linux的引导很开放的,谁都能引导,
类型
常用的grub有两种:
-
lilo:有个缺点,就是不支持1024柱面以后的硬盘,也就是说引用的柱面有限,但在嵌入式应用比较广。
-
grub:但是bootloader只有446空间的大小,要想grub能用更好的用户体验,仅使用446字节是无法满足需示的的,MBR采取了两个阶段的设计,也就是说MBR当中存在的是仅仅是第一个阶段,第一个阶段存在的意义就是引导第二个阶段,所以第一阶段并不完成什么有意义的工作,并不负责引导操作系统。第二个阶段位与内核在同一个分区/BOOT/下的grub目录,但是要仔细的想一想,在MBR程序启动的时候,这时候并没有挂载根,而第二阶段所需要的文件都在根文件系统之下,那么第一个阶段要怎样才能访问第二个阶段呢?那么就有第1.5阶段,所谓的1.5阶段就是识别第二阶段所需要的文件所在的文件系统,我们只有识别了其文件系统才可以调用里面的数据。我们可以打开/boot/grub目录看一下,
第二阶段的功能就相当强大了,这个stage2的足足有125K,突破了446字节的限制,大家注意了没有,里面还有一个splash.xpm.gz的文件,这个就是brub的背景文件,当然我们可以替换他。此外还有一个配置文件“grub.conf”
[root@zabbix grub]# rpm -q grub #查询grub的版本
grub-0.97-94.el6_7.1.x86_64
解释一个上面grub的配置文件:
- default=0就是默认选择择第一个title(一个title就是一个内核或系统)
- timeout=5等待用户选择的超时时间,5秒。
- splashimage=这是用来指定背景图片路径 的。
- hiddenumenu隐藏菜单,开机的时候是没有这个菜单,你一用键盘就显示,如果去掉这一行的话就不隐藏菜单了。
- title CentOS 6 (2.6.32-642.el6.x86_64)这是每个tite后面跟的字符串(操作系统提示),可以随意的更改。
- root (hd0,0) 内核文件所在的设备,对grub而言,所有类型硬盘一律为hd,第一个0表示第几个磁盘,最后的0表示对应磁盘的分区。
- kernel /vmlinuz-2.6.32-642.el6.x86_64……这一行是内核的文件路径,及传递给内核的参数,当我们查看cat /proc/cmdline时,这里面就有启动内核的命令,与这里是一样的,
- initrd /initramfs-2.6.32-642.el6.x86_64.img这里是ramdisk的文件路径
为什么内核的文件路径是从根开始?根本不是通过文件系统访问的路径,最后一行也是这个道理。
不知道有没有注意到,无论是linux的内核还是ramdisk都是从根开始,不过,我们从根下可以看到,linux的内核是在/boot目录上,为什么这里是显示从根开始呢?当grub程序启动的时候,根文件系统是没有挂载的,所以根本就能通过根去访问boot下的grub,而gurb程序可以直接进入到有grub的那个文件分区,这个分区有文件系统,为了能够识别这个文件系统,所以在gurb目录里面放有很多的文件系统的识别。
而且intrd后面的路径当中的版本号一定会和内核的版本号是一样的,不过后面加了.img这个后缀,这个后缀就是代表这是一个镜像设备。
如果仅有一个分区呢?下列的几条应当怎样改写。
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64
initrd /initramfs-2.6.32-642.el6.x86_64.img
无论你挂载还是不挂载文件系统都是存在的,内核必须依靠根才能访问磁盘上的文件,而grub就没有这个限止,可以直接识别并访问某个分区。挂载和不挂载的根本区别是访问不同而已。
linux的级别就相当于windows的安全模式,VGA模式等等,在某一些级别启动的服务不同,所以它们的级别不同。
利用grub重置密码
当我们启动linux会在grub当中看一些提示,如下图:
e代表编辑,可以选择进行哪个运行级别,当按下e后,出现下图:
我们可以看到上图,这三行内容就是grub.conf当中的内容,比如我们想对第二行的内核做一个编辑就可以反光标指定到第二行当中继续按e键,按完e以后,如下图:
1就是表示init1,编辑完成后回车后又回到第一屏的界面。
按b键:保存并进行init1启动
进入系统之后可以通过runlevel查看级别
给grub设置密码
其实保护grub是特别简单,只要在其配置文件当中的tilel上面加一行:
password cba-123 #cba-123指的是密码,下面给再给一个图示:
然后保存退出,重启,再进入系统时,再看grub界面,与前文看到的grub有一些不同的,如下图:
那么,大家想一下,其实我们直接就在grup.conf里面写明文密码的也不是太安全,因为明文是可见的,我们可以给grub设置一个密文的密码:
设置密文密码的过程:
- l 先用grub-md5-cryt生成一个由md5加密过的密码
- l 然后把这个密码放入到grub.conf里面
过程如下图:
注意,在上图当中,password这一行加入到tetle的上面,在title的上面意味着对brub的加密,如果是tetle里面话,像下图这样的话,就不代表是对grub加密 ,而是代表对title下的内核加密,每次启动内核都要输入密码,这个过程很简单,就不演示了。
修复grub1
要想修改grub,就要先把grub给破坏了,那么怎样才能把grub给破坏了呢?我们首先要知道grub位于什么地方?
答:grub位于MBR当中 ,而MBR位于每个磁盘的0磁盘的0扇区上的前446个字节。我们只想把前446个字节给它覆盖了就OK,可以通过dd命令来实现,如下:
注;上图中最后少了一步就是通过内核同步一下:sync
如上图:虽然现在的系统还在正常运行,因为系统的正常运行用不到grub,如果现在重启一下就会发现,下面操作系统的grub已经挂了,系统将无法启动,下面我们接着演示在启动的情况下,将grub给修复,所以这里并不重启,等这个实验做完,再关机演示怎样关机情况下修复好grub。
好,下面我们演示在系统正常情况下,重装grub,我们只是重装grub当中的第一段。
在未开机状态下重写配置文件
当把grub的配置文件给移动到别处,假设grub就是没有了。
重启,重启如下图:
上图:在上图让你填写内核所在的位置,如果不知道内核在什么位置的话,可以通过find命令查找,如下图,find后面加上磁盘号和分区号加一上斜线然后按TAB即可列出里面有什么,通过下图我们里面有内核,也有initrd。
注意:在指定内核位置的时候,在上图当中其实是不完整的,我们要把后面的部分也要写上,完整的定法是这样的:
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=1ad0b61b-7277-409f-8a4a-d5dc89df6308 #通过修复grub我们知道了,当我们接管一个全新的linux系统时,一定要做很多的备份,当然里面必然包括grub.conf。
注意最后是boot而不是reboot
更改grub背景
第一步:
[root@zabbix ~]# gicmp &
#在Xshell当中启动图形处理软件,当然在linux的图形界面当中也是可以的。
第二步:
现在我们需要按实际情况将图像缩放到 640x480 大小。为此,需要点击 图像 (Image) --> 缩放图像 (Scale Image)。记住,要如下图参数进行设置。修改宽度为 640,高度为 480。其他保持不变。
NOTE:把旁边的链子打开
第三步:
我们需要索引图像,让它仅使用 14 色。为此,点击 图像 (Image) --> 模式 (Mode) --> 索引 (Indexed)。点选 生成最优调色板 (generate optimum palette) 选项,并设置颜色最大值 (maximum number of colors) 为 14
第四步:
另存为,把格式保存为xpm
第五步:
gzip压缩,然图片放到/boot/grub,然后更改配置文件即可。
给新硬盘做一个grub
其实我们可以通过一个命令对任意的磁盘安装grub的,但是这个磁盘一定要有分区和文件系统,再次强调任意一块硬盘在出厂是就有MBR了,MBR不用我们人为安装,我们要安装的仅仅是MBR里面的bootloder。
准备块新的硬盘sdb,分区并格式化(sdb1)
创建一个新的目录,把sdb1挂载到这个新的目录上
进入,创建一个新目mnt,然后再在/mnt下创建boot目录
利用:grub-install –root-directory=/mnt/ /dev/sdb
验证一个有没有在boot下面生成一个叫grub的目录,查看里面的内容是否正确
在这个目录下自己编写一个grub的配置文件,grub.conf
完成以两步不要忘了sync刷新一下系统缓冲
之后把这个虚拟机给挂起
再找一台linux虚拟机,把其硬盘都删除,把自己做的硬盘放入进行去,看结果,结果如下:
上图这个情况,表示我们的实验已经成功,不过没有内核不能跑起来,如果我们再给它一个内核,然后再给它一个init这个小系统就能跑起来了。