Linux自学笔记——grub应用

GRUB(Boot Loader)

GRUB,GRand Unified Bootlader ,是一个来自GUN项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

grub版本:

grub 0.x:grub(legacy) centos 5,6

grub 1.x:grub2              centos 7

grublegacy:

stage1:mbr,主引导目录;

stage1_5:mbr之后的扇区,让stage1中的BootLoader能识别stage2所在的分区上的文件系统;

stage2:磁盘分区(/boot/grub)

配置文件:/boot/grub/grub.conf <--/etc/grub.conf

工作流程:当系统启动时,如果要加载grub所在的磁盘时,会读取这个磁盘的MBR,同时会加载stage1,stage1会尝试读取后扇区的stage1_5阶段,stage1_5阶段会帮助stage1中的bootloader识别stage2所在的分区上的文件系统,然后加载stage2所在的磁盘分区,这个分区不但有stage2阶段,还有内核和ramdisk等。

Stage2及内核等通常放置于一个基本磁盘分区:

功用:

(1)提供菜单、并提供交互式接口

e:编辑模式,用于编辑菜单;

c:命令模式,交互式接口;

(2) 加载用户选择的内核或操作系统

允许传递参数给内核

可隐藏此菜单

(3)为菜单提供了保护机制

为编辑菜单进行认证

为启用内核或操作系统进行认证

如何识别设备:

(hd#,#)

hd#:磁盘编号,用数字表示;从0开始编号

#:分区编号,用数字表示;从0开始编号

(hd0,0)

grub的命令行接口

help:获取帮助列表;

help KEYWORD:详细帮助信息;

find (hd#,#)/PATH/TO/SOMEFILE:查找某个磁盘上的某个文件;

root (hd#,#):设置grub的根设备

kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核;额外还可以添加许多支持内核使用的cmdline参数:

例如:init=/path/to/init, selinux=0

常用内核启动参数:

磁盘相关启动参数:

root     #指出启动的根文件系统  如:root=/dev/sda1

ro  #指定根设备在启动过程中为readly-only,默认情况下一般都是这样配的

rw  #和ro类似,为read-write,可写

rootfstype 根文件系统类型,如:rootfstype=ext4

console和kernel log相关的启动参数:

console #console的设备和选项,如:console=tty0console=ttyS0

debug        #enable kerneldebugging   启动中的的所有debug信息

quiet          静默模式 将kernel loglevel设置为KERN_WARNING,在启动中指非常严重的信息

loglevel        #设置默认的console日志级别,如:loglevel=7(0~7数字分别为KERN_EMERG,…,KERN_DEBUG)

time             #设置在每条kernel log信息前加一个时间戳

内存相关的启动参数:

mem         #指定kernel使用的内存量,mem=n[KMG]

hugepages #设置大页表页(4MB大小)的最多个数,hugepages=n

CPU启动的相关参数:

mce          # Enable the machine check exception feature.

nosmp      #Run as a single-processor machine. 不使用SMP(多处理器)

max_cpus   #max_cpus=n, SMP系统最多能使用的CPU个数(即使系统中有大于n个的CPU)

Ramdisk相关的启动参数:

initrd        #指定初始化ramdisk的位置,initrd=filename

noinitrd    #不使用initrd的配置,即使配置了initrd参数

初始化相关启动参数:

init       #在启动时去执行的程序,init=filename,默认值为/sbin/init

PCI相关的启动参数:

pci       #pci相关的选项,我常使用pci=assign_buses,也使用过pci=nomsi

SELinux相关启动参数:

enforcing  #SELinux enforcing状态的开关,enforcing=0表示仅仅是记录危险    而不是阻止访问,enforcing=1完全enable,默认值是0

selinux     #在启动时关闭或开启SELinux,selinux=0表示关闭,selinux=1表示开启selinux

initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供的额外的文件的ramdisk;

boot:引导启动选定的内核;

手动在grub命令行接口启动系统:

grub> root(hd#,#)

grub> kernel /path/to/kernel_file roroot=/dev/device

grub> initrd /path/to/initramfs_file

grub> boot

配置文件:/boot/grub/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[PARAMENTERS]:启动的内核

initrd  /PATH/TO/INITRAMFS_FILE:内核匹配到的ramfs文件;

password [--md5] STRING:启动选定的内核或操作系统时进行认证;

grub-md5-crypt命令,可生成密钥。

对grub菜单编辑认证和启动选定内核认证:

1.     运用grub-md5-crypt命令生成密钥:

2.     编辑grub配置文件:

3.     重启系统,进入grub菜单模式,会发现需要密码才能进入菜单;

4.     输入密码,按回车键发现可以编辑;

5.     启动启动系统发现也需要密码;

6.     输入密码便可进入系统;

进入单用户模式:

(1)             编辑grub菜单(选定要编辑的title,而后使用e命令);

(2)             在选定的kernel,键入e命令进入编辑

(3)             在选定的kernel后附加1,s,S或single都可以,回车;

(4)             在kernel所在行,键入b命令;

(5)             进入单用户模式;

如需修改密码,进入单用户模式后可使用passwd命令修改密码;

安装grub:

(1)            grub-install

grub-install--root-directory=ROOT /dev/DISK

(2)            grub

grub>root(hd#,#)

grub > setup(hd#)

练习:

1.     新加磁盘,提供直接单独运行的bash系统

1)          对新加的硬盘进行分区,并检查分区是否成功;

2)          对分区进行格式化,/dev/sdb1,3格式化为ext4分区,/dev/sdb2格式化为swap分区

3)          创建挂在目录/mnt/boot,并将/dev/sdb1挂载至此目录;

4)          安装grub至新硬盘的基本文件系统上,使用grub-install,grub-install会自动寻找boot目录,指定根目录时只需要指定到boot目录的上一级目录即可;

5)          复制内核和initramfs到新硬盘的boot目录下;

6)          创建grub配置文件;

