linux启动引导过程(greb)
- 格式:doc
- 大小:36.50 KB
- 文档页数:6
Linux操作系统之一:简述Linux系统开机引导和启动过程操作系统的启动分为两个阶段:•引导boot•启动startup引导阶段开始于打开电源开关,结束于内核初始化完成和systemd 进程成功运行。
启动阶段接管了剩余工作,直到操作系统进入可操作状态。
总体来说,Linux 的开机引导和启动过程是相当容易理解,下文将分节对于不同步骤进行详细说明。
•BIOS 上电自检(POST)•引导装载程序 (GRUB2)•内核初始化•启动 systemd,其是所有进程之父。
注意,本文以 GRUB2 和 systemd 为载体讲述操作系统的开机引导和启动过程,是因为这二者是目前主流的 linux 发行版本所使用的引导装载程序和初始化软件。
当然另外一些过去使用的相关软件仍然在一些 Linux 发行版本中使用。
引导过程引导过程能以两种方式之一初始化。
•其一,如果系统处于关机状态,那么打开电源按钮将开启系统引导过程•其二,如果操作系统已经运行在一个本地用户(该用户可以是root 或其他非特权用户),那么用户可以借助图形界面或命令行界面通过编程方式发起一个重启操作,从而触发系统引导过程。
重启包括了一个关机和重新开始的操作。
BIOS 上电自检(POST)上电自检过程中其实Linux 没有什么也没做,上电自检主要由硬件的部分来完成,这对于所有操作系统都一样。
当电脑接通电源,电脑开始执行BIOS(基本输入输出系统Basic I/O System)的POST (上电自检Power On Self Test)过程。
BIOS 上电自检确认硬件的基本功能正常,然后产生一个 BIOS 中断INT 13H,该中断指向某个接入的可引导设备的引导扇区。
它所找到的包含有效的引导记录的第一个引导扇区将被装载到内存中,并且控制权也将从引导扇区转移到此段代码。
引导扇区是引导加载器真正的第一阶段。
大多数Linux 发行版本使用的引导加载器有三种:GRUB、GRUB2 和 LILO。
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。
Linux系统的启动流程可以大致分为以下几个步骤:1.开机自检(BIOS):服务器主机开机以后,将根据主板BIOS中的设置对cpu、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。
2.MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录的引导信息调用启动菜单(如GRUB)。
3.GRUB菜单:对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。
系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。
4.内核加载:内核是操作系统最基本的部分,负责管理系统的硬件和软件资源。
当GRUB将系统控制权转交给内核时,内核开始运行并加载必要的驱动程序和模块。
5.用户层init依据inittab文件设定运行等级:内核加载之后,第一个运行的程序是/sbin/init,该程序会读取/etc/inittab文件来设定系统的运行等级。
运行等级决定了系统的运行方式和提供的服务。
6.执行rc.sysinit:在设定运行等级之后,/etc/rc.d/rc.sysinit脚本被执行,用于进行系统初始化工作,如设置PATH环境变量、网络配置、分区挂载等。
7.启动内核模块和执行不同级别的脚本程序:根据不同的运行等级,系统会加载相应的内核模块,并执行不同级别的脚本程序,以启动或停止相应的服务。
8.进入系统登陆界面:最后,系统进入登录界面,用户可以输入用户名和密码进行登录,开始使用Linux系统。
以上步骤是一般的Linux系统启动流程,具体细节可能因不同的Linux发行版和配置而有所不同。
Linux启动引导流程一、启动过程:固件firmware(CMOS/BIOS) → POST 加电自检↓自举程序BootLoader(GRUB) →载入内核↓载入内核Kernel →驱动硬件↓启动进程init↓读取执行配置文件/etc/inittab二、主要步骤:1、固件(firmware)的加电自检POST CMOS/BIOS(引导介质,软硬件时钟)2、读取硬盘的第一个位置主引导记录MBR(存放自举程序bootloader)3、Linux下的常用是grub,作用是载入内核(kernel)和镜像文件加载内核4、内核做两件事情驱动硬件和启动init进程Init进程5、Init进程启动后读取/etc/inittab配置文件6、/etc/inittab是一个shell脚本完成后续的系统引导7、首先判断系统的缺省的运行级别/etc/initdefault查看运行级别级别加载脚本8、执行/etc/rd.d/rc.sysinit系统服务启动脚本不管系统在任何运行级别都会运行来进行基本服务的加载9、/etc/rc.d/rc会根据系统的运行级别运行相应的/etc/rc.d/rcN.d (N(0-6)对应运行级别) 这个目录下有两种运行脚本分别以S和K 开头的,S表示开启的服务,K表示关闭的服务服务脚本10、到username、password界面三、启动信息查询dmesg查询系统启动过程里面所有的信息最重要的是内核驱动硬件的信息,可以查看所添加的硬件是否被系统所识别日志文件/var/logBoot.log启动日志,一般是空的Messages 查看某一个服务的启动日志文件,如果某个服务启动的时候出现问题也会记录下来。
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命令来引导linux由于对linux系统的好奇,想按在机器上玩玩。
昨天忙活了一晚上,最终才把linux安装好。
但高兴的有点太早了,我还以为进linux就像进windows那么简单哪,没有想到却蹦出来一个引导命令(grub),让我引导,我一看麻木了。
一点也不会。
没有办法我实在熬不住了,就关机睡了。
今天中午,上网查资料。
把有关的命令给熟悉了一边。
不过看后挺费劲的。
试了几次还是不行。
我就没有弄了。
本打算放弃的。
没有想到下午来灵感了。
敲几个命令就进了。
这次安装让我学到了不少。
下面来主要讲一下在grub下来引导linux;其步骤如下;a 进入grub的命令模式。
b 先熟悉一下grub 的一些命令grub>helpc 熟悉一下cat命令d root指令来指定/boot所在的分区e kernel指令来指定linux的内核,及所在的分区f 用initrd命令来指定initrd文件g boot引导系统cat命令的用法cat指令是用来查看文件内容的,有时我们不知道Linux的/boot分区,以及/根分区所在的位置,要查看/etc/fstab的内容来得知,这时,我们就要用到cat (hd[0-n],y)/etc/fstab 来获得这些内容;注意要学会用tab键命令补齐的功能;grub> cat ( 按tab 键会出来hd0或hd1之类的;grub> cat (hd0, 注:输入hd0,然后再按tab键;会出来分区之类的;grub> cat (hd0,6)Possible partitions are:Partition num: 0, Filesystem type unknown, partition type 0x7Partition num: 4, Filesystem type is fat, partition type 0xbPartition num: 5, Filesystem type is reiserfs, partition type 0x83 Partition num: 6, Filesystem type is ext2fs, partition type 0x83 Partition num: 7, Filesystem type unknown, partition type 0x83Partition num: 8, Filesystem type is reiserfs, partition type 0x83 Partition num: 9, Filesystem type unknown, partition type 0x82grub> cat (hd0,6)/etc/fstab 注:比如我想查看一下 (hd0,6)/etc/fstab的内容就这样输入;LABEL=/ / ext3 defaults1 1/dev/devpts /dev/pts devpts gid=5,mode=62 0 0 0/dev/shm /dev/shm tmpfs defaults 0 0/dev/proc /proc proc defaults 0 0/dev/sys /sys sysfs defaults 0 0LABEL=SWAP-hda1 swap swap defaults 0 0/dev/hdc /media/cdrecorder auto pamconsole,ex ec,noauto,managed 0 0主要查看/etc/fstab中的内容,主要是Linux的/分区及/boot是否是独立的分区;如果没有/boot类似的行,证明/boot和Linux的/处于同一个硬盘分区;比如上面的例子中LABEL=/ 这行是极为重要的;说明Linux系统就安在标签为LABEL=/的分区中;如果您的Linux系统/boot和/没有位于同一个分区,可能cat (hd[a-n],y) 查到的是类似下面的;LABEL=/ / ext3 defaults 1 1LABEL=/boot /boot ext3 defaults 1 2root (hd[0-n,y) 指令来指定/boot所在的分区;其实这个root (hd[0,n],y)是可以省略的,如果省略了,我们要在kerenl 命令中指定;我们前面已经说过(hd[0-n],y) 硬盘分区的表示方法的用途;主要是用来指定/boot所在的分区;eg:grub> root (hd0,0)kernel 指令,用来指定Linux的内核,及/所在的分区;kernel 这个指令可能初学者有点怕,不知道内核在哪个分区,及内核文件名的全称是什么。
linux启动流程Linux启动流程。
Linux操作系统的启动流程是一个非常复杂的过程,涉及到多个环节和组件的协同工作。
在本文中,我们将介绍Linux系统的启动流程,以帮助读者更好地理解Linux系统的启动过程。
首先,当计算机开机时,BIOS(基本输入/输出系统)将被激活。
BIOS是一个位于计算机主板上的固件,其作用是初始化硬件设备,并加载引导程序。
接着,BIOS将在预定义的设备上搜索引导扇区,通常是硬盘或固态硬盘。
一旦找到引导扇区,BIOS将把控制权交给引导扇区上的引导加载程序(boot loader)。
引导加载程序的作用是加载操作系统内核,并将控制权交给内核。
在Linux系统中,最常用的引导加载程序是GRUB(GRand Unified Bootloader)。
GRUB具有丰富的功能和灵活的配置选项,可以加载多个操作系统,并支持在系统启动时进行参数设置。
一旦内核被加载,它将开始初始化系统硬件,并启动用户空间进程。
内核首先会进行一系列的自检和硬件初始化,确保系统硬件处于正常工作状态。
接着,内核将加载并挂载根文件系统,这是系统中所有其他文件系统的起点。
一旦根文件系统被挂载,内核将启动用户空间进程。
用户空间进程是系统中的所有应用程序和服务的运行环境,包括init进程和其他系统进程。
init进程是Linux系统中的第一个用户空间进程,它负责启动系统中的所有其他进程,并提供系统初始化和管理功能。
在init进程启动后,它将根据配置文件启动系统中的各种服务和应用程序。
这些配置文件通常位于/etc/init.d/目录下,包括了系统启动时需要运行的各种服务和应用程序。
init进程将按照这些配置文件的要求,逐个启动系统中的各项服务和应用程序。
最后,在所有必要的服务和应用程序都被启动后,系统将进入用户登录界面,等待用户输入用户名和密码。
一旦用户成功登录,系统将启动用户的默认shell,并提供给用户一个可操作的命令行界面或图形界面。
Linux的启动流程1. 从BIOS到KERNELBIOS自检->MBR(GRUB)->KERNEL->KERNEL自解压->内核初始化->内核启动BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作要紧是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等要紧是为了检查这些设备在开机的时候是否能通过检测,假如能通过检测,说明电脑能够正常的工作。
-----------------------------------------一、载入启动程序BIOS自检完成后,BIOS会依照用户设置的启动顺序来由那个设备来启动电脑的操作系统,那个设备一样是硬盘。
也确实是进入到硬盘的MBR区域(引导扇区),那个区域中的有512个字节的大小,其中前446个字节中储存的程序是选择启动分区,也确实是电脑由那个硬盘分区来载入开机的程序。
那么在那个446个字节的空间中储存的确实是启动程序,然后由那个小程序来加载存储在其他位置的操作系统,也确实是启动grub程序。
当找到启动设备(硬盘)时,第一时期所用的boot loader(存放在引导扇区)被装载到RAM中并被执行。
那个地点的boot loader在大小上小于一个扇区的大小,也确实是512字节,而它的任务,确实是加载第二时期的boot loader。
当负责第二时期的boot loader位于内存中并被执行时,通常会显示一个一闪而过的屏幕,然后linux以及可选的初始化内存盘(一种临时的根文件系统,假如想得到具体的介绍,请访问://likunarmstrong.bokee /5502266.html) 会被装载到储备器中。
当系统镜像被加载时,第二时期的boot loader将把操纵权转交给内核镜像,与此同时,内核开始自解压并初始化。
在那个时期,第二时期的boot loader会检查系统的硬件,枚举那些附加的硬件设备,挂载根设备,之后加载需要的内核模块。
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 目录下。
Linux操作系统下GRUB引导过程及原理(1)GRUB是一个多重启动管理器。
GRUB是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择启动哪个系统。
它可以启动的操作系统包括Linux, FreeBSD, Solaris, NetBSD, BeOS, OS/2, Windows 95/98 /NT /2000。
它可以载入操作系统的内核和初始化操作系统(如Linux, FreeBSD),或者把启动权交给操作系统(如Windows 98)来完成启动。
Thiz Server默认安装GRUB,并用它来启动机器。
安装了GRUB,开机后会出现一个菜单,列出所有的启动选项。
如果设置了启动画面,则会显示启动画面,按【Esc】键则可以取消启动画面显示菜单选项GRUB,按【e】是编辑启动命令,按【c】是使用命令行等。
用上下键可以选择菜单项,按【Enter】启动所选项。
按【e】键可以编辑所选项的启动命令,您可以用这个功能临时改变系统的启动参数。
按【c】键则进入命令行模式。
在命令行模式下可以输入命令直接执行,例如可以敲入poweroff关闭电脑。
按【Tab】键可以列出所有支持的命令。
GRUB可以代替LILO来完成对Linux的启动,特别适用于Linux与其他操作系统共存情况,与LILO相比,它有以下特点:支持大硬盘以前许多Linux发行版本的LILO 都有同样的一个问题:根分区(/boot分区)不能分在超过1024柱面的地方,一般是在8.4GB左右的地方,否则LILO不能安装,或者安装后不能正确启动系统。
而GRUB就不会出现这种情况,只要安装时您的大硬盘是在LBA模式下,GRUB就可以启动根分区在8GB以外的操作系统。
在LILO下,您需要手动输入操作系统的名字来启动不同的操作系统。
而GRUB使用一个菜单来选择不同的系统进行开机。
您还可以自己设置各种参数,如延迟时间、默认操作系统等。
linux启动流程Linux启动流程是指在计算机启动时,操作系统的加载和初始化的一系列过程。
具体的启动流程可以分为以下几个步骤。
1. BIOS(Basic Input/Output System)自检:当计算机启动时,首先会运行内置的基本输入/输出系统(BIOS)进行自检。
BIOS会检测计算机中的硬件设备,并初始化这些设备。
2. 主引导记录(MBR)加载:接着,计算机会加载位于硬盘的主引导记录(MBR)。
MBR是位于硬盘的第一个扇区,其中包含了引导加载程序(Bootloader)的信息。
3. 引导加载程序运行:MBR加载完成后,引导加载程序就开始运行。
常用的引导加载程序有GRUB(GRand Unified Bootloader)和LILO(Linux Loader)等。
引导加载程序会读取硬盘上的操作系统及其内核的位置,并将控制权转移到操作系统的加载程序。
4. 内核加载:引导加载程序会读取操作系统的内核,并加载到内存中。
内核是操作系统的核心部分,负责管理计算机的硬件资源和进程管理。
5. 初始化ramdisk:操作系统内核加载完成后,会解压缩和初始化ramdisk。
ramdisk是虚拟的磁盘,用于提供操作系统初始化所需的文件和目录结构。
6. 初始化系统:操作系统内核会运行init进程,这是系统的第一个用户级进程。
init进程根据指定的运行级别,初始化各个系统服务和进程。
运行级别定义了系统启动时要运行的服务和进程的类型。
7. 启动系统服务:在指定的运行级别下,init进程会依次启动各个系统服务,如网络服务、打印服务、文件系统服务等。
这些服务的启动是根据配置文件中的设置进行的。
8. 用户登录:系统服务启动完成后,操作系统进入用户登录界面。
用户可以输入用户名和密码进行登录。
9. 初始化用户环境:当用户成功登录后,系统会初始化用户的环境,包括创建用户的进程、加载用户的配置文件等。
10. 启动默认图形界面:如果系统启动时设置了默认的图形界面(如GNOME、KDE等),则系统会自动启动默认的图形界面,并将控制权交给图形界面管理器。
Linux系统启动的详细过程和步骤Linux系统启动的详细过程和步骤Linux操作系统借助于Internet网络,并通过全世界各地计算机爱好者的共同努力,已成为今天世界上使用最多的一种UNIX 类操作系统,并且使用人数还在迅猛增长。
下面店铺准备了关于Linux系统启动的详细过程和步骤,提供给大家参考!第一阶段:系统上电开机后,主板BIOS(Basic Input / Output System)运行POST(Power on self test)代码,检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)。
硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。
执行POST代码对系统外围关键设备检测通过后,系统启动自举程序,根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的硬盘、光驱、网络服务器等)。
选择合适的启动器,比如通常情况下的硬盘设备,BIOS会读取硬盘设备的第一个扇区(MBR,512字节),并执行其中的代码。
实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行,BIOS的任务就完成了。
此后将系统启动的控制权移交到MBR部分的代码。
注:在我们的现行系统中,大多关键设备都是连在主板上的。
因此主板BIOS提供了一个操作系统(软件)和系统外围关键设备(硬件)最底级别的接口,在这个阶段,检测系统外围关键设备是否“准备好”,以供操作系统使用。
第二阶段:BIOS通过下面两种方法之一来传递引导记录:第一,将控制权传递给initial program loader(IPL),该程序安装在磁盘主引导记录(MBR)中第二,将控制权传递给initial program loader(IPL),该程序安装在磁盘分区的启动引导扇区中无论上面的哪种情况中,IPL都是MBR的一部分并应该存储于一个不大于446字节的磁盘空间中,因为MBR是一个不大于512字节的空间。
linux系统启动过程的处理步骤1.引言1.1 概述Linux系统是一个开源的操作系统,它被广泛应用于各种计算设备,包括个人电脑、服务器、嵌入式设备等。
它的启动过程是系统从关机状态到能够正常运行的过程,包括引导程序的加载、内核的启动和初始化各种系统服务等步骤。
Linux系统的启动过程可以被分为几个主要步骤,每个步骤都有其特定的任务和功能。
首先是引导程序的加载,它是系统启动的第一步。
引导程序负责从存储设备中加载操作系统的内核,并将控制权转交给内核。
加载内核是系统启动过程的第二个重要步骤。
内核是操作系统的核心部分,它负责管理系统的各种资源和提供系统调用接口,以支持各种应用程序的正常运行。
加载内核的过程包括初始化硬件设备、建立内核空间和用户空间的切换等操作。
在内核加载完成后,系统会初始化各种系统服务和驱动程序。
这些服务和驱动程序负责管理系统的各种资源,如文件系统、网络连接、进程管理等。
系统服务的初始化过程通常是按照一定的顺序来进行的,确保每个服务按照正确的依赖关系被初始化。
总的来说,Linux系统的启动过程是一个复杂而严密的过程,涉及到多个步骤和组件的协同工作。
每个步骤都有其特定的功能,确保系统能够正确地启动和正常运行。
通过了解Linux系统的启动过程,我们可以更好地理解系统的工作原理,并能够更好地进行系统配置和故障排查等工作。
1.2文章结构1.2 文章结构本文将按照以下步骤分析Linux系统启动过程的处理步骤:1. 引言:在此部分,将对Linux系统启动过程进行简要概述,并说明本文的结构和目的。
2. 正文:2.1 启动引导程序:首先,将介绍引导程序的作用和重要性。
然后,详细说明引导程序在系统启动过程中的操作步骤,包括硬件自检、加载引导程序、选择操作系统等。
2.2 加载内核:在此部分,将详细讲解加载内核的过程和步骤。
首先,将介绍内核的作用和组成部分。
然后,依次说明加载内核的操作步骤,包括初始化内存、初始化设备驱动、加载文件系统等。
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启动流程与Grub的配置严寒发布于 2006-10-12 | 918次阅读字号: 大中小 (网友评论 1 条我要评论一、Linux的启动流程 1. 从BIOS到KERNEL BIOS自检->MBR(GRUB->KERNEL->KERNEL自解压->内核初始化->内核启动 2. 内核启动:创建1#进程并执行,由它创建若干内核线程(kernel thread),然后装入并执行程序/sbin/init(变成一个用户进程)。
此后,init根据/etc/inittab配置文件来执行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络等对于Redhat来说,执行的顺序为: /etc/rc.d/rc.sysinit # 由init执行的第一脚本/etc/rc.d/rc $RUNLEVEL # init执行指定运行级别($RUNLEVEL为缺省的运行模式)的各脚本; /etc/rc.d/rc.local #运行模式2、3、5时会运行的脚本 /sbin/mingetty (或getty) # 等待用户登录 /etc/inittab中指定了系统的运行级别(RUNLEVEL),init根据运行级别启动相关的服务(一些后台进程),实现不同的功能。
RUNLEVEL值为:0-6 0:halt, 1:单用户,2:多用户,3:多用户并启动NFS服务 4:保留,5:运行xdm(X window)以图形界面方式登录 6:reboot 3、/etc/inittab文件 /etc/inittab的文件内容如下: # 设定系统开机预设的RUNLEVEL: id:3:initdefault: # 开始进行RUNLEVEL的服务启动前,使用来侦测与初始化系统环境的设定文件: si::sysinit:/etc/rc.d/rc.sysinit # 7 个不同 run level 的,需要启动的服务的 scripts 放置路径: l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # 是否允许按下 [ctrl]+[alt]+[del] 就重新开机的设定项目: ca::ctrlaltdel:/sbin/shutdown -t3 -r now # 本机端终端机启动的个数: 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # 在 X Window (RUNLEVEL 5 环境下的启动 script 设定项目: x:5:once:/etc/X11/prefdm -nodaemon 这个文件的语法是这样的:标识符:级别:init 的动作行为:指令项目 1. 标识符:最多四个字符,代表 init 的主要工作项目,只是一个简单的代表说明。
1.引导加载程序GRUB和LILO及Linux启动过程●建议使用LILO来管理操作系统,LILO作为操作系统的装载程序,“超然”于任何操作系统,只使用计算机的基本输入输出系统(BIOS),LILO启动时所要访问的所有数据(包括Linux的内核)都在/boot目录中。
●当机器引导它的操作系统时,BIOS会读取引导介质上最前面的512字节,也就是我们所说的主引导记录MBR(它是硬盘上的一个特别区域,会被BIOS自动装载),在单一的MBR中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。
所以需要更灵活的引导加载程序。
●上电时BIOS进行自检后读取MBR中的信息→加载内核,装入内存并初始化每个设备驱动器,打印相应信息→内核在几个默认的路径里寻找init,并运行它找到的第一个init进程(它是内核启动的第一个用户级进程,它负责运行启动时所需的所有其它进程)→依据/etc/inittab文件设定运行等级。
(控制init程序操作的规则存放在/etc/inittab文件中)→init运行/etc/rc.d/rc.sysinit(/etc/inittab 里有一句“si::sysinit:/etc/rc.d/rc.sysinit“,表示开始载入各项系统服务之前,先对系统进行初始化,设定好系统环境)→在rc.sysinit执行后,将返回init继续其它的动作,通常接下来会执行到/etc/rc.d/rc程序。
以运行级别3为例,init将执行配置文件inittab中的以下这行:L3:3:wait:/etc/rc.d/rc 3这一行表示以3为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受3作为参数,去执行/etc/rc.d/rc3.d/目录下的所有的rc启动脚本→init进程载入模块/etc/rc.d/rcX.d来关闭和运行各项系统服务。
(对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。
标准linux系统启动流程全文共四篇示例,供读者参考第一篇示例:标准Linux系统启动流程是指Linux操作系统在开机时从关机状态到完全启动运行状态的过程。
这个过程包含了许多环节,从硬件初始化到用户可以正常使用系统。
下面是一份关于标准Linux系统启动流程的详细介绍。
1. BIOS/UEFI初始化在计算机开机时,第一个程序会由主板上的BIOS或者最新的UEFI 启动。
BIOS(Basic Input/Output System)或UEFI(Unified Extensible Firmware Interface)是计算机的固件,负责初始化和检测硬件,并加载操作系统启动程序。
这个过程通常包括识别并初始化CPU、内存、硬盘、显卡、网卡等硬件设备。
2. 引导加载程序(Bootloader)在BIOS或UEFI初始化完成后,计算机会加载引导加载程序(Bootloader),最常见的引导加载程序是GRUB(GRand Unified Bootloader)。
引导加载程序负责在系统启动时加载操作系统内核,并将系统控制权交给内核。
GRUB会显示一个启动选单,用户可以选择启动哪个操作系统或者内核。
3. 内核初始化在引导加载程序将系统控制权交给内核后,Linux内核开始初始化。
内核是操作系统的核心部分,负责管理系统资源、提供硬件支持、进程管理等。
内核初始化包括建立虚拟内存空间、初始化各种设备驱动程序、设置中断处理程序等。
内核初始化完成后,系统会启动初始化进程(init)。
在早期的Linux系统中,init是第一个用户级进程,负责启动系统的其他进程。
现在,通常使用systemd作为init进程。
系统初始化阶段包括挂载根文件系统、启动基本系统服务、加载用户空间程序等。
5. 用户空间初始化当系统初始化完成后,用户空间进程开始启动。
用户空间进程包括系统服务、网络服务、图形界面等。
这些进程的启动可以通过系统的启动脚本(init scripts)来管理。
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@localhostroot]#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选项以告知bootloader 不使用initrd.如果我们做网关,因为ram是我们的文件系统的载体,所以initrd一行当然不能去掉,但是我们可以不用linuxrc文件,sysroot文件夹和initrd 文件夹.不信的话,试试看吧.好了,initrd(linuxrc)已经介绍完了.linuxrc执行完毕之后,系统就会以真正的根目录正式init.系统在/bin/或者/sbin目录下找到init程式,然后根据它的配置文件/etc/fstab进行初始化,最后调用mingetty程式启动login完成引导.ps:init这一部分网上有很多的详细资料所以我在这里并没有展开来说. 终于写完了,希望对你有所帮助.如有错误,还望指正.。