Linux系统--Linux的Grub应用

grub应用

1.Grub(bootloader):全称为:GRand Unified Bootloader。

现在存在两个版本:

grub 0.x: grub legacy

grub 1.x:grub2

2.grub的功能:

功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核;

3.grub legacy 有三个阶段,分别是:

stage1,stage1_5,stage2

stage1:存放在MBR中

stage1_5:存放在MBR之后的扇区中,让stage1中的Bootloader 能识别stage2所在的分区上的文件系统

stage2:存在磁盘分区上(/boot/grub),提供菜单让用户选择不同的内核或操作系统。

grub的配置文件存放目录为:/boot/grub/grub.conf  其中/etc/grub.conf文件是/boot/grub/grub.conf 的一个连接文件

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

stage2及内核等通常放置于一个基本磁盘分区,而不会放在一个复杂的磁盘分区上,因为stage无法识别复杂的磁盘分区,如逻辑卷,软raid等。这也是为什么要单独创建一个简单的boot分区,而系统跟/做一个逻辑卷。但并不意味着boot要单独分区。

常用功能:

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

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

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

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

允许传递参数给内核

可隐藏此菜单

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

为编辑菜单进行认证

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

4.grub的交互式接口:

在系统启动时会有timeout用户选择的时长,按Enter键会进入一下界面(菜单选项):

grub如何识别设备:

