linux grub 引导启动过程详解
linux开机如何进入grub命令行模式,并通过grub命令进入系统
linux开机如何进⼊grub命令⾏模式,并通过grub命令进⼊系统今天突然想了解⼀下grub的⼯作模式,于是想着,开机的时候进⼊grub命令⾏模式看看grub都有哪些功能。
⼀、进⼊grub命令⾏1、开机启动后在grub引导弹出需要进⼊的系统界⾯时,按c键直接进⼊命令⾏模式,也可按 e 建进⼊编辑引导参数界⾯,根据提⽰按 ctrl-c 或者 F2 进⼊命令⾏。
2、如果开机时不显⽰引导菜单,⽽是直接进⼊系统,则需要在系统启动前按住shift 键,在菜单中选择发⾏版条⽬后按e键进⼊。
3、根据提⽰按 ctrl-c 或者 F2 进⼊命令⾏。
⼆、从grub命令⾏进⼊系统1. ⾸先利⽤ls命令,找到Ubuntu安装在哪个磁盘分区;⽐如输⼊ls后我的机器列出的磁盘分区信息如下:(hd0),(hd1),(hd1,gpt3),(hd1,gpt2),(hd1,gpt1)查找包含grub.cfg⽂件的分区假定通过 ls (hd1,gpt2)/boot/grub 发现了grub.cfg⽂件,则表明Linux安装在这个分区2. 找到Linux的/boot分区,以及/根分区所在的磁盘位置输⼊ cat (hd0,gpt2)/etc/fstab会输出类似下⾯的信息# <file system> <mount point> <type> <options> <dump> <pass>3. 指定Linux内核,及/所在分区grub> linux /boot/vmlinuz-4.8.0-36-generic ro text root=/dev/sda24. initrd命令指定initrd⽂件grub> initrd /boot/initrd.img-4.8.0-36-generic5. boot引导系统,结束grub> boot。
grub2 原理
grub2 原理全文共四篇示例,供读者参考第一篇示例:Grub2是一款广泛应用于Linux操作系统的引导管理器,其设计的初衷是为了解决引导多个操作系统的问题。
Grub2的设计极具灵活性和可扩展性,使得它成为目前最流行的引导管理器之一。
Grub2的工作原理十分复杂,但可以简单地分为几个主要步骤:第一步是启动引导加载程序。
当计算机启动时,BIOS会加载Grub2引导加载程序到内存中,并执行引导加载程序。
引导加载程序的主要功能是在系统启动时向用户提供一个选择菜单,让用户选择要启动的操作系统。
第二步是加载内核。
一旦用户选择了要启动的操作系统,Grub2会加载该操作系统的内核文件到内存中。
内核文件包含了操作系统的核心功能,如进程管理、文件系统等。
第三步是加载初始化RAM磁盘(initrd)。
在加载内核之后,Grub2会加载initrd文件到内存中。
initrd是一个临时的文件系统,用于初始化硬件设备和加载驱动程序,以便系统能够顺利启动。
第四步是启动操作系统。
Grub2会将控制权交给内核,由内核初始化系统并启动用户空间进程,最终启动操作系统。
Grub2的设计具有许多优点,例如支持多种文件系统和操作系统,能够通过脚本和配置文件自定义启动选项,支持密码保护和图形界面等。
Grub2还支持在启动时对引导选项进行编辑,方便用户在系统启动时进行调试和配置。
Grub2也存在一些缺点,例如在配置文件中出现错误可能导致系统无法启动,引导加载程序的体积相对较大,可能会增加系统启动时间等。
在使用Grub2时,用户需要仔细阅读文档并谨慎配置,以避免出现问题。
Grub2是一款功能强大且灵活的引导管理器,能够帮助用户管理多个操作系统的启动过程。
它的工作原理虽然复杂,但通过对其原理和配置文件的深入了解,用户可以充分利用其强大的功能,提高系统的稳定性和性能。
第二篇示例:Grub2是一个多重引导加载程序,常用于Linux系统,负责加载操作系统。
arm版本linux系统的启动流程
arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
Linux启动过程详解_MBR和GRUB概述
MBR和GRUB概述Linux 的启动流程目前比较流行的方式主要是以下步骤:1、引导器(例如 GRUB)启动;2、内核启动;3、系统进程启动与配置。
本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。
常见的目录结构(以 CentOS 5.3 为例):/boot|-- System.map-2.6.18-128.el5|-- System.map-2.6.18-128.el5xen|-- config-2.6.18-128.el5|-- config-2.6.18-128.el5xen|-- initrd-2.6.18-128.el5.img|-- initrd-2.6.18-128.el5xen.img|-- lost+found|-- memtest86+-1.65|-- message|-- symvers-2.6.18-128.el5.gz|-- symvers-2.6.18-128.el5xen.gz|-- vmlinuz-2.6.18-128.el5|-- vmlinuz-2.6.18-128.el5xen|-- xen-syms-2.6.18-128.el5|-- xen.gz-2.6.18-128.el5`-- grub|-- device.map|-- e2fs_stage1_5|-- fat_stage1_5|-- ffs_stage1_5|-- grub.conf|-- iso9660_stage1_5|-- jfs_stage1_5|-- menu.lst -> ./grub.conf|-- minix_stage1_5|-- reiserfs_stage1_5|-- splash.xpm.gz|-- stage1|-- stage2|-- ufs2_stage1_5|-- vstafs_stage1_5`-- xfs_stage1_5图一: CentOS 5.3 的 /boot 目录目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。
grub启动流程及原理
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
-rw-r--r-- 1 root root 8904 2010-10-23 xfs_stage1_5
[cent@localhost ~]$
现在我们把Grub再安装一次,安装在MBR(MBR广义可指主引导扇区):
[cent@localhost ~]$ sudo grub
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
手动通过grub命令行启动Linux或者win系统
手动通过grub命令行启动Linux或者win系统前些天fedora的启动菜单grub.conf丢失,无法进入系统。
不过,grub启动管理器还好好的,只好通过grub命令行来手动引导启动系统了。
在“从硬盘安装fedora 8 ”中曾经稍微提到过,grub是一个多系统的启动管理器,不但有linux版本的grub,也有windows版本的grub。
上次从硬盘安装系统用的就是windows版本的grub。
可以说,grub是一个非常强大的多系统启动管理器,具有多重系统引导,交互式操作,可设置grub启动密码,可映射硬盘,可以定制开机画面等等特点。
通过命令行启动系统就是交互式操作的一个应用,至于其它应用,这里就不再一一列出。
想要深入了解它的话,可以看一下grub的手册:/main/doc/grub/grubmanual/index.html 。
说来惭愧,我还没完全看过。
哈哈。
闲话少说,先把通过命令行启动系统的过程列出来。
为了解释方便,特标上行号:1root (hd0,2)2kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet 3initrd /initrd-2.6.26.5-28.fc8.img4boot怎么样?linux的启动命令行是不是很简洁啊?下面就一一解释这几命令。
第1行命令:指定/boot所在的分区。
要是不知道自己的/boot分区在哪里,没关系,先输入root (hd0,然后按Tab键,它会显示可能的分区,然后根据分区类型判断/boot分区。
我就是这么做的......所以Tab键是linux里很好用的一个键。
这里指定/boot分区并不是必须的,在这里省略的话要在kernel 以及initrd中指定,即:kernel (hd0,2)/vmlinuz-2.6......和initrd (hd0,2)/initrd-2.6......关于"hd0,2”,是指第一块硬盘的第三个分区,这是一个主分区。
GRUB2及启动过程详解
GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (2)3. GRUB2 的bootstrap image文件 (3)3.1. boot.img (3)3.2. diskboot.img (4)3.3. kernel.img (4)3.4. core.img (4)3.5. *.mod (4)4. 对比GRUB Legacy (5)4.1. stage1 (5)4.2. *_stage1_5 (5)4.3. stage2 (5)5. grub2-mkimage定制core.img (6)6. GRUB2安装 (7)6.1. Linux是怎么命名设备(/dev/sda) (7)6.2. MBR(Master Boot Record) (8)6.3. MBR分区表DPT(Disk Partition Table) (10)6.4. LBA and CHS (14)6.4.1. CHS(cylinders-heads-sectors) (14)6.4.2. LBA(Logical Block Address) (14)6.5. boot.img和core.img安装 (15)6.6. 硬盘总结 (18)7. 启动过程 (19)7.1. BIOS (19)7.2. GRUB2中boot.img (20)7.2.1. Step1无条件跳转 (20)7.2.2. Step2 初始化 (20)7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)7.2.6. Step6 执行core.img第一条语句 (27)7.2.7. Step7 boot.img总结 (27)7.3. GRUB2中core.img (28)7.3.1. diskboot.img (28)7.3.2. GRUB2 core Startup (34)7.3.3. GRUB主函数即GRUB主要功能 (37)7.3.4. 加载Linux Kernel (38)7.4. Linux kernel (47)8. 结束语 (48)9. 参考文献 (48)1.概述计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):现在的Boot Loader有很多类型,大致如下:1.对Linux来说GRUB2占据了统治地位2.对Windows来说Bootmgr/BCD占据了统治地位3.对Apple系统缺省的是BootX作为一名计算机工程师,了解Boot Loader的原理是很重要。
GRUB引导下进Linux单用户模式的三种方式,修改root密码
GRUB引导下进Linux单用户模式的三种方式,修改root密码首先,启动电脑,屏幕出现是GRUB的提示:‘e’ 在booting前编辑启动命令行‘a’ 在booting前编辑kernel的参数‘c’进入grub命令行由此按‘e’、a’、‘c’三个不同的键,进入三种不同的操作:1.快速法:选择Fedora Core (2.6.9-1.667)菜单,按a键:grub append>,versace handbags;ro root=/dev/VolGroup00/LogVol00 rhgb quiet修改成:grub append>ro root=/dev/VolGroup00/LogVol00 single quiet按ENTER键完成修改并booting进入Linux单用户模式sh-3.00# passwd这时就会让你输入新的root密码,输入后,还出来sh-3.00#就不用管了,好像一会就能进入下面的重启的,又输了下reboot ,重启生效。
2.简便法:选择Fedora Core (2.6.9-1.667)菜单,按e键:root (hd0,2)kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 rhgb quietinitrd /initrd-2.6.9-1.667.img选择kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 rhgb quiet命令行按e键:grub edit>kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 rhgb quiet修改成:grub edit>kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 single quiet按ENTER键完成修改按b键booting进入Linux单用户模式sh-3.00#3.手动法:按c键进入grub命令行:(在grub命令行下按TAB键可得到grub命令帮助与grub命令的可能选项)grub>fstest (grub>filesystem tracing is now ongrub>root (hd0,2) ((指定保存有Linux 内核的分区为第一个硬盘的第三个分区)grub>filesystem type is ext2fs,partition type 0x83grub>kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 single quiet ((指定内核文件为/boot/vmlinuz-2.6.9-1.667,内核参数为ro―readonly, 根分区为/dev/VolGroup00/LogVol00,rhgb―图形方式启动,quiet―不输出启动信息)grub>initrd /initrd-2.6.9-1.667.img ((在内核启动前加载支持系统硬件设备的内核模块---initrd镜像文件--/boot/initrd-2.6.9-1.667.img,并初始化RAM disk)grub>boot (如果系统的配置与脚本文件正确,以上三种方式在Booting command-list中都会出现:remounting root filesystem in read-write mode:[OK]表示此时linux单用户模式下的根文件系统处于可读可写状态。
Linux系统引导过程及排除启动故障
Linux系统引导过程及排除启动故障⼀、Linux操作系统引导过程⼆、系统初始化进程1、init进程2、Systemd3、Systemd单元类型三、排除启动类故障【1】、修复MBR扇区故障(含实验过程)【2】、修复GRUB引导故障●⽅法⼆:进⼊急救模式,恢复GRUB引导程序(与MBR 引导扇区类似)●⽅法三:引导界⾯进⼊急救模式,重建GRUB菜单配置⽂件⽅案三实验四、遗忘root⽤户的密码实验过程⼀、Linux操作系统引导过程1.开机⾃检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进⾏初步检测,检测成功后根据预设的启动顺序移交系统控制权,⼤多时候会移交给本机硬盘。
总结:检测出第⼀个能够引导系统的设备,⽐如硬盘或者光驱2.MBR 引导当从本机硬盘中启动系统时,⾸先根据硬盘第⼀个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导⽂件的分区;或者直接根据MBR 记录中的引导信息调⽤启动菜单(如 GRUB)。
总结:运⾏放在MBR扇区⾥的启动GRUB引导程序3.GRUB 菜单对于Linux操作系统来说,GRUB(统⼀启动加载器)是使⽤最为⼴泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显⽰启动菜单给⽤户选择,并根据所选项(或采⽤默认值)加载Linux内核⽂件,然后将系统控制权转交给内核。
CentOS 7 采⽤的是 GRUB2 启动引导器。
总结:GRUB引导程序通过读取GRUB配置⽂件/boot/grub2/grub.cfg,来获取内核和镜像⽂件系统的设置和路径位置4.加载 Linux 内核Linux内核是⼀个预先编译好的特殊⼆进制⽂件,介于各种硬件资源与系统程序之间,负责资源分配与调度。
内核接过系统控制权以后,将完全掌控整个Linux操作系统的运⾏过程。
CentOS 7系统中,默认的内核⽂件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。
linux引导之grub2
linux引导之grub2先了解下什么是Bootloader以下是百度百科释意在嵌⼊式操作系统中,BootLoader是在内核运⾏之前运⾏。
可以初始化硬件设备、建⽴内存空间映射图,从⽽将系统的软硬件环境带到⼀个合适状态,以便为最终调⽤准备好正确的环境。
在中,通常并没有像BIOS那样的程序(注,有的嵌⼊式CPU也会内嵌⼀段短⼩的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
在⼀个基于ARM7TDMI core的中,系统在上电或复位时通常都从地址0x00000000处开始执⾏,⽽在这个地址处安排的通常就是系统的BootLoader程序Bootloader不属于操作系统,⼀般采⽤汇编语⾔和C语⾔开发。
需要针对特定的硬件平台编写。
在移植过程时,⾸先为开发板移植Bootloader。
Bootloader不但依赖于CPU的体系架构,⽽且依赖于嵌⼊式系统板级设备的配置。
3.Bootloader的操作模式⾃启动模式:在这种模式下,Bootloader从⽬标机上的某个固态存储设备上将操作系统加载到RAM中运⾏,整个过程并没有⽤户的介⼊。
交互模式:在这种模式下,⽬标机上的Bootloader将通过串⼝或⽹络等通信⼿段从开发板上下载内核映射和根⽂件系统映像等待RAM中。
可以被Bootloader写到⽬标机上的固态存储媒介质中,或者直接进⼊系统的引导。
也可以通过串⼝接收⽤户的指令。
⼆、Bootloader的基本功能初始化相关硬件把Bootloader⾃搬移到内存中执⾏⽤户指令加载并执⾏内核⼀个嵌⼊式系统从软件的⾓度看通常可以分为三个层次: 1、引导加载程序。
包括固化在固件(firmware)中的Booter代码(可选),和Loader两⼤部分。
2、操作系统。
特定于嵌⼊式板⼦的定制内核以及内核的启动参数;以及在内核和应⽤程序之间可能还会包括⼀个嵌⼊式图形⽤户界⾯,常⽤的嵌⼊式GUI有:MicroWindows和MiniGUI等。
grub启动过程
第二阶段:
BIOS通过下面两种方法之一来传递引导记录:
第一, 将控制权传递给initial program loader(IPL),该程序安装在磁盘主引导记录(MBR)中
/boot/grub/stage2 /etc/rc.d/rc<#>.d
/etc/rc.d/init.d/*
stage 1:MBR(512 字节,0头0道1扇区),前446字节存放的是 stage1,后面存放硬盘分区表信息,BIOS将stag1载入内存中0x7c00处并跳转执行。stage1(/stage1/start.S)的任务非常单纯,仅仅是将硬盘0头0道2扇区读入内存。0头0道2扇区内容是源代码中的/stage2/start.S,编译后512字节,它是stage2或者stage1_5的入口。
BIOS启动引导阶段 GRUB启动引导阶段 内核阶段 /init/sysinit阶段
==================================================================================================
读取/boot/grub.conf文件并显示启动菜单;
装载所选的kernel和initrd文件到内存中
第三阶段:内核阶段:
运行内核启动参数;
解压initrd文件并挂载initd文件系统,装载必须的驱动;
start.S的主要功能是将stage2或stage1_5从硬盘载入内存,如果是stage2,则载入0x820处;如果是 stage1_5,则载入0x2200处。
linux启动顺序讲解
linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。
GRUB启动引导器完全教程
GRUB启动引导器完全教程GRUB(GNU GRand Unified Bootloader)是一种开源的引导程序,常用于启动多个操作系统的选择菜单。
使用GRUB启动引导器可以实现多操作系统之间的切换,提高系统的灵活性。
下面是一个完整的GRUB启动引导器教程,包括安装、配置和使用指南。
一.安装GRUB1. 首先,确保已经安装了GRUB的依赖项。
在大多数Linux发行版中,可以使用以下命令来安装依赖项:`sudo apt-get install grub``sudo dnf install grub``sudo yum install grub`2. 安装GRUB到硬盘的主引导记录(Master Boot Record,MBR)。
在大多数Linux发行版中,可以使用以下命令:`sudo grub-install /dev/sda`上述命令会将GRUB安装到硬盘的MBR,并在启动时加载它。
二.配置GRUB`sudo nano /etc/default/grub`2.修改配置文件以满足您的需求。
例如,您可以更改默认选择的操作系统、超时时间、背景图像等。
确保在修改文件后保存更改。
3. 更新GRUB的配置文件。
在大多数Linux发行版中,可以使用以下命令:`sudo update-grub`注意:根据不同的发行版,可能需要使用不同的命令来更新GRUB的配置文件。
请查阅您所使用发行版的文档以获取准确的命令。
三.使用GRUB1.重新启动计算机。
在启动时,您将看到GRUB菜单,其中列出了可用的操作系统。
您可以使用上下方向键选择要启动的操作系统。
2. 如果想要强制进入GRUB菜单,可以按住Shift键(在大多数系统中)或Esc键(在一些系统中)。
4.如果您希望更改GRUB菜单的外观,可以更改配置文件中的背景图片、文本颜色等。
您可以在互联网上找到许多可用的GRUB主题,并按照其说明进行安装和配置。
总结:GRUB启动引导器是一种强大的工具,可以让您轻松地选择并启动不同的操作系统。
中标麒麟Linux服务器操作系统启动管理
中标麒麟linux服务器操作系统启动管理技术创新变革未来中标麒麟linux服务器操作系统培训系列?中标麒麟linux服务器操作系统的基本启动过程?中标麒麟linux服务器操作系统启动过程分析?linux系统过程概述
中标麒麟Linux服务器操作系统培训系列
中标麒麟Linux服务器操作系统启动管理
技术创新,变革未来
•/etc/inittab的诧法结构:‖id : runlevel : action : command‖; • 设定系统默认启动运行级别; • 设定或者自定义打开终端以及开启的方法;
系统启动过程分析
• 第四阶段:Sys V Init初始化: –系统进入挃定运行级别并启动脚本、开启终端和图形 界 面的丼例:
• 启用/禁用服务: –# chkconfig --list –# chkconfig --level runlevel service action –# setup
• 启动和关闭服务: –# service servicename start | stop | status | reload… –# /etc/init.d/servicename start | stop | status | reload…
Linux操作系统启动流程图文详解
Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。
上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。
加载完BIOS信息,计算机将根据顺序进⾏启动。
2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。
被复制到物理内存的内容是Boot Loader,然后进⾏引导。
3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。
4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。
系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。
5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。
简要分析linux系统的启动过程
简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。
2)读取MBR,进⾏MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。
7)启动内核模块,执⾏不同级别的脚本程序。
8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。
linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。
[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。
Linux与Windows10用grub引导教程
Linux与Windows10⽤grub引导教程前⾔去年暑假的时候,写了⼀篇如何装 Linux 和 Windows 10 双系统的⽂章发在了简书上,我写这篇⽂章的原因是当初装双系统确实是折腾了许久,⽹上也找不到⼀篇详尽的教程。
由于去年对于写教程还不是熟练,⽽这⼀年多的使⽤过程也遇到了⼀些问题,所以就准备「Refactoring」这篇⽂章。
EFI 分区在教程正式开始之前,先花⼀点时间说明 EFI 分区的组成和作⽤。
⾸先,在你装了 Windows 之后,Windows 在装机过程中会将硬盘划分出⼀个约 100m ⼤⼩的分区,称为 EFI 分区这个分区就是起引导作⽤的。
在资源管理器中是看不到的这个分区的,可以在磁盘管理中看到,管理则需要借助。
便于说明,在装好了 Linux 之后,我将 EFI 挂载⾄boot 分区截图:可以看到,该分区包含 3 个⽂件夹(如果你没有装 Linux 的话,就只有两个),分别是 Boot、Microsoft 和 Manjaro,其中 Boot ⽂件夹就是UEFI 引导所必需的⽂件。
我们继续打开Microsoft/Boot⽂件夹:这些⽂件就是启动 Windows 10 所必需的,包含了语⾔包、字体等,BCD 包含了 Windows 引导开始以后的信息。
其中,bootmgfw.efi 是Windows 默认引导⽂件。
1. EFI/Boot/bootx64.efi2. EFI/Microsoft/Boot/bootmgfw.efi以上是采⽤ UEFI 启动 Windows 10 的⽂件结构,也就是说,当你按下开机按钮的时候,⾸先 UEFI 找到 EFI 分区的 Boot ⽂件夹,然后加载bootx64.efi⽂件,读取⽂件信息,找到EFI/Microsoft/Boot/bootmgfw.efi,按照bootmgfw.efi的要求,加载所需的启动信息,启动 Windows 10。
准备⼯作在正式装系统之前,我们还需要做⼀些准备⼯作:关闭 Windows 的快速启动这个功能的作⽤是在于关机的时候不完全断电,类似将系统处于「休眠」状态,这样可以让开机更加迅速。
linux启动流程
centos6启动流程•硬件启动阶段o Power on打开电源o BIOS▪POST: power on self test开机自检•初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等▪确定启动设备•启动设备:硬盘、网络、U盘、光盘•如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节•控制权交给bootloadero MBR▪MBR512字节• 1.446字节bootloadero启动加载器bootloader▪windows: ntloader仅仅启动os▪GRUB: GRand Unified Bootloader,CentOS 6 GRUB 0.97: GRUBLegacy, CentOS 7 以后使用GRUB 2.02• 2.64字节分区信息o16字节x4 partitions• 3.55aa标志位表示分区是否有效•grub启动阶段o stage1▪ 1.446字节bootloader•这是二进制的0101,写在MBR扇区的前446字节。
o单纯为了找到1.5阶段生成的bootloader上o stage1.5▪第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统来读取config文件加载内核。
MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfsext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader▪ 1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux grub 引导启动过程详解2008-01-08 17:18这几天看了很多文档,算是对linux的启动过程有了比较细致的了解.网上有很多文章谈到这方面的内容,但总觉得没有一篇完全的解析linux启动的细节,下面是我小弟在学习的过程中总结出来的一些东东.这个是完整的linux启动过程,不涉及内核,但是我觉得比较详细哦.(由于本人比较懒,这一段是从网上抄的)机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。
如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。
装载操作系统的这个程序就是boot loader.linux里面的boot loader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。
那么启动的时候grub是如何被载入的呢grub有几个重要的文件,stage1,stage2,有的时候需要stage1.5.这些文件一般都在/boot/grub文件夹下面.grub被载入通常包括以下几个步骤:1. 装载基本的引导装载程序(stage1),stage1很小,网上说是512字节,但是在我的系统上用du -b /boot/grub/stage1 显示的是1024个字节,不知道是不是grub版本不同的缘故还是我理解有误.stage1通常位于主引导扇区里面,对于硬盘就是MBR了,stage1的主要功能就是装载第二引导程序(stage2).这主要是归结于在主引导扇区中没有足够的空间用于其他东西了,我用的是grub 0.93,stage2文件的大小是107520 bit.2. 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出更高级的功能,以允许用户装载入一个特定的操作系统。
在GRUB中,这步是让用户显示一个菜单或是输入命令。
由于stage2很大,所以它一般位于文件系统之中(通常是boot所在的根分区).上面还提到了stage1.5这个文件,它的作用是什么呢你到/boot/grub目录下看看,fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的stage1.5.但是对于grub 0.93好像stage1.5并不是很重要,因为我试过了,在没有stage1.5 的情况下, 我把stage1安装在软盘的引导扇区内,然后把stage2放在格式化成ext2或者fat格式的软盘内,启动的时候照常引导,并不需要e2fs_stage_1.5或者fat_stage_1.5.下面是我的试验:#mkfs.ext2 /dev/fd0#mount -t ext2 /dev/fd0 /mnt/floppy#cd /mnt/floppy#mkdir boot#cd boot#mkdir grub (以上三步可用mkdir -p boot/grub命令完成)#cd grub#cp /boot/grub/{stage1,stage2,grub.conf} ./#cd; umount /mnt/floppy以上几步把软盘格式化成ext2格式,然后把stage1,stage2,grub.conf这几个启动的时候必须的文件拷贝到软盘的指定目录下.下面安装grub到软盘上.#grub (进入grub环境)grub> install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2p (fd0)/boot/grub/grub.conf以上这条命令也可以用下面的两句代替grub>root (fd0) #grub的根目录所在的分区grub>setup (fd0) #这一步就相当于上面的install命令我在这里解释一下install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2 p(fd0)/boot/grub/grub.conf 这条命令.install告诉GRUB将(fd0)/boot/grub/grub/stage1安装到软驱的引导扇区(fd0).(fd0)/boot/grub/stage2告诉grub stage2这个文件所在的位置.p 参数后面跟着(fd0)/boot/grub/grub.conf 告诉grub的配置文件所在的位置.好了,让BIOS从软驱启动,试一下,没有e2fs_stage_1.5文件照样能够进入系统.其实这就是一个小小的启动盘啊.(了解了grub的运行原理,就简单多了^_^)3. 现在我们已经到grub的开机选单这一步了,接下来grub所需要做的就是装载在一个特定分区上的操作系统,如linux内核。
一旦GRUB从它的命令行或者配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统.由于篇幅有限,避免冗长,grub的命令我就不多说了,网上很有多的资料,一个典型完整的引导linux的命令如下:title 51baseroot(hd0,0)kernel /bzImage ro root=/dev/ram0initrd /initrd.img这里有必要注意一下几个问题:(1)grub的磁盘以及分区的命名方式和linux有所区别,第一个磁盘是从0开始,第一个分区也是从0开始.譬如第一个硬盘的第5分区在linux下面是/dev/hda5 ,而在grub里面是(hd0,4).再如/dev/fd0在grub里面是(fd0,0).(最后一句如有错误望提醒)(2)不管是IDE硬盘hda,hdb还是SCSI硬盘sda,sdb在grub里面都是以hd方式命名. 譬如虚拟机里面的/dev/sda2在grub里面是(hd0,1),再如/dev/hdb7在grub里面以(hd1,6) 命名.(3)要搞清楚上面两个root的关系,root (hd0,0)中的root是grub命令,它用来指定boot所在的分区作为grub的根目录.而root=/dev/ram0是kernel的参数,它告诉操作系统内核加载完毕之后,真实的文件系统所在的设备.要注意grub的根目录和文件系统的根目录的区别.再回到上面的几行命令.kernel命令用来指定内核所在的位置,"/"代表(hd0,0),也就是grub的根目录initrd命令用来指定初始化ram的img文件所在位置.grub载入内核bzImage并展开到指定位置(应该是0x100000这个地方),同时载入initrd.img到内存(不知道是什么地方).ps:grub的任务至此就结束了,下面grub将机器的控制权转交给操作系统(linux).操作系统接到控制权之后,开始start_kernel,接着内核将initrd.img展开到/dev/ram0 为临时根文件系统,执行里面的linuxrc文件.P.这里有必要说一下initrd的作用特别是它里面的核心文件linuxrc的作用.initrd是inital ram disk的宿写.当存在initrd的时候,机器启动的过程大概是以下几个步骤(当initrd这一行用noinitrd 命令代替后,就不存在initrd了)1)boot loader(grub)加载内核和initrd.img2)内核将压缩的initrd.img解压成正常的ram disk并且释放initrd所占的内存空间3)initrd作为根目录以读写方式被挂载4)initrd里面的文件linuxrc被执行5)linuxrc挂载新的文件系统6)linuxrc使用pivot_root系统调用指定新的根目录并将现有的根目录place到指定位置.7)在新的文件系统下正式init8)initrd被卸载.为了便于理解,我将red hat linnux9 里面的initrd-2.4.20-8.img拿出来分析一下.这其实是一个压缩了的文件,是以gz结尾的.[root@localhost root]#cp /boot/initrd-2.4.20-8.img /mnt/initrd-2.4.20-8.gz [root@localhost root]#gunzip /mnt/initrd-2.4.20-8.gz[root@localhost root]#mount -o loop /mnt/initrd-2.4.20-8 /mnt/ram//********************************* added by me *********************************//有可能出现错误:you must specify the filesystem type.这时输入命令:[root@localhost root]#file /mnt/initrd-2.4.20-8initrd-2.4.20-8:ASCii cpio archive靠!这也能挂载吗?直接使用下列命令:[root@localhost root]#cp initrd-2.4.20-8 /mnt/ram/[root@localhost root]#cd /mnt/ram[root@localhost root]#cpio -ivdm < initrd-2.4.20-8//********************************* end of added *********************************// [root@localhost ram]#lsbin dev etc lib linuxrc loopfs proc sbin sysroot[root@localhost ram]#ls bininsmod modprobe nash[root@localhost ram]#ls libBuslogic.o ext3.o jbd.o scsi_mod.o sd_mod.o[root@localhost ram]ls devconsole null ram systty tty1 tty2 tty3 tty4sbin目录是指向bin目录的一个连接,其他目录是空的.[root@localhost ram]cat linuxrc#!/bin/nash1.echo "Loading scsi_mod.o module"2.insmod /lib/scsi_mod.o3.echo "Loading sd_mod.o module"4.insmod /lib/sd_mod.o5.echo "Loading BusLogic.o module"6.insmod /lib/BusLogic.o7.echo "Loading jbd.o module"8.insmod /lib/jbd.o9.echo "Loading ext3.o module"10.insmod /lib/ext3.o11.echo Mounting /proc filesystem12.mount -t proc /proc /proc13.echo Creating block devices14.mkdevices /dev15.echo Creating root device16.mkrootdev /dev/root17.echo 0x0100 > /proc/sys/kernel/real-root-dev18.echo Mounting root filesystem19.mount -o defaults --ro -t ext3 /dev/root /sysroot20.pivot_root /sysroot /sysroot/initrd21.umount /initrd/proc上面的编号是我为了下面好说明加上去的.首先我们必须注意的是这里使用的shell是nash而不是bash,nash是专门为linuxrc可执行脚本设计的,因此你有必要看一看nash的man文档.1-10行是加载一些必要的模快.11-12行加载proc内核文件系统,13-14行利用nash内建的命令mkdevices创建块设备,mkdevices是根据/proc/partitions文件创建里面列出的所有块设备.15-16行利用nash内建的命令mkrootdev,mkrootdev使它后面的参数/dev/root成为一个块节点从而使得根分区设备被挂载,其中根分区设备由grub.conf里面的kernel命令后面所带的参数root=决定,如果root=参数没有被指定,/proc/sys/kernel/real-root-dev文件将提供根分区设备号.17行将数字256写入到后面的文件里面去.18-19行挂载根文件系统到/sysroot目录下,/dev/root里面的内容就是root=参数所指定的设备里面的内容20行调用pivot_root改变根目录所在地并place旧的根目录到指定的位置.21行卸载旧的根目录里面的proc内核文件系统.从这里面我们总结一下linuxrc的作用: (参考/usr/src/linux-2.4/Documentation/initrd.txt文档)2)/linuxrc文件决定在挂载真正的文件系统之前所需完成的事情(譬如加载必要的网络驱动或者加载ext3文件系统).3)/linuxrc加载必要的模块.4)/linuxrc挂载根文件系统5)/linuxrc调用pivot_root来改变根目录关于initrd的用途可以查考上面提到的文档,想知道linux系统是如何安装的吗那里面由答案.既然linuxrc的主要目的是加载模快用的,那如果我们的内核没有动态的模块而所需的功能都是静态编译进内核的,那么是不是可以不用linuxrc文件呢答案是可以不用,在普通的linux操作系统里面可以加入noinitrd选项以告知boot loader 不使用initrd.如果我们做网关,因为ram是我们的文件系统的载体,所以initrd 一行当然不能去掉,但是我们可以不用linuxrc文件,sysroot文件夹和initrd文件夹. 不信的话,试试看吧.好了,initrd(linuxrc)已经介绍完了.linuxrc执行完毕之后,系统就会以真正的根目录正式init.系统在/bin/或者/sbin目录下找到init程式,然后根据它的配置文件/etc/fstab进行初始化,最后调用mingetty程式启动login完成引导.ps:init这一部分网上有很多的详细资料所以我在这里并没有展开来说.。