7)          为新硬盘的根分区创建常用的一级子目录

8)          复制bash程序到新硬盘的对应目录下;

9)          复制完bash后需要将bash所依赖的动态库复制到对应目录下,首先查看二进制程序所依赖的动态库;

10)     复制bash所依赖的动态库;

11)     切换根,并测试bash是否可用;

12)     找到磁盘文件,将其作为新的虚拟机的磁盘使用;

13)     新建虚拟机,磁盘选择现有的磁盘;

14)     此时开启虚拟机,系统启动失败,因为内核默认启用了selinux,故需要通过grub编辑模式在选择init之前输入selinux=0,这时启动将顺利进行,启动完毕后可以使用bash;

进入grub编辑模式,设置后重新启动,便可进入;

2.     破坏本机grub stage1,而后在救援模式下修复之;

1)          破坏本机的grub stage1;

#dd if=/dev/sdaof=/root/mbr.bak count=1 bs=512 备份

#dd if=/dev/zeroof=/dev/sda count=200 count=1   破坏

#sync    设置同步到磁盘

2)          如果系统还处于开机状态,使用grub-install命令安装修复;

#grub-install–root-directory=/    /dev/sda

#sync

或者可以用grub命令进入命令行模式进行修复;

#grub

grub>root(hd0, 0)

grub>setup(hd0)

3)          如果系统已经处于关机状态,便需要使用紧急救援模式;

1.     挂载,重启系统,选择rescure installed system,按esc键

2.     输入 linux rescue 回车;

3.     选择语言;

4.     选择键盘;

5.     开启网卡,此处也可以选择不开启;

6.     选择继续;

7.     选择ok继续;

8.     点击ok进入修复模式;

9.     切换到实际的根目录,执行grub-install命令;

10.用exit退出到修复模式,reboot重启系统便可顺利进入系统了;

时间: 2024-09-30 19:53:35

Linux自学笔记——grub应用的相关文章

linux学习笔记——grub故障排除

