GRUB:GRand Unified Bootloader
开机管理程序扮演的角色,就是要在计算机开机时负责加载和传输操作系统的核心程序。
现在大部分的操作系统默认提供的开机管理程序都可以多重开机,GRUB(GRand Unified Bootloader)是由GNU(GNU’s Not Unix)所提供,GRUB 在使用、设置、操作或接口上,都比 Windows 或之前使用的另一套 LILO 方便,而grub是存在MBR里面的。
为什么需要这个MBR,主要是因为BIOS太小,功能有限。当系统加电,bios自检后,就会将MBR的Load进内存。也就意味着引导程序被激活,分区信息被加载到内存,同时也意味着对系统的控制权从bios过渡到grub
GRUB的版本:
GRand uniform Bootloader 0.9 ceontos6
Grub2 centos7
GRUB是一个系统引导程序,提供一个菜单,允许用户选择要启动系统或不同的内核版本,把用选定的内核装载到内存中的特定空间中,解压.展开,并把系统控制权移交给内核.(而Bootloader里面的程序是grub,它的作用是启动内核,grub分两部分组成,stage1和stage2,stage1是在MBR里面的,为了引导stage2的。stage2是存放在分区文件系统上的,分区在系统没有启动之前是无法识别的。则需要stage1.5这个中间层来协助stage1找到stage2,当stage2引导后,将内核和文件系统映射到内存,从而把系统控制权交给内核。
通过制作一个Linux系统启动流程,来了解grub的作用:
给虚拟机新添加一块磁盘,分三个区(100M 2G 5G),格式化
[root@centos6 ~]# mke2fs -t ext4 /dev/sdb1[root@centos6 ~]# mkswap /dev/sdb2[root@centos6 ~]# mke2fs -t ext4 /dev/sdb3
[root@centos6 ~]# mkdir /mnt/boot[root@centos6 ~]# mount /dev/sdb1 /mnt/boot[root@centos6 ~]# cd /mnt/boot/
[root@centos6 boot]# grub-install --root-directory=/mnt /dev/sdb #安装grub Installation finished. No error reported. This is the contents of the device map /mnt/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (fd0) /dev/fd0 (hd0) /dev/sda (hd1) /dev/sdb
[root@centos6 boot]# ls grub lost+found
[root@centos6 boot]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 vmlinuz[root@centos6 boot]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img initramfs.img[root@centos6 boot]# lsgrub initramfs.img lost+found vmlinuz
[root@centos6 grub]# vim grub.confdefault=0timeout=5title minilinuxroot (hd0,0)kernel /vmlinuz ro root=/dev/sda3 selinux=0 init=/bin/bashinitrd /initramfs.img
[root@centos6 ~]# umount /dev/sdb1[root@centos6 ~]# mkdir /mnt/sysroot[root@centos6 ~]# mount /dev/sdb1 /mnt/sysroot/[root@centos6 ~]# cd /mnt/sysroot/[root@centos6 sysroot]# mkdir -pv etc lib lib64 root home sbin bin proc sys dev opt
[root@centos6 bin]# cp /bin/bash . [root@centos6 sysroot]# ldd /bin/bash linux-vdso.so.1 => (0x00007fffa6bff000) libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000035c7e00000) libdl.so.2 => /lib64/libdl.so.2 (0x00000035b6600000) libc.so.6 => /lib64/libc.so.6 (0x00000035b6a00000) /lib64/ld-linux-x86-64.so.2 (0x00000035b6200000) [root@centos6 sysroot]# cp /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/ [root@centos6 sysroot]# ls /mnt/sysroot/lib64/ ld-linux-x86-64.so.2 libc.so.6 libdl.so.2 libtinfo.so.5
[root@centos6 bin]# chroot /mnt/sysroot/ bash-4.1#
grub的修复--光盘修复
[root@centos6 ~]# dd if=/dev/zero of=/dev/sda bs=200 count=1 #用dd来破坏grub
然后用光盘来修复
chroot /mnt/sysp_w_picpath #切换根 grub-install --root-directory=/ /dev/sda 安装grub
如此重要的MBR应该要做备份:
dd if=/dev/sda of=sda.mbr.back bs=512 count=1