双系统安装(先Windows后Linux,以免windows NTloader会覆盖Linux loader)
GRUB Grand Uniform Bootloader
CentOS5,6 grub 0.X系 : grub legacy(设备或分区编号从0开始)
CentOS7 grub 1.X系 :grub2(设备或分区编号从1开始)
一、CentOS5,6 grub应用:
1、grub的工作流程
stage1 : mbr中
stage1.5 :mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统 (存储stage2所在分区的驱动)
stage2 :提供菜单,加载内核和ramdisk至内存,移交控制权 (磁盘分区/boot/grub)
2、grub配置文件
通常boot(stage2)及内核等通常放置于一个基本磁盘分区上:
功能: (1)提供菜单、并提供交互式接口; e:编辑模式,用于编辑菜单 c:命令模式,交互式接口 (2)加载用户选择的内核或操作系统 允许传递参数给内核 可隐藏此菜单 (3)为菜单提供了保护机制 为编辑菜单进行认证 为启动内核或操作系统进行认证
boot为一个独立的分区, /可以为普通分区或lvm。访问boot通过挂载在根中实现
内核: kernel /vmlinuz, initrd /initramfs
boot和根在同一个分区,/必须为普通分区
内核: kernel /boot/vmlinuz, initrd /boot/initramfs
3、grub的功能
提供菜单 : tile TITLE
加载用户选择的kernel及ramdisk : kernel path parameters , initrd path
为菜单提供保护机制(kernel和菜单编辑认证) : password --md5 STRING
二、grub的命令行接口
2.1、help :获取帮助列表
格式: help KEYWORD(关键字):详细帮助信息
help root : 对grub而言---第二阶段stage2所在的磁盘分区才叫根,而不是真正文件系统(操作系统)所在的根
- grub > help find
find (hd#,#)/PATH/TO/SOMEFIEL;定位某文件是否存在
find (hd0,0)/vm 如果该硬盘上有这个文件会自动补全
先设定根设备
- root (hd#,#) :把那个磁盘设置为根设备
- kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件(最后一个字符z表示压缩存放)
- 额外还可以添加许多内核支持使用的cmdline参数
例如 :init=/path/ti/init ,selinux=0
- initrd /PATH/TO/INITRAMFS_FILE :设定为选定的内核提供额外文件的ramdisk (注:必须与内核版本号完全一致)
- boot :引导启动选定的内核
2.2、如何识别设备
root (hd#,#) 指定引导设备在哪个设备的哪个分区上。
hd# :磁盘编号,用数字表示,从0开始,
# : 分区编号,用数字表示;从0开始编号
(hd0,0):表示第一个块硬盘,第一个分区
注:grub2系列 (hd1,1)示第一个块硬盘,第一个分区
2.3、此根非彼根
系统启动起来后,任何一个存储设备要想被访问到,其前提就是在当前根文件系统的某个路径下面挂载某个设备,当做访问入口。
grub刚启动时候,内核未被加载,操作系统更未启动,所以不能通过根文件系统下的boot入口来访问grub分区;但是现在需要访问grub分区,要不然怎么加载grub_stage2呢?
直接去找新分区来的简便些,grub由于有文件系统驱动,所以能够直接访问分区
2.4、手动在grub命令行接口启动系统:
grub> root (hd#,#) ## 引导设备位置 左0: 第一个磁盘设备,右0:第一个分区 grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE rhgb quiet grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
2.5、配置文件: /etc/grub.conf -> /boot/grub/grub.conf
/boot/grub/menu.lst -> ./grub.conf
2.6、配置格式
default=# ## 设置默认启动的菜单项:落单项(title)编号从0开始 timeout=# ## 指定菜单项等待选项选择的时长,单位秒 splashimage=(hd0,0)/grub/splash.xpm.gz # 指明菜单背景图片文件路径 (图片要求格式:640X480 14位索引色) hiddenmenu ## 是否隐藏菜单 password --md5 STRING ## 菜单加密功能,STRING由grub-md5-crypt 或 openssl passwd -1 -salt STRING 生成 title CentOS 6 (2.6.32-696.el6.i686) ## 定义菜单项的标题(可出现多次:引导不同内核版本) root (hd0,0) ## 引导设备位置 左0: 第一个磁盘设备,右0:第一个分区
grub查找stage2及kernel文件所在设备分区:为grub的“根” kernel /vmlinuz-2.6.32-696.el6.i686 ro root=/dev/mapper/myvg-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_LVM_LV=myvg/lv_swap KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet rd_NO_DM rd_LVM_LV=myvg/lv_root rhgb quiet ##内核文件路径,及传递给内核的参数;只读方式root后面为正真文件系统的根
initrd /initramfs-2.6.32-696.el6.i686.img ##内核匹配的ramfs文件 (指定initramfs的路径) password --md5 STRING ##启用选定的内核或操作系统时进行认证 注意: root,kernel,initd格式的缩进
#一个title 指定一个操作系统或者一个内核
对于grub而言,所有类型硬盘一律为hd,
(hd#,n) #表示第几个磁盘,最后的n表示对应磁盘的分区
rhgb :为色彩显示
quiet :安静模式(屏幕不会输出内核检测的信息)
注释: kernel /vmlinuz PARAMETERS
当stage1.5找到stage2时,内核只识别stage2所在的分区,此分区为/,所以分区的vmlinuz路径为,/vmlinuz
PARAMETERS:
ro 以只读方式挂载root=PATH指明的路径的根
root=<路径> 指明root的位置
quiet 静默模式
selinux=0 不启动selinux
init=/path/to/somefile 开机后,init程序为哪个。默认为/sbin/init
1,s,S,single 单用户模式
<更多参数: google: kernel command line parameters>
注:
在说明配置方法之前,需要说明一个关键点,boot是否是一个独立的分区,它影响后面路径的配置。
在一个正常的操作系统中查看/boot/grub/grub.conf文件,可以在NOTICE段看到提示,说你是否拥有一个独立的boot分区?如果有则意味着kernel和initrd的路径是从/开始的而不是/boot开始的,如/vmlinuz-xxx,如果没有独立的boot分区,则kernel和initrd的路径中需要指明boot路径,例如Boot没有分区而是在/文件系统下的一个目录,则/boot/vmlinuz-xxx。
root (hd0,0)定义grub识别的根。一般定义的都是boot所在的分区,grub只能识别hd,所以这里只能使用hd,hd0表示在第一块磁盘上,hd0,0的第二个0表示boot在第一个分区上,grub2在分区的计算上是从1开始的,这是传统grub和grub2不同的地方。
kernel定义内核文件的路径和启动参数,等价于grub2的linux命令或linux16命令。首先说明参数,ro表示只读,root=/dev/sda[N]或者root=UUID="device_uuid_num"指定根文件系统所在的分区,这是必须的参数。rhgb表示在操作系统启动过程中使用图形界面输出一些信息,将其省略可以加快启动速度,quiet表示启动操作系统时静默输出信息。再说明路径,如果是boot是独立分区的,则kernel的路径定义方式为/vmlinuz-xxx,如果没有独立分区,则指明其绝对路径,一般都是在根文件系统下的目录,所以一般为/boot/vmlinuz-xxx。
2.7、实例
- 添加全局密码认证:使用grub-md5-crypt命令
$1$aTuXQ0$Mv3PU1SopA33PfjgJdvpf1
- 然后把生成的密码串---$1$aTuXQ0$Mv3PU1SopA33PfjgJdvpf1 ,分别添加在如图位置即可
- sync
- shutdown -r 0
下面提示:“enter”选定哪一个启动 或者“p”键先输入密码
三、grub的安装
安装grub: grub-install命令(完整安装) 重新安装grub stage1,1.5,2
grub-install命令 grub-install --root-directory=DIR DEIVCE --root-directory=DIR 指向boot目录的上一级目录 DEVICE 给哪个设备安装grub
实例:设置grub,并拆下该磁盘,装在新虚拟机上步骤如下:
1)关机
2)添加新的磁盘
3)启动虚拟机
4)进入命令行
5)查看磁盘
6)分区
7)格式化
8)挂载
9)安装grub
grub-install --root-directory=/mnt /dev/sdb (明确告诉根在那块硬盘即可自己会找boot目录)
注:配置文件只能只能自己写
10)创建FHS格式文件种类
11)复制bash程序及其相关的库
注:ldd 出来的第一个文件为库文件的访问入口
方法一:把ldd 出来的四个动态共享依赖库复制到/mnt/sysroot/lib64下
cp /bin/bash/ /mnt/sysroot/bin
chroot /mnt/sysroot 根切换并检测能否运行bash
方法二如下:
12) 给出配置文件
该图中的root(hd0,0)是为了拆下磁盘后-------新虚拟机上的第一块磁盘,演示效果
init=/bin/bash :要求限定/bin先bash 而不是sbin下的init;会直接把bash当做用户空间的进程来启动(当做程序运行是没问题的)
13)同步
14)关机
# shutdown -h now
15)查看第二个磁盘的名字
16)、新建虚拟机
15)启动新建的虚拟机
e键进入后 selinux=0要写在前面 否则无法启动
16)启动OK
四、问题一:grub的修复(但未重启)
1、在命令行中: grub 只是stage1(MBR 512)被破坏时,才能修复.
2、开机失效: rescue模式
1、在命令行中: grub
1)备份mbr
2)破坏mbr的stage1(别破坏分区表)
3)用grub命令行修复
方法一:并不需要当前根下有boot目录,它会自动装好
[root@localhost ~]# grub-install --root-directory=/ /dev/DISK
方法二:如下(只要没有重启,只是修复grub)
注:指明的root设备上,必须事先存在一个grub目录,里面stage1、stage1_5、stage2等等文件都必须存在
a、进入grub命令行
b、设置引导设备位置
c、给设备安装grub
d、重启验证
开机GRUB图象修改
1、安装gimp
yum install gimp
2、进入x windows
startx &
3、进入application --> GNU gimp2
4、图象(p_w_picpath) --> scole(缩放)
640 x 480 convert
5、图象 --> 模式(mode) --> 索引(index) 14
Floyd-Steinburg(减少颜色渗色)
6、文件 --> 保存 as --> lll.xpm
extend (xpm)
7、将保存在/root/目录中的文件压缩
gzip lll.xpm
8、移动至引导分区中
mv 111.xpm.gz /boot
9、修改/etc/grub.conf 或 /boot/grub/menu.lst 或 /boot/grub/grub.conf
splashp_w_picpath=(hd0,0) /lll.xpm.gz
10、重启
reboot
可参考:https://blog.csdn.net/weixin_42758707/article/details/92760614
https://blog.csdn.net/weixin_42758707/article/details/92764021