注:本文为本人学习笔记,故只代表本人的理解,如有错误,请见谅并欢迎指正 1.grub简介 详细描述请自行搜索网络,非常多.这里只简单引用网络上的描述.grub是电脑的启动管理程序.是 计算机启动后运行的第一个程序,他是用来负责加载.传输控制到操作系统的内核,一旦把内核挂载,系统引导管理器的任务就算完成退出,系统引导的其它部份,比如系统的初始化及启动过程则完全由内核来控制完成. Linux下除了Grub,还有LILO等,windows环境还有其他相关软件. 2.grub的常见故障 a.grub.c

Linux自学笔记——Centos启动流程

Centos启动流程大概为:POST --> Boot Sequence(BIOS)--> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs (readonly)-->switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端.

Linux自学笔记——linux文件系统

Linux的文件系统 根文件系统(rootfs),内核挂载的第一个文件系统,在启动流程的这一篇文章里有提到: LSB,FHS(Filesystem  Herirache Standard) 常用的文件系统目录:/etc,/usr,/var,/root/,/home,/dev 目录介绍:(以下截图很多是目录内容的部分截图) /boot:引导文件存放目录,内核文件(vmlinuxz).引导加载器(bootloader,grub)都存放于此目录: /bin:供所有用户使用的基本命令:不能关联至独立分区

Linux 自学笔记——内核管理初步及编译

Linux Kernel: 内核设计体系:单内核.微内核: 内核的组成部分: 1.Kernel:内核核心,一般为bzimage,通常位于/boot目录,名称为vmlinuz-VERSION-release: 2.Kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/,maninfo命令通过读取此文件的信息以显示相关信息: 内核模块与内核核心版本一定要严格匹配: []:N: [M]:Module,编译进模块中: [*]:Y,编译进内核

Linux自学笔记(6):Linux文件系统及文件类型

Linux的文件系统:跟文件系统(rootfs)root filesystem LSB,FHS:linux发行标准1 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var /boot:引导文件存放目录,内核文件(vmlinuz).引导加载器(bootloader,grub)/bin:供所有用户使用的基本命令:不能关联独立分区,OS启动即会用到的程序:/sbin:管理类的基本命令:不

Linux自学笔记--基础命令date,cal等

逆水行舟,不进则退: date命令: 我们可以来man一下date命令,可以在上面看出 date的含义为 - print or set the system date and time,我们从以下几方面对date命令进行阐述. 1.   显示时间 date[OPTION]... [+FORMAT] format:格式符号 %D: %F: %T: 在屏幕中输入单独的date命令可以显示系统的时间: 同时我们也可以显示自己想要的时间显示格式: 2.   设置时间 date[-u|--utc|--un

linux自学笔记——RAID级别特性以及软RAID的实现

RAID,Redundant Arrays of Inexpensive Disks 廉价冗余磁盘阵列,又称为Redundant Arrays of Independent Disks,独立冗余磁盘阵列. 其基本原理就是利用多块较小的磁盘通过不同的组织方式,组成一个大的磁盘组,以提高磁盘的IO能力和耐用性.由于组织方式不同,所以把RAID分为多个级别.而最常用的是RAID0,RAID1,RAID5,RAID6,RAID10,RAID01.下面我们将对以上的级别进行比较分析. 级别:level R

Linux自学笔记——Selinux简介

SElinux是美国国家安全局(NSA)对于强制访问控制的实现,是linux历史上最杰出的新安全子系统.NSA是在Linux社区的帮助下开发的一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在它的任务中所需要的文件.SElinux默认安装在Fedora和RedHat Enterprise Linux上,也可以作为其他发行版上容易安装的包得到. DAC,自主访问控制,任何程序对其资源享有完全的控制权,每个用户或进程可以随意修改自己的文件的权限,将其他权限授予给其他人而具有任意的访问权

Linux自学笔记——计算机基础以及命令帮助的获取

计算机基础知识: 计算机的主要组成部分: 运算器.控制器.存储器.输入设备.输出设备 CPU:运算器,控制器 bus:总线 memory: 编址存储设备 IO:与外部部件交互 程序的运行模式: 用户空间:user space,us 内核空间:system space POS:Portable OperationSystem POSIX API:编程接口: 运行程序格式: Windows:EXE,dll(dynamic link library) Linux:ELF,so(shared objec