grub应用

CentOS 6启动流程:

 

POST -->

加电自检

Boot Sequence(BIOS) -->

根据bootsequence定义的启动次序(BIOS定义),

Boot Loader (MBR) -->

逐一搜索带有启动功能的设备,找到这个设备然后找到bootloader(MBR中)

Kernel(ramdisk) -->

 显示一个菜单,让用户选择内核或者系统版本,加载用户选择的内核kernel(借助于ramdisk完成加载根文件系统的操作)

rootfs -->

kennel能识别真正根文件系统rootfs,

switchroot -->

并且做根切换switchroot

/sbin/init -->

运行真正/sbin/init

(/etc/inittab, /etc/init/*.conf) -->

 根据配置文件(Centos6为例(/etc/inittab, /etc/init/*.conf)给出的设定

设定默认运行级别 -->

 

系统初始化脚本 -->

 

关闭或启动对应级别下的服务 -->

 启动终端

 

GRUB(Boot Loader):      

 

加载用户所选择的的内核,某个磁盘某个分区某个文件(关键)

 

grub: GRand Unified Bootloader

grub 0.x: grub legacy

grub 1.x: grub2

 

grub legacy:

stage1: mbr         安装在MBR中

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

stage2:磁盘分区(/boot/grub/)    (不但有stage还有ramdisk,即加载内核文件的原因)

 

配置文件:/boot/grub/grub.conf <-- /etc/grub.conf(链接文件)

 

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

功用:

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

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

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

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

允许传递参数给内核

可隐藏此菜单

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

为编辑菜单进行认证

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

 

一、grub如何识别设备

(hd#,#)

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

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

 

(hd0,0) 第一个磁盘的第一个分区

 

二、grub的命令行接口

进入grub命令行,在当前界面按C键

grub应用_第1张图片

 

1、help: 获取帮助列表

grub应用_第2张图片

 

2、help KEYWORD: 详细帮助信息

 

3、find (hd#,#)/PATH/TO/SOMEFILE:

grub>find (hd0,0)/vmlinux-2.6.32-504.e16.x86_64

通过设定根root在hd(0,0)

find后面直接可以跟文件名

 

4、root (hd#,#)    把某一个磁盘分区设定根设备

 

5、kernel /PATH/TO/KERNEL_FILE:

设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

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

6、initrd /PATH/TO/INITRAMFS_FILE:

设定为选定的内核提供额外文件的ramdisk;

 

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

 

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

grub> root (hd#,#)    #指名根设备

grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE #(ro:只读。)

grub> initrd /initramfs-VERSION-RELEASE.img

grub> boot

grub应用_第3张图片

root:设置hd00为根

kernel:设置的内核文件

initrd:补充性的ramdisk文件

grub应用_第4张图片

 

三、grub配置文件

:/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 [PARAMETERS]:启动的内核

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

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

grub应用_第5张图片

 

为grub设置保护功能;

grub-md5-crypt命令

1、通过grub-md5-crypt将密码密文设置

 

2、编辑grub配置文件

[root@localhost~]# vim /etc/grub.conf

grub应用_第6张图片

 

启用第一个内核

grub应用_第7张图片

按E编辑

grub应用_第8张图片

主界面

grub应用_第9张图片

 

启用第二个内核

grub应用_第10张图片

输入密码

grub应用_第11张图片

正常启动

grub应用_第12张图片

 

进入单用户模式:

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

(2) 在选定的kernel后附加

1, s, S或single都可以;

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

 

四、安装grub:

(1) grub-install   

完整安装(1阶段2阶段都安装,会找/boot/grub)

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

 

注意:--root-directory=/mnt : 这个位置必须指定为boot目录所在的父目录,grub会自行在父目录中找到boot目录,然后把grub程序安装到对应的目录中,一般情况在挂载新预备安装gurb的硬盘时,需要在文件系统上建立一个boot目录,再把对应的磁盘挂到boot目录中,这样grub才会找到boot目录,在下面建立所需的文件,如果挂载时不创建boot目录,那和以grub会在目录下创建boot目录,启动时需要将kernel和initrd的位置就应该为/boot/vmliunz格式

 

(2) grub分步骤安装

grub> root (hd#,#)

grub> setup (hd#,#)

 

(3)需要安装 grub 的情况:

1.给第二块硬盘装grub

2.给没有安装grub的系统安装(系统可能通过U盘或者光盘的grub启动)

3.双系统。(先装windows,在装linux)windows坏了重装了windows就会linux没了

 

五、练习

1、新加硬盘,提供直接单独运行bash系统;

(1)创建分区、格式化分区、使用分区

grub应用_第13张图片

grub应用_第14张图片

grub应用_第15张图片

grub应用_第16张图片

grub应用_第17张图片

 

(2)创建/boot目录以及他的相关配置文件等

grub应用_第18张图片

grub应用_第19张图片

修改grub.conf 配置文件

 

(3)创建/sysroot/ 系统根目录,以及他的所需必要文件夹

grub应用_第20张图片

 

(4)复制/bin/bash 到/sysroot/bin下

grub应用_第21张图片

 

(5)访问

1.通过channge root登录

grub应用_第22张图片

2.通过创建的硬盘使用bash

如果需要跑起来,需要添加两个指令

Kernel /vmlinux ro root=/dev/sda3 selinux=0 init=/bin/bash

grub应用_第23张图片

登录虚拟机

grub应用_第24张图片

grub应用_第25张图片

grub应用_第26张图片

grub应用_第27张图片

grub应用_第28张图片

 

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

 

dd命令:convert and copy a file

用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

bs=#:block size, 复制单元大小;

count=#:复制多少个bs;

 

磁盘拷贝:

dd if=/dev/sda of=/dev/sdb

 

备份MBR

dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1

 

破坏MBR中的bootloader:

dd if=/dev/zero of=/dev/sda bs=256 count=1

 

给备机装grub

备份以及破坏grub,重启就坏了

grub应用_第29张图片

(1)第一种恢复方式,直接安装grub

grub应用_第30张图片

(2)第二种方式,通过直接修改grub

指名设备有grub目录,必须先有stage文件stage1 stage2 不然不成功

grub应用_第31张图片

 

①通过光盘进入紧急救援模式

grub应用_第32张图片

 

②Rescure install system 救援已装系统

grub应用_第33张图片

按ESC 然后输入linux rescure(效果是一样的)

grub应用_第34张图片

 

grub应用_第35张图片

紧急救援模式会找一找是有否装操作系统

如果找到,会将根挂载到紧急救援模式的linux的/mnt/sysimage下 ,

可以到这个目录下找到所有文件

grub应用_第36张图片

grub应用_第37张图片

grub应用_第38张图片

六、Linux kernel

1、ldd命令:所需要的依赖关系

  ldd命令:

                - print shared library dependencies

                ldd [OPTION]... FILE...

grub应用_第39张图片

 

2、内核设计体系:单内核、微内核

Linux:单内核设计,但充分借鉴了微内核体系的设计的优点;为内核引入了模块化机制;

 

(1)内核的组成部分:

kernel:内核核心,一般为bzImage,通常位于/boot目录,名称为vmlinuz-VERSION-release;

kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/

 

内核模块与内核核心版本一定要严格匹配;

 

[   ]:N                       不编译此功能

[M]:Module         编译成模块,编译时再用到,需要装载

[*]:Y,编译进内核核心,内核在功能在

 

内核:动态装载和卸载;

 

ramdisk:辅助性文件,并非必须,这取决于内核是否能直接驱动rootfs所在的设备;

目标设备驱动,例如SCSI设备的驱动;

逻辑设备驱动,例如LVM设备的驱动;

文件系统,例如xfs文件系统;

 

ramdisk:是一个简装版的根文件系统;

 

3、内核信息获取

uname命令

- print system information

 

格式:uname [OPTION]...

-r:内核的release号

-n:主机名

-a:所有信息

文件:/boot/vmlinuz-VERSION-release

grub应用_第40张图片

 

4、模块信息获取和管理

(1)lsmod命令:查看所有系统被装载的模块

- Show the status of modules in the Linux Kernel

 

显示的内核来自于/proc/modules

grub应用_第41张图片

 

(2)modinfo命令:

- Show information about a Linux Kernel module

显示一个linux 单个模块文件详细信息

其通过/lib/modules/[KERNEL-VERSION]/modules/下的所有文件进行分析并显示的,默认情况下在内核modules编译安装的时候,会在其目录下生成所有modules的依赖关系等,建立对应的索引信息

modinfo [-F field] [-k kernel] [modulename|filename...]

-F field: 仅显示指定字段的信息;

-n:显示文件路径;

grub应用_第42张图片

 

(3)modprobe命令:

- Add and remove modules from the Linux Kernel

模块动态装载和卸载

 

格式:modprobe  [-r]  module_name

模块的动态装载:modprobe  module_name

动态卸载:modprobe  -r  module_name

grub应用_第43张图片

 

(4)depmod命令:

- Generate modules.dep and map files.

 

内核模块依赖关系文件的生成工具;

 

模块的装载和卸载的另一组命令:

insmod命令:装载

insmod  [filename]  [module options...]

filename:模块文件的文件路径;

 

rmmod命令:卸载

rmmod  [module_name]

 

5、randisk文件的管理

(1) mkinitrd命令

为当前使用中的内核重新制作ramdisk文件:

# mkinitrd [OPTION...] []

--with=:除了默认的模块之外需要装载至initramfs中的模块;

--preload=:initramfs所提供的模块需要预先装载的模块;

 

示例: ~]# mkinitrd  /boot/initramfs-$(uname -r).img   $(uname -r)

grub应用_第44张图片

grub应用_第45张图片

 

(2) dracut命令

 - low-level tool for generating an initramfs image

# dracut [OPTION...] [ []]

 

示例: ~]# dracut /boot/initramfs-$(uname -r).img  $(uname -r)

 

6、内核信息输出的伪文件系统:

/proc:内核状态和统计信息的输出接口;同时,还提供一个配置接口,/proc/sys;

参数:

只读:信息输出;例如/proc/#/*

可写:可接受用户指定一个“新值”来实现对内核某功能或特性的配置;/proc/sys/

 

/proc/sys:

net/ipv4/ip_forward  相当于  net.ipv4.ip_forward

 

内核参数的修改命令

(1) sysctl命令

专用于查看或设定/proc/sys目录下参数的值;

sysctl [options]  [variable[=value]]

查看

# sysctl  -a

# sysctl  variable                

修改其值

# sysctl  -w  variable=value

 

(2) 文件系统命令(cat, echo)

查看:

# cat  /proc/sys/PATH/TO/SOME_KERNEL_FILE

设定:

# echo  "VALUE"  > /proc/sys/PATH/TO/SOME_KERNEL_FILE

注意:上述两种方式的设定仅当前运行内核有效;一旦重启参数会丢失

 

(3) 配置文件:/etc/sysctl.conf,  /etc/sysctl.d/*.conf

立即生效的方式:sysctl  -p  [/PATH/TO/CONFIG_FILE]

 

(4)内核参数:

net.ipv4.ip_forward:核心转发;

vm.drop_caches:手动回收内存(0,1, 2)

kernel.hostname:主机名;

net.ipv4.icmp_echo_ignore_all:忽略所有ping操作;

 

 

/sys目录:

 

sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的可设置参数;对此些参数的修改,即可定制硬件设备工作特性;

 

udev:通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件;udev是用户空间程序;专用工具:devadmin, hotplug;

 

udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/目录下,以及/usr/lib/udev/rules.d/目录下;

你可能感兴趣的:(grub应用)