【Linux】【Basis】Grub
2024-10-19 15:35:41
GRUB(Boot Loader):
1.
grub: GRand Unified Bootloader
grub 0.x: grub legacy
grub 1.x: grub2
2.
grub legacy:
2.1 运行阶段:
stage1: mbr
stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
stage2:磁盘分区(/boot/grub/)
PS:stage2及内核等通常放置于一个基本磁盘分区;因为bootloader没法识别非常复杂的文件系统结构,如软raid或者卷组
2.2
功用:
(1) 提供菜单、并提供交互式接口
e: 编辑模式,用于编辑菜单;
c: 命令模式,交互式接口;
(2) 加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
(3) 为菜单提供了保护机制
为编辑菜单进行认证
为启用内核或操作系统进行认证
2.3 如何识别设备:
(hd#,#)
hd#: 磁盘编号,用数字表示;从0开始编号
#: 分区编号,用数字表示; 从0开始编号
例如:(hd0,0)
2.3.1
grub的命令行接口
help: 获取帮助列表
help KEYWORD: 详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#)
kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;必须与内核版本完全匹配
boot: 引导启动选定的内核;
例子:
手动在grub命令行接口启动系统:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
2.3.2.
配置文件:/boot/grub/grub.conf<-- /etc/grub.conf
配置项:
default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
timeout=#:指定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddenmenu:隐藏菜单;
password [--md5] STRING: 菜单编辑认证;
title TITLE:定义菜单项“标题”, 可出现多次;
root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
password [--md5] STRING: 启动选定的内核或操作系统时进行认证;使用grub-md5-crypt命令生成密码串
2.3.3.
进入单用户模式:
(1) 编辑grub菜单(选定要编辑的title,而后使用e命令);
(2) 在选定的kernel后附加
1, s, S或single都可以;
(3) 在kernel所在行,键入“b”命令;
2.3.4.
安装grub:
(1) grub-install
grub-install --root-directory=ROOT /dev/DISK
(2) grub
grub> root (hd#,#)
grub> setup (hd#)
3. 练习、为运行于虚拟机上的CentOS 6添加一块新硬件,提供两个主分区;
(1) 为硬盘新建两个主分区;并为其安装grub;
添加新硬盘,vmware上直接add new,选择new disk,然后各种下一步,下面是添加的硬盘
对/dev/sdb分区
分成了sdb1和sdb2两个主分区
格式化成ext4
创建文件夹并且把两块盘挂在文件夹上
安装grub在/dev/sdb1上
(2) 为硬盘的第一个主分区提供内核和ramdisk文件; 为第二个分区提供rootfs;
吧当前系统的内核和ramdisk文件拷贝到新的boot目录下,注意名字要保持一致(版本号一致,不写也算一致)
(3) 为rootfs提供bash、ls、cat程序及所依赖的库文件;
bash
ls,用循环的方式拷贝的
cp的就不截图了
for i in $(ldd /bin/cp|grep -o "/lib64/.*\ "); do \cp -f $i /mnt/root$i; done
测试下能不能用
(4) 为grub提供配置文件;
(5) 将新的硬盘设置为第一启动项并能够正常启动目标主机;
创建一个新的机器,使用刚才的磁盘作为硬盘,启动时候记得在内核的引导选项上加selinux=0
最新文章
- 使用ArcGIS JavaScript API 3.18 加载天地图
- Android 手势操作识别
- linux的mount(挂载)命令
- TFS(Team Foundation Server)敏捷使用教程(四):工作项跟踪(1)
- 使用Sql按日期条件查询
- 读《MacTalk&;#183;人生元编程》及Mac经常使用软件
- 转:IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
- 火炬之光模型导出(Unity载入火炬之光的模型)
- iOS四种多线程(swift和oc)
- Micropython TurnipBit 电子时钟 青少年编程入门
- Python 安装包报错
- centos7 快速安装 mariadb(mysql)
- Linux中利用extundelete恢复误删除的数据
- delphi图片欣赏
- 用Python实现数据结构之队列
- 研究VCL源码的原因和起点
- odoo开发笔记 -- 模型一对多tree视图弹窗效果实现
- EUI ViewStack实现选项卡组件 (封装了一个UI类)
- mongodb的安装配置方法
- NOIP2016愤怒的小鸟 题解报告 【状压DP】
热门文章
- 图文详解 Java 字节码,让你秒懂全过程
- mui轮播图为什么设置了自动播放参数也不能自动播放呢?
- 菜鸡的Java笔记 第五 - java 程序逻辑控制
- [loj3527]地牢游戏
- [ARC117E]Zero-Sum Ranges 2
- 【Azure 应用服务】App Service 无法连接到Azure MySQL服务,报错:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
- JdbcTemplate 、Mybatis、ORM 、Druid 、HikariCP 、Hibernate是什么?它们有什么关系?
- 洛谷 P6783 - [Ynoi2008] rrusq(KDT+势能均摊+根号平衡)
- Codeforces 1010F - Tree(分治 NTT+树剖)
- mysql order by 多个字段排序实现组内排序