(hd#,#)

hd#:表示第几块磁盘

#:表示第几块分区

(1)grub的命令行接口:

按下c键,会给出一个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 #指定根设备在启动过程中为read-only,默认情况下一般都是这样配的

rw #和ro类似,它是规定为read-write,可写

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

Console和kernel log相关启动参数:

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

debug #enable kernel debugging 启动中的所有debug信息都会打印到console上

quiet 静默模式 将kernel log level设置为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;其中ramdisk 必须要和内核版本号一致。

boot:引导启动选定的内核

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

grub> root (hd#,#)

grub> kernel /vmlinuz-Version_Release ro root=/dev/DEVICE ...

grub> initrd /initramfs-Version_Release.img

grub> boot

(2)进入编辑模式:

每次手动引导启动系统,还是有点麻烦的,可以在按e键进入编辑模式:

在编辑模式下可以修改内核参数,也可以进入单用户模式下等等。

其实编辑模式下显示的内容就是grub的配置文件的内容:/boot/grub/grub.conf

5.grub的配置文件内容介绍:

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

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

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

(1)使用命令grub-md5-crypt生成密钥字符串为菜单或启动选定的内核进行认证

如:

生成加密字符串:

[[email protected] ~]# grub-md5-crypt

Password:

Retype password:

$1$bQjoR$xpjXuIPvDgccSKfEP3hE2.

编辑grub配置文件:

重启系统进行测试:

(2)进入单用户模式

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

(2) 在选定的kernel后附加

1, s, S或single都可以;

(3) 在kernel所在行,键入“b”命令;

6.安装grub:

(1)grub-install

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

其中--root-directory 的值为boot所在的目录。

如:boot目录在/mnt/boot 则--root-directory=/mnt

(2)grub

grub> root (hd#,#)

grub> setup(hd#)

7.grub损坏的修复:

(1)grub的配置文件损坏的情况下:

模拟grub配置文件损坏,丢失的情况下的修复过程:

先备份一下:# cp grub.conf{,.bak}

删除配置文件:# rm -rf grub.conf

重启系统:# init 6

重新启动系统之后,会出现grub命令行接口,在此处手动启动系统:

启动系统之后,在/boot/grub目录下在手动添加grub.conf配置文件。

(2)磁盘上的grub损坏的情况下:

模拟grub损坏,进行修复的过程:

模拟grub损坏:# dd if=/dev/zero of=/dev/sda bs=200 count=1

修复方法:

1.在grub已损坏,系统还没有重启的情况下:# grub-install --root-directory=/  /dev/sda 执行这个命令即可。

2.在grub已损坏,系统还没有重启的情况下:在grub的命令行模式下执行如下命令:

grub> root (hd0,0)

grub>setup (hd0)

eg:

3.grub已经损坏,系统已经关闭,无法启动的情况下:

有以下修复情况:

a.把损坏的磁盘拆卸下来,装载到一个好的系统上,在好的系统上利用grub-install命令进行对损坏的磁盘进行安装grub.

b.利用镜像文件进行修复:在系统启动时,以cdrom方式启动,启动之后会有一个选择界面的菜单,我们选择Rescue installed system 一项,即紧急救援模式。或者按Esc键,进入命令行模式,输入linux rescue 。boot:linux rescue

如:

然后执行以下命令即可:

# chroot /mnt/sysinit

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

# exit

# reboot

时间: 2024-10-09 15:12:15

Linux系统--Linux的Grub应用的相关文章

Linux系统--Linux的启动过程

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

Linux系统--Linux进程与作业管理(2)

Linux系统--Linux进程与作业管理(2) Linux进程相关的基本概念已经了解,Linux进程管理的一些命令: pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkil,job,bg,fg,nohup 1.pstree命令: pstree - display a tree of processes:以树状形式显示当前系统进程,和命令tree相似. 2.ps命令: ps - report a snapshot of 

Linux系统--Linux进程与作业管理(1)

Linux系统--Linux进程与作业管理(1) 先了解一些基本概念:内核的功能,程序的组成,进程,进程的类型和运行状态,进程的分类,Linux中的第一个进程init,Linux内核存储进程信息的格式,进程的优先级,进程间的通信. 1.Linux内核的功能和程序的组成: Linux内核是一种开源电脑操作系统.是用来与硬件打交道并为用户程序提供一个有限服务集的软件.Linux内核支持模块化,支持模块的动态加载和卸载,可以把模块驱动编辑到内核中,也可以不编辑到内核,直接调用需要的模块.Linux内核

Linux系统--Linux进程与作业管理(3)

Linux系统--Linux进程与作业管理(3) Linux进程管理和作业管理的另外几种管理命令:vmstat,dstat,pmap,glances,kill 1.vmstat命令: vmstat - Report virtual memory statistics vmstat命令可以看到整个机器的CPU,内存,IO等使用情况.此命令不是动态显示的,需要手动进行刷新. vmstat #:相隔#秒刷新. 直接执行vmstat命令的结果为: 各个字段的含义: procs: r:等待运行的进程的个数

搜索所有硬盘分区上的linux系统,重新安装grub的方法

电脑硬盘上(非vmware)安装了Ubuntu.Fedora.Debian.openSUSE.linuxMint.Mageia.elementaryOS.PearOS.ZorinOS.Bodhi.Manjaro.Sparky.linuxDeepin等13个linux发行版,撸linux的万里长征终于迈出了第一步!但是问题来了,我喜欢ZorinOS的grub启动图形界面,可是被最后安装的PearOS丑陋文本界面给覆盖了,怎么办?撸了很长时间,一直没有满意的答案.今天不小心给ZorinOS安装了kd

Linux系统--Linux网络管理与配置

Linux 网络管理与配置 在学习linux的过程中,Linux网络的管理和配置在后续学习中是很重要的,几乎学习的后期都离不开网络的概念和配置,如集群中的使用.所有学习好Linux网络至关重要. Linux网络配置有两种方式:静态指定和动态分配 动态分配就是利用DHCP服务器,动态的给linux主机分配IP地址.静态指定可以通过命令配置临时的IP和相应的NETMASK,GATEWAY,DNS等,也可以通过修改配置文件做相应的配置. 在CentOS6上的网络配置 一.静态指定,通过命令暂时配置li

Linux系统--Linux磁盘和文件系统管理

Linux磁盘和文件系统管理 一.Linux磁盘管理: 1.磁盘的物理组成部分(这里介绍的主要是机械硬盘) a.磁盘的组成主要有: 盘片,机械手臂和磁头,主轴马达 b.磁盘的数据存储和读取在于磁盘的盘片,在盘片上的一些概念: 扇区(sector):就是将盘片划分成若干个扇区.扇区是最小的存储单位,每个扇区512个字节. 柱面(Cylinder):磁盘是有多个盘片组合而成,而柱面是有不在同一磁盘上的相同位置上的扇区组成.柱面是分区的最小单位,也就是分区是根据柱面分区的. c.第一个扇区的组成: 有

9.安装的第一个Linux系统 -Linux Mint 18.1 cinnamon

原文地址:https://www.douban.com/note/598274695/ 版权归作者所有,任何形式转载请联系作者.作者:Wilhelm(来自豆瓣)来源:https://www.douban.com/note/598274695/ 工作生活一直用得比较多的电脑系统是windows.从win95一直到win10,都玩腻了.而且对于我这些正在学习编程的新手来说,windows的开发环境不是太友好 Mac OS当然比windows好.稳定,对开发兼容性好.但一台苹果的电脑价钱还是小贵的.经

Linux系统--Linux中Raid不同级别介绍

RAID不同级别介绍 磁盘阵列(Redundant Arrays of Independent Disks,RAID) RAID 的常用级别有:RAID0,RAID1,RAID01,RAID10,RAID3,RAID5,RAID6.等. 1.RAID0: 最简单的实现方式就是把N块同样的磁盘通过智能磁盘控制器或操作系统的磁盘驱动城区以软件的防暑串联在一起创建一个大的卷集.将原先顺序写入的数据被分散到所有的N块硬盘中同时进行读写.N块硬盘的并行操作使同一时间内磁盘读写的速度提升了N倍. RAID