linux系统引导过程

linux系统引导过程
linux系统引导过程

linux系统引导过程简介

首先,主板的BIOS会读取硬盘的主引导记录(MBR),MBR中存放的是一段很小的程序,他的功能是从硬盘读取操作系统核心文件并运行,因为这个小程序太小了,因此通常这个小程序不具备直接引导系统内核的能力,他先去引导另一个稍微大一点的小程序,再由这个大一点的小程序去引导系统内核.在linux系统中这样的小程序有LILO和GRUB.在这个项目中,我决定用LILO来做系统引导程序.在软盘上启动linux系统的过程和在硬盘上启动的过程相似.

Linux系统内核被引导程序装入内核并运行后,linux内核会检测系统中的各种硬件.并做好各种硬件的初始化工作,使他们在系统正式运行后能正常工作.之后内核做的最后一个工作是运行

/sbin下的init程序,init是英文单词initialization(初始化)的简称,init程序的工作是读取/etc/inittab 文件中描述的指令,对系统的各种软硬件环境做最初化设定.最后运行mingetty等待用户输入用户名登录系统.所有的工作就这么简单,虽然linux启动的时候有很多内容,看上去十分高深,但是都不过是对这个过程的扩充.明白了这个道理,你可以写一些脚本程序让他在系统启动的特定时间运行完成任务.事实上系统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init 的可执行程序他都可以执行.

Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段:

1.启动内核。在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。

2.执行程序init.(系统初始化).装入内核并初始化设备后,运行init程序。init程序处理所有程序的启动,包括重要系统精灵程序和其它指定在启动时装入的软件。

开机---BIOS自检---载入启动程序---加载内核---启动init服务---加载/etc/inittab---Run level---rc.sysinit---rc--- mingetty---rc.local

一.BIOS自检

当电脑开机的时候,电脑会进入BIOS,在PC机中引导LINUX是从BIOS中的地址0xFFFF0处开始的.BIOS的第一个步骤是加电自检,即所谓的POST(Power On Self Test),BIOS的第二个步骤是进行本地设备的枚举和初始化,侦测电脑周边配套设备是否工作正常,如cpu的类型,速度,缓存等;主板类型,内存的速度,容量,硬盘的大小,类型和工作模式,风扇速度等,主要是为了检查这些设备在开机的时候是否能通过检测,说明电脑可以正常的工作.BIOS由两部分组成:POST代码和运行时的服务.当POST完成之后,它被从内存中清理了出来,但是,BOIS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务

二.载入启动程序

BIOS自检完成后,BIOS会根据用户设置的启动顺序来由哪个设备启动电脑的操作系统,设备需是处于活动状态并且可以引导的,(引导设备可以是软盘,CD-ROM,硬盘上的某个分区,

网络上的某个设备,甚至是USB闪存),对于linux这个设备一般是硬盘.也就是进入硬盘的MBR区域,(master boot record,位于磁盘上的第一个扇区中,0道0柱面1扇区),这个区域中有512个字节的大小,其中前446个字节中保存的就是启动程序,(446个字节包含可执行代码和错误消息文本,接下来的64个字节是分区表,其中4个分区的记录,每个记录的大小是16个字节,MBR以两个特殊数字的字节0xAA55结束,这个数字用来进行MBR的有效性检查,当MBR被加载到RAM中之后,BIOS就会将控制权交给MBR),然后由这个小程序来加载存储在其他位置的操作系统,也就是启动grub程序.(grub不像lilo一样使用裸扇区,而是可以从ext2或ext3文件系统中加载LINUX内核).

要看MBR的内容,请使用下面的命令

#从/dev/sda上读取前512个字节的内容,并将其写入mbr.bin文件中

[root@localhost ~]# dd if=/dev/sda of=mbr.bin bs=512 count=1

#以十六进制和ASCII码格式打印这个二进制文件的内容

[root@localhost pam.d]# od -xa mbr.bin

grub程序的这个配置文件是保存在:/boot/grub/grub.conf这个文件中,如果修改这个文件后,设置会立刻生效.

使用cat /boot/grub/grub.conf,就会出现这个文件的内容,最前面是注释。

可以将这个文件逻辑上分为两个部分,第一个部分是基本设定,第二个部分是区分开多个操作系统的设定。

第一个部分中的defaule=0,是指第一组操作系统开机。如果有两组操作系统的开机设定,而defaule=1,那么预设使用第二组操作系统开机。

所谓第一组和第二组程序就是指的是title开始的部分,这里是区分操作系统的部分。如何知道要使用那一个系统呢,可以看到在title开始的部分的下一行有:

root (hd0,0)

hd0,表示第一个硬盘

0:指的是硬盘的第一个分区,

在括号中的那个0和defaule=0是一一对应的。这就可以知道是启动的是那一个操作系统。

timeout=5是指进入GRUB的画面后,会有5秒的时间让使用者选择使用那个操作系统开机。如果在这个时间没有作出选择那么,那么就使用defaule的设定

splashimage=是开机使用的背景图案。

hd0,表示第一个硬盘

0:指的是硬盘的第一个分区,和上面的一样,

/grub/splash.xpm.gz就是开机使用的背景图案的文件名称

hiddenmenu指令是隐藏开机的选单。

title:开机选单的标题名称。

root (hd0,0):0表示下面要介绍的档案位于那个目录中。(hd0,0)同样是指/boot目录

kernel:存放内核的位置,由于(hd0,0)指的是/boot目录,所以这个文件在boot目录中。ro root=LABEL=/就是设根目录的位置,ro表示read only,所以有这行的设定,才能读取根目录。

rhgb:red hat图形界面启动,取代以前的文本界面。如果要使用文本界面的形式启动,只要将rhgb删除即可。

quite:在开机过程中不要显示错误的信息。如果要显示错误信息,只要删除quite即可。initrd:将initrd映像文件加载到内存。这个文件里面存放的都是驱动程序。

三.加载内核

正确的启动了启动程序之后,接下来的工作就是载入操作系统的内核.内核主要作用是取得BIOS所检测到的硬件设备的信息,然后将这些硬件设备自己来管理,这样才能够提供给Linux系统使用。接手了硬件设备后,然后就要加载这些设备的驱动程序。以便于控制电脑上的设备如何正确的工作。

加载完硬件的驱动程序后,接下来就加载文件系统了,也就是加载开机所需要的库文件,程序等,所以/etc /bin /sbin /dev /lib这些目录的根目录必须是同一个分区,否则会造成Linux 的开机失败。

上面在grub中有“ro root=LABEL=/”这样的信息,是以只读的方式来加载所需要的文件,程序,这是为什么呢?

是因为Linux的内核在启动的过程中,不知道将会发生什么故障,可能不是很稳定,如果以可读可写的方式来加载,那么启动的过过程组中如果出现异常或者是断电,那么就有可能破坏,为了避免这些问题的发生,就采取只读的方式来挂载文件系统。

LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。内核映象前面的一些代码完成解压缩。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像,它通常是

一个zlmage(压缩映像,小于512kb)或一个bzlmage(大于512kb),它是提前使用zlib进行压缩过的.在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用,然后此例程会调用内核,并开始启动内核引导的过程

当bzlmage被调用时,(以i386为例),我们从./arch/i386/boot/head.S的start汇编例程开始执行,这个例程会执行一些基本的硬件设置,并调用./arch/i386/boot/compressed/headS中的startup_32例程,此例程会设置一个基本的环境(堆栈等),并清楚Block Started by

Symbol(BSS),然后调用一个叫做decompress_kernel的C函数

(在./arch/i386/boot/compressed/misc.c中)来解压内核.当内核被解压到内存中之后,就可以调用它了.这是另外一个startup_32函数,但是这个函数在./arch/i386/kernel/head.S中.在这个新的startup_32函数(也称为清楚程序或进程0)中,会对页表进行初始化,并起用内存分页功能.然后会为任何可选的浮点单元(FPU)检测CPU的类型,并将其存储起来供以后使用,然后调用start_kernel函数(在init/main.c中),它会将您带入与体系结构无关的Linux内核部分.实际上,这就是Linux内核的main函数.通过调用start_kernel,会调用一系列初始化函数来设置中断,执行进一步的内存配置,并加载初始RAM磁盘.最后,要调用kernel_thread(在

arch/i386/kernel/process.c中)来启动init函数,这是第一个用户空间进程(user-space process).最后,启动空任务,现在调度器就可以接管控制权了(在调用cpu_idle之后).通过起用中断,抢占式的调用器就可以周期性地接管控制权,从而提供多任务处理能力.在内核引导过程中,初始RAM磁盘(initrd)是由阶段2引导加载程序加载到内存中的,它会被复制到RAM 中并挂载到系统上.这个initrd会作为RAM中的临时根文件系统使用,并允许内核在没有挂载任何物理磁盘的情况下完整地实现引导.由于与外围设备进行交互所需要的模块可能是initrd的一部分,因此内核可以非常小,但是仍然需要支持大量可能的硬件配置.在内核引导之后,就可以正式装备根文件系统了(通过pivot_root),此时会将initrd根文件系统卸载掉,并挂载真正的根文件系统,initrd函数让我们可以创建一个小型的linux内核,其中包括作为可加载模块编译的启动程序,这些可加载的模块作为内核提供了访问磁盘和磁盘上的方法,并为其他硬件提供了驱动程序,由于根文件系统是磁盘上的一个文件系统,因此initrd函数会提供一种启动方法来获得对磁盘的访问,并挂载真正的根文件系统.在一个没有硬盘的嵌入式环境中,initrd可以是最终的根文件系统,也可以通过网络文件系统(NFS)来挂载最终的根文件系统.

在GRUB命令中,我们可以使用initrd映像引导一个特定的内核,方法如下:

grub> kernel /bzImage-2.6.14.2

[Linux-bzImage, setup=0x1400, size=0x29672e]

grub>initrd /initrd-2.6.14.2.img

[Linux-initrd @ 0x5f13000, 0xcc199 bytes]

grub> boot

Uncompressing Linux... Ok, booting the kernel.

如果不知道要引导的内核的名称,只需使用/然后按下Tab键,就会显示内核和initrd映像列表

对grub命令行进行加密

a)使用命令/sbin/grub-md5-crypt来产生grub使用的密码

[root@localhost pam.d]# /sbin/grub-md5-crypt

Password:

Retype password:

$1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1

b)修改/etc/grub.conf加入password --md5 $1$3YbPF$zFVRY6J8VxNR9Ok4fXRkr1 一定要放在title之前

这样重启系统时在grub的启动grub菜单时,想再按e命令进行编辑时,必须先按p键后输入密码才成.

四.启动init服务

加载完成内核之后,Kernel会启动init这个程序,init进程是所有进程的起点,也是Linux 内核启动后的第一个动作,所以这个程序的PID是永远是1,也是Red Hat Enterprise Linux 中执行的第一个程序,这个程序会根据Run Level来执行一些相关的程序程序。利用init程序可以方便地定制启动其间装入哪些程序。init进程是所有进程的发起者和控制者,init的任务是启动新进程和退出时重新启动其它进程,例如在大多数Linux系统中,启动时最初装入六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台,因而总是提供六个虚拟登陆控控制台进程.

init进程有以下两个作用。

init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。

init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。

启动init服务的目的就是为了用来初始化Linux的环境。也就代表了Linux已经顺利的加载了内核,这个时候的系统启动就进入了另外的一个阶段:系统初始化阶段

init程序其实是去读取/etc/inittab配置文件的配置,根据配置来决定作什么工作,可以使用cat /etc/inittab指令,就可以看到这个文件的内容,里面设置了init需要作哪些系统初始化工作,如设置键盘、字体、装载模块,设置网络等。

1.决定要使用那个run level

Linux有个运行级系统,运行级是表示系统当前状态和init应运行哪个进程并保持在这种系统状态中运行的数字。run level可以从0到6分成7种,一般是为了执行不同的程序或环境而设置的

run level可以从0到6分成7种,一般是为了执行不同的程序或环境而设置的

run level 0:是作关机,所以不能设置initdefault中,也就是id:5:initdefaule的设置。否者一开机就会作关机的动作。

run level 1:是Single user mode模式,只允许root账号登录,主要是作一些系统维护的工作。

run level 2:可以使所有的用户登录,但不会启用NFS working,也就是没有网络功能

run level 3:可以使所有用户登录,并拥有完整的功能。包含run level 2没有的功能,但是开机后是用文本模式

run level 4 :使用者自己定义,但是默认情况下和run level 3完全相同,

run level 5:和run level 3几乎一样,唯一的不同是开机后是图形界面,

run level 6:重启。所以run level 6也不会设置在initdefault中,否者开机后立刻重启

一般情况下我们使用最多的是1,3,5这三个run level,那么这三个有什么不同的呢,主要差别在执行程序的数量不同。

可以使用init指令来定义使用那个run level,只要在命名提示符号的后面输入"init 3"就进入文本界面,如果输入"init 6"那么电脑就会重启,如果是"init 0",那就关机

id:5:initdefault:表示当前默认运行级别是run level 5,是图形界面。

2.执行初始操作系统的程序

在init的配置文件中有如下一行:

si::sysinit:/etc/rc.d/rc.sysinit 表示启动时自动执行/etc/rc.d/rc.sysinit脚本(sysinit)

rc.sysinit是由init执行的第一个脚本,它主要完成一些系统初始化的工作。rc.sysinit是每一个运行级别都要首先运行的重要脚本,它主要完成的工作有:激活交换分区、检查磁盘、加载硬件模块以及其他一些需要优先执行的任务。/etc/rc.d/rc.sysinit主要完成各个运行模式中相同的初始化工作,包括:

设置初始的$PATH变量;

配置网络;

为虚拟内存启动交换;

设置系统的主机名;hostname在/etc/sysconfig/network文件中

检查root文件系统,以进行必要的修复;

检查root文件系统的配额;

为root文件系统打开用户和组的配额;

以读/写的方式重新装载root文件系统;

清除被装载的文件系统表/etc/mtab;

把root文件系统输入到mtab;

使系统为装入模块做准备;

查找模块的相关文件;

检查文件系统,以进行必要的修复;

加载所有其他文件系统;

清除/etc/mtab、/etc/fastboot和/etc/nologin;

删除UUCP的lock文件;

删除过时的子系统文件;

删除过时的pid文件;

设置系统时钟;

激活交换分区;

初始化串行端口;

装入模块。

3.执行run level对应目录中的程序

用来决定启用那些服务,也就是执行rc程序

在rc.sysinit执行后,将返回init,继续执行/etc/rc.d/rc程序,对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法上rcX.d, 其中X就是代表运行级别的数字

在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接

如输入ls -l /etc/rc.d这个指令,就可以看到所有的run level所对应的目录,在这些目录当中,都是内置一些要执行的一些程序。也就是要启动那些服务。本例的run level是5,就会执行rc5.d这个目录中的程序。那么就会启动这个目录中的服务.

输入ls -l /etc/rc.d/rc5.d可以查看这个目录中有哪些内容,这个文件夹中的都是一些链接文件,这些名称链接的格式可以分为主要的三个小段:以K或S 开头。K=Kill表示停用,S=Start表示启用服务,并且K先执行,然后执行S;中间是两位的数字,代表执行的先后顺序,数字越小,越先执行;是程序名称。系统会按照这个目录中的程序,先关闭某些程序,然后启动某些需要的服务.一般来说,这些脚本不需要编辑或改变,是系统缺省的。

以运行级别5为例,init将执行配置文件inittab中的以下内容:

l5:5:wait:/etc/rc.d/rc 5 当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回(wait)

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个shell脚本,它接受5作为参数,去执行/etc/rc.d/rc5.d/目录下的所有的rc启动脚本,

/etc/rc.d/rc5.d/目录中的启动脚本实际上都是一些链接文件(用来呼叫

/init.d目录中程序,并带有一个启动或停止服务的参数),而不是真正的rc启动脚本,真正的rc启动脚本实际上都在/etc/rc.d/init.d/目录下。而这些rc

启动脚本有着类似的用法,它们一般能接受 start、stop、restart、status等参数。

/etc/rc.d/rc5.d/中的rc启动脚本通常是以K或S开头的链接文件,以S 开头的启动脚本将以start参数来运行。如果发现相应的脚本也存在K打头的链接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。这样做是为了保证当init改变运行级别时,所有相关的守护进程都将重启。

至于在每个运行级中将运行哪些守护进程,用户可以通过chkconfig来自行设定。常见的守护进程如下。

amd:自动安装NFS守护进程。

apmd:高级电源管理守护进程。

arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和IP地址对应的数据库。

autofs:自动安装管理进程automount,与NFS相关,依赖于NIS。

crond:Linux系统下计划任务的守护进程。

named:DNS服务器。

netfs:安装NFS、Samba和NetWare网络文件系统。

network:激活已配置网络接口的脚本程序。

nfs:打开NFS服务。

portmap:RPC portmap管理器,它管理基于RPC服务的连接。

sendmail:邮件服务器sendmail。

smb:Samba文件共享/打印服务。

syslog:一个让系统引导时启动syslog和klogd系统日志守候进程的脚本。

xfs:X Window字型服务器,为本地和远程X服务器提供字型集。

Xinetd:支持多种网络服务的核心守护进程,可以管理wuftp、sshd、telnet等服务。

这些守护进程启动完毕,rc程序也就执行完了,然后又将返回init继续下一步。

4.再设定某个组合键

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

当启动的过程中按下crtl+alt+del键会执行shutdown -t3 -r now这个指令(重启系统)

5.定义UPS不间断电源系统

pf::powerfail:/sbin/shutdown -f -h +2 "Power Restored;Shutdown Cancelled"

如果你的服务器有UPS,当电源发生问题或电源恢复的时候,执行这些程序, 当电源发生问题时,执行shutdown -f -h +2

当电源恢复工作时,执行shutdown -c 表示在关机前取消关机的操作,这个时候必须取消关机操作。

由于UPS可以短暂的为linux服务器提供电力服务,但是UPS不会一直提供电力,到UPS电力用完,可能会造成Linux不正常关机,而是UPS会通知电脑,电源发生问题,要求linux正常的关机,避免内存的资料没有保存到硬盘上。以上的功能必须是UPS支持以上的功能的是够才会发生这些动作,如果UPS不支持这些功能,这两条语句没有任何的作用。

6.产生6个虚拟控制台。也就是tty1到tty6

#Run gettys in standard runlevels

1:12345:respawn:/sbin/minggetty tty1

2:2345:respawn:/sbin/minggetty tty2

3:2345:respawn:/sbin/minggetty tty3

4:2345:respawn:/sbin/minggetty tty4

5:2345:respawn:/sbin/minggetty tty5

6:2345:respawn:/sbin/minggetty tty6

使用mingetty指令分别产生tty1到tty6这6个虚拟控制台

在2.3.4.5级别上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登陆,如果进程退出则再次运行mingetty程序(respawn)

7.如果启用的是run level 5,就会初始化X Windows环境

#Run xdm in runlevel 5

x:5:respawn:/usr/bin/X11/xdm -nodaemon

在5级别上运行xdm程序,提供xdm图形方式登陆界面,并在退出时重新执行(respawn),/etc/X11/prefdm -nodemon:就是初始化X Windows环境

五.执行/etc/ec.d/rc.local

(s99local -> ../rc.local) s后面的99表示最后执行的意思

RHEL 4中的运行模式2、3、5执行Run Level目录中相对的程序链接后,都把/etc/rc.d/rc.local 做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后、登录之前执行的命令。在维护Linux系统时一般会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。我们可以将需要开机执行的程序或者指令写入这个文件中.

六.执行/bin/login程序

login程序会提示使用者输入账号及密码,接着编码并确认密码的正确性,如果账号与密码相符,则为使用者初始化环境,并将控制权交给shell,即等待用户登录。

login会接收mingetty传来的用户名作为用户名参数,然后login会对用户名进行分析。如果用户名不是root,且存在/etc/nologin文件,login将输出nologin文件的内容,然后退出。这通常用来在系统维护时防止非root用户登录。只有在/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,则root可以在任何终端上登录。/etc/usertty文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

在分析完用户名后,login将搜索/etc/passwd以及/etc/shadow来验证密码以及设置账户的其他信息,比如:主目录是什么、使用何种shell。如果没有指定主目录,则将主目录默认设置为根目录;如果没有指定shell,则将shell类型默认设置为/bin/bash。

login程序成功后,会向对应的终端再输出最近一次登录的信息(在

/var/log/lastlog中有记录),并检查用户是否有新邮件(在/usr/spool/mail/

的对应用户名目录下),然后开始设置各种环境变量。对于bash来说,系统首先寻找/etc/profile脚本文件并执行它;然后如果用户的主目录中存

在.bash_profile文件,就执行它,在这些文件中又可能调用了其他配置文件,所有的配置文件执行后,各种环境变量也设好了,这时会出现大家熟悉的命令行提示符,至此整个启动过程就结束了。

修复更新grub2系统引导

修复更新grub2系统引导 一.修复 如果重装系统或者引导系统崩溃无法进入系统开机引导项从而无法进入以装系统,以Ubuntu Grub2引导为例,详细写一下如何修复之前的系统引导。 (以下说明均以Ubuntu系统为例,其他系统大同小异) 1.放入系统安装盘或这插入刻录好的系统安装U盘,进入系统安装选项,选择试用选项! 2.选择适用之后,进入Ubuntu图形界面,打开终端。 3.选择Ubuntu安装磁盘,如果不确定具体在哪个磁盘,可以用命令查看一下 [plain] sudo fdisk -l 4.挂载Ubuntu系统安装磁盘(我的是在第8磁盘,故为sda8) [plain] sudo mount /dev/sda8 /mnt 5.开始恢复grub2系统引导 [plain] sudo grub-install --root-directory=/mnt/dev/sda 6.执行命令之后,如果没有报错,则恢复成功,重启即可。 二.更新 恢复之后是之前的系统引导界面,如果新安装的系统没有在界面上显示,那么可以进入Ubuntu系统,进行grub2更新。

打开终端,输入 [plain] sudo update-grub2 成功的话,将会出现更新后找到的磁盘上所有系统引导的记录。(以我自己的为例) [plain] hugo@hugo-HP:~$ sudo update-grub2 [sudo] password for hugo: Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.5.0-26-generic Found initrd image: /boot/initrd.img-3.5.0-26-generic Found linux image: /boot/vmlinuz-3.5.0-25-generic Found initrd image: /boot/initrd.img-3.5.0-25-generic Found linux image: /boot/vmlinuz-3.5.0-17-generic Found initrd image: /boot/initrd.img-3.5.0-17-generic Found memtest86+ image: /boot/memtest86+.bin Found Windows 8 (loader) on /dev/sda1 Found CentOS release 6.4 (Final) on /dev/sda3 Found Mac OS X on /dev/sda9 done 之后重启即可。 update-grub这个是Ubuntu专用的吧,其它发行版不一定有,通用的是:sudo grub-mkconfig -o /boot/grub/grub.cfg

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

win7 linux启动引导项恢复

我电脑本身是win7 系统,之后有装了red hat 。 由于没有经验,在安装linux时选择把引导文件安装在sda 上,这样windows7 原有的引导文件就被覆盖了,变成linux的引导文件。此时,两个系统仍然可以启动,一切正常,但是默认启动的是linux。用过红帽的应该知道,先出现那个进入红帽的倒计时,如果你不按enter ,就直接进红帽了。而你点击回车之后,才出现系统选择界面。那个other 就是你的win7 。如果你把win7 作为主系统的话,每次都得选择,如果一不小心错过了那3秒钟,对不起了只有等半天重启,接着选。这就让人很蛋疼了。 于是我进入win7 之后就自以为是修复引导文件,以为这样就好了。事实上造成更大的错误。 用easyBCD 修复引导文件之后,不仅没有linux启动项了,win7 开机也成盗版了~~~~~所以是正版的要慎重了,提前备份好激活文件。我也就麻烦一下又重新激活······正常进入win7 之后就在想怎么恢复linux 想起不久前曾用rescue模式恢复启动项就准备试试进入rescue模式后挂载系统看了grub.conf 配置文件,没有问题,我就郁闷了。 之后百度才知道原因。“由于操作者不知道grub2分为两部分,一部分(一般情况下)写在了mbr上,另一部分写在了某个分区的/boot/grub目录(如果/boot单独分区,则直接写在对应分区的/grub目录)里面。由于上述操作,致使grub2的mbr里面的那一部分找不到/grub目录里面的那一部分了(或者那一部分已经删除了)。”https://www.360docs.net/doc/5d12884715.html,/zyf837368104/article/details/7627065上面的链接的文章指明原因所在,但是所提供的方法却不对。之后我又在某论坛(https://www.360docs.net/doc/5d12884715.html,/thread-1924253-1-1.html)看到,上面文章适用于grub1不适用grub2 。至于两者的差别我不清楚。但是我想,既然引导文件坏了,就重装一次。就敲入grub-install /dev/sda8 (sda8 是linux的/boot分区。至于你的,根据实际情况,貌似可以用find 命令查找)安装成功后重启系统仍然没有linux启动项,就用easyBCD重新创建一个

linux启动顺序讲解

一、简单介绍RHEL开机时的先后顺序 BIOS —> MBR —> Kernel —> init 1、当电脑一打开电源时电脑就会进入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开机菜单这里选择哪个系统就会载入相应的核心;

Linux引导过程的九个步骤

Linux引导过程的九个步骤 【1】硬件和固件以及读入MBR BIOS 或其它固件系统读取硬盘或者其它引导设备(例如,光盘、软盘、网络引导等等)上的 主引导记录。 计算器在接通电源之后,首先由BIOS 进行自检,即进行所谓的POST(Power On Self Test), 然依据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入“引导块”。例如,通常BIOS中设置 的引导顺序为第一个IDE硬盘的C分区在最前面,那就是说,计算机开机启动时会把C盘的第0柱面,第0头的第1个扇区读入内存,然跳到那里开始执行。这个扇区有一个大家很熟悉的名字,它就 是: MBR(Main Boot Record)。换句话说,MBR里面存放的是一小段程序以及分区表的数据。 在使用WIN9X和DOS 时,这里面存放的代码就会把分区表里标记为Active 的分区的第一个 扇区(一般存放着操作系统的引导代码)读入内存并跳转到那里开始执行. 【2】引导装载程序运行 x86 系统上的Linux 系统通常使用LILO 或者GRUB。某些老式系统可能使用loadlin 通过 一个中间DOS 分区进行引导。在Power PC® 系统上,这可能是BootX或者yaboot。一般来说,引导装载程序是一种简单的程序,它知道到哪里寻找Linux 内核,可能在几个版本之间 进行选择,甚至可以选择同一计算机上的其它操作系统。 在用LILO 来引导LINUX 时,有两种选择: (a) BIOS->LILO(直接安装在MBR中)->KERNEL 把LILO直接安装在MBR,这时就由BIOS直接把LILO代码调入内存,然跳转执行LILO即可. (b) BIOS->MBR->LILO(安装在活动分区的第一个扇区)->KERNEL 把LILO安装在LINUX分区,必须把LINUX分区设为Active. 这时BIOS调入的是WIN9X/DOS 下的MBR代码,然由这段代码来调入LILO的代码(位于活动分区的第一个扇区). 在过去,对于能够设置可引导分区的最高柱面,最大硬盘大小, 在大硬盘上主分区的位置等等 有许多限制。因为在读入及执行MBR 时,操作系统还没有起来, 所以只能用BIOS 提供的 INT13 来进行磁盘操作,而INT13 只能读写硬盘1024 柱面之前的数据,由此可知任何操作 系统的引导代码都必须在1024 柱面之前。对于LINUX的引导装载程序来说,不管你是使用 方式(a)还是方式(b)来启动,都要保证KERNEL放在1024柱面之前。但因为LINUX不使用INT13 来进行硬盘操作, 所以在KERNEL启动以后, 就有读写1024 柱面以后数据的能力了。 不过, 现在几乎所有硬件系统的BIOS 都得到了改进, 能够处理实际上无限大的硬盘, 因此 现代的引导装载程序(至少是Linux的引导装载程序),对于分区大小或位置已经没什么限制了.

Linux系统修复

LAB : Linux系统修复 实验目的: 使用linux recuse模式修复Linux系统 实验步骤: 一、人为删除系统关键文件 登陆linux系统之后,依次执行以下命令人为破坏当前linux系统: #cd / #umount /boot ---卸载/boot分区 #rm -rf /boot ---删除/boot目录(boot目录下包含所有GRUB有关的文件) #rm -rf /etc/inittab ---删除init表(此文件定义了系统运行级别和脚本) #rm -rf /etc/rc.d/rc.sysinit ---删除init运行级别脚本文件 #rm -rf /etc/rc.d/rc.local ---删除开机脚本文件 #mv /etc/fstab /etc/fstab.bak ---备份系统挂载表fstab文件(此文件记录了linux分区信息) #sync ---将系统缓冲区的内容写入硬盘(在Linux系统中,当数据需要存入磁盘时,通常会先放到缓冲区内,等到适当的时刻再写入磁盘,如此可提高系统的执行效率) #reboot 经过这一番蹂躏之后,系统肯定是挂了的。。。。。最后一条reboot命令已经无法正常执行了。。。手动重启系统也是无法进入系统了的。。。。。。但是,只要根分区没有被格式化,就可以进入linux修复模式恢复该linux系统。 二、修复linux系统

思路: 恢复fstab文件找到分区→修复引导里的内核文件→修复grub –> 还原init相关文件 1.进入修复模式 通过RHEL5光盘引导进入安装会话,输入linux rescue或按F5键进入rescue修复模式。 进入修复模式之后,系统会提示选择语言Language和键盘类型Keyboard, 直接回车就行了。 系统会再次询问是否配置网络, 选择No,因为修复系统不需要用到网络。。然后会提示如下: Rescue程序将查找当前硬盘上是否有已安装的linux系统,如果找到了的话,就自动挂载到/mnt/sysimage下。选择”Continue”继续,rescue程序会搜索硬盘是否存在已安装过的linux和硬盘分区,最终结果如下图: 搜索结果显示,找不到Linux分区,因为/etc/fstab文件被删除了,所以导致系统无法读取Linux分区,但是如

怎样执行在Linux上运行应用程序

如何执行在Linux上运行的应用程序 关键字:Linux 先决条件 要充分理解本文,必须具备Windows 环境下桌面应用程序的工作经验,我认为读者对如何使用Linux 桌面有一个基本的了解。使用一个运行的Linux 计算来机探讨本文的概念和示例是很有帮助的。 概述 有时候第一次在Linux 上运行一个应用程序需要一点额外工作。有些应用程序,比如服务器服务,可能无法安装为服务,因此您需要从命令行启动这些应用程序。对于启动这些应用程序的用户帐户而言,需要在应用程序文件中设置执行许可标志(x)。 运行用户空间应用程序 Linux 在内核空间或用户空间运行进程。用户空间是操作系统的区域,应用程序通常在此运行。简单地说,每个用户帐户有其自己的用户空间,应用程序在这个领域内运行。 默认情况下,只有root 用户有权访问内核空间。root 用户是Linux 中的超级用户,相当于Windows 中的管理员帐户。在root 用户帐户下运行应用程序可能会引起安全风险,是不可取的。 很多服务器服务需要root 权限启动服务。然而,服务启动后,root 帐户通常会将其移至服务帐户。严格地说,Linux 中的服务帐户才是标准的用户帐户。主要区别是服务帐户仅用于运行一个服务,而不是为任何实际登录的用户准备的。 设置权限 您可以使用chmod 命令在一个文件中设置执行权限。在Linux 中,umask 设置通常用来防止下载的文件被执行,也有充分的理由相信,因为它有助于维护Linux 计算机的安全性。 大多数Linux 发行版具有一个值为022 的umask 设置,这意味着,默认情况下一个新文件权限设置为644.权限的数字表示形式采用读(4)、写(2)、执行(1) 的格式。因此,默认权限为644 的应用程序下载意味着文件所有者有读写权限,而组用户和其他用户只有读权限。 例如,为每个人赋予一个文件的执行权限,使用chmod a+x 命令。a 表示所有人,加号(+) 表示添加,而x 表示执行。同样地,如果应用程序是一个服务器服务,您应该确保只有授权帐户才有权执行此服务。 如果一个应用程序能够在标准用户帐户权限下运行,但只有特定组中的用户才需要使用它,您可以将该组所有者权限设置为可执行,然后将这些用户添加到该组中。 更具体地说,您可以在一个可执行文件中设置访问控制列表(ACL) 权限,赋予特定用户或组权限来运行该应用程序。使用setfacl 实用工具设置ACL 权限。 对于这些需要以root 用户启动进程的应用程序,比如服务器服务,您有几个选择。总结了允许用户执行需要root 权限的服务器服务的各种选项。 选项描述 作为root 用户不推荐用于服务器服务。当用户已经知道root 密码而且应用程序泄露不是首要关注问题时,可用于应用程序。 SetUID 由于安全问题,不推荐使用。SetUID 允许标准用户以另一个用户方式,比如root 用户,执行一个文件。 sudo 很常用,并且被认为是一个很好的实践。sudo 授予一个用户或组成员权限以执行可能额外需要root 权限的文件。该用户不需要知道root 密码。 带有文件权限的标准用户帐户在一个文件上为用户所有者、组所有者或其他人(所有人)

linux常见故障以及修复办法

查看开机启动顺序: (2) chroot: (3) 用grub来引导 (6) GRUB的概述 (6) 基本说明: (6) 具体的案例: (7) 模拟一些常见问题并且修复 (9) 破坏了sda的MBR中的引导程序 (9) 破坏几个重要的文件: (11) 1)人为的删除系统关键文件: (11) 2)修复linux系统 (12) 2.还原fstab文件。 (13) 3.修复内核和grub (14) 修复/etc/inittab等文件: (17) 遇到的问题: (17)

查看开机启动顺序: 1.GRUB Loading stage2 BIOS向GRUB传递控制权 2.到MBR的GRUB(下面我是显示有一个字母P,因为最开始用无人值守部署安装的时候是设定了密码,所以要密码才能进去的) 接下来是引导内核和加载映像文件。 按住e可以进入它的编辑状态:

3.启动initi进程开始执行rc.sysinit脚本然后初始化环境。 4.挂载文件系统,下面显示的是/etc/fstab开机挂载的东西。 chroot: Linux下的chroot,即change root意为切换用户的根目录,例如将/opt/chroot/目录做为某个用户的根目录,如此将锁定用户在该目录下,从而防止用户访问系统的重要文件进行窃密,或防止用户执行危险操作带来系统损害。 另外,如果某些对外开放的服务(如Apache),一旦被入侵者控制,该入侵者将可能得到系统用户的权限,从而控制整个系统,将这些服务置入chroot环境中运行,即使该入侵者控制了该服务,也还在chroot下,需要更多的时间对chroot进行破解,这样就达到了加固的目的。 什么是shell? Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell 就是围绕内核的外层。当从shell或其他程序向 Linux传递命令时,内核会做出相应的反应。shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用 程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

Linux2 进程的启动方式

Linux2 进程的启动方式 程序或者命令的执行实际上是通过进程实现的。通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。启动进程的方式有两种,分别为前台启动方式和后台启动方式。 1.以前台方式启动进程 在终端窗口的命令行上输入一个Linux命令并按Enter键,就是以前台方式启动了一个进程。例如,在终端窗口上执行“find /-name myfile.txt”命令,就以前台方式启动了一个进程,在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起,然后使用ps命令查看该进程的有关信息,如图5-1所示。 图5-1 以前台方式启动进程 2.以后台方式启动进程 要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。启动后,系统会显示如下所示的信息: 这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。 然后,出现了shell提示符,这表示已返回到前台。这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。 如果执行jobs命令可以查看当前控制台中的后台进程,如图5-2所示,可以看到当前在后台有两个进程,其中一个处于运行(Running)状态,另一个,即被挂起的进程处于停止(Stopped)状态。等过一段时间后再使用ps命令进行查看,会发现PID为3516的进程已经结束了,而PID为3385的进程还存在。

linux系统及编程基础课后答案

第1章习题答案 1. 什么是Linux? 答:Linux是一款优秀的操作系统,支持多用户、多进程、多线程,实时性好,功能强大且稳定。同时,它又具有良好的兼容性和可移植性,被广泛应用于各种计算机平台上。作为Internet的产物,Linux操作系统由全世界的许多计算机爱好者共同合作开发,是一个自由的操作系统。 2. Linux的主要特点是什么? 答:Linux具有UNIX的所有特性并且具有自己独特的魅力,主要表现在以下几个方面: 开放性 多用户 多任务 出色的稳定性能 良好的用户界面:Linux向用户提供了两种界面:用户界面和系统调用界面。 设备独立性:设备独立性是指操作系统把所有外部设备统一当作文件来看,只要安装它们的驱动程序,任何用户都可以像使用文件那样操作并使用这些设备,而不必知道它们的具体存在形式。 丰富的网络功能:完善的内置网络是Linux的一大特点,Linux在通信和网络 功能方面优于其他操作系统。其他操作系统不包含如此紧密的内核结合在一起的联接网络的能力,也没有内置这些联网特性的灵活性。而Linux为用户提供了完善的、强大的网络功能。

可靠的安全性 良好的可移植性:可移植性是指将操作系统从一个平台转移到另一个平台,使它仍然能按其自身的方式运行的能力。 3. Linux的主要组成包括什么? 答:Linux主要组成为: Linux内核(Kernel):内核(Kernel)是系统的心脏,是运行程序和管理硬件设备的内核程序,决定着系统的性能和稳定性,实现操作系统的基本功能。 Linux的Shell:Shell是系统的用户界面,提供用户与内核进行交互操作的一种接口。Shell是一个命令解释器,它解释由用户输入的命令并且把他们送到内核执行。Shell编程语言具有普通编程语言的很多特点,用这种编程语言编写shell程序与其他应用程序具有同样的效果。 Linux 文件系统:文件系统是文件存放在磁盘等存储设备上的组织方法。通常是按照目录层次的方式进行组织,用户能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限、文件的共享程度。 Linux 实用程序(utilities)和应用程序(Applications):标准的Linux系统都有一套成为应用程序的程序集,包括文本编辑器、编程语言、X Window、办公套件、Internet工具、数据库等。 4. Linux与Windows的主要区别是什么? 答:主要区别: (1)Linux的应用目标是网络 Linux的设计定位于网络操作系统。虽然现在已经实现Linux操作系统的图形界面,但仍然没有舍弃文本命令行。由于纯文本可以非常好地跨越网络进行工作,所以Linux

USB引导安装linux系统

图解制作U盘引导安装系统的方法 此方法可以安装linux,windows等多种操作系统(这里我们以GhostXPSP3.iso和ESX-4.1.0-update01-348481.iso镜像为例),制作简单,绝对实用,注意在使用时候一定要先备份好自己U盘的资料,因制作前先要格式化自己的u盘为“Fat32”格式,格式化后可以进行USB引导的制作了 一、利用bootice工具制作对U盘写入主引导记录 方法: 1.打开bootice程序 2.选择目标磁盘(这里我们选择要做引导的U盘,)点击“主引导记录M”如下图: 3.如下图选择黄色标记那个选项,选择好后点击“安装/配置”

4.接下来直接点击“写入磁盘”,如下图 5.系统会提示你“Grub4dos引导程序配置修改成功”,点击“确定”,整个引导制作过程完成,如下图: 二、拷贝和编辑一些主要文件 1.拷贝grub.exe,grldr,文件到U盘根目录下(必须放在根目录下)如下图

2.在u盘根目录下新建menu.lst文件(这个是启动菜单,你可以放好几种系统镜像,安装时候,再去菜单选择要安装的系统,这里因是用GhostXPSP3.iso和ESX-4.1.0-update01-348481.iso镜像为例故只做这两个的菜单),menu.lst文件里写入如下内容如下: timeout 10 default /default title GhostXPSP3 为菜单选择的标题(名字可以随便取) map (hd0,0)/winpe/GhostXPSP3.iso (hd32) 镜像存放的位置 map --hook chainloader (hd32) title ESX4.1 map (hd0,0)/ESX4.1/ESX-4.1.0-update01-348481.iso (hd32) map --hook chainloader (hd32) 3.去U盘根目录下建立两个文件夹“winpe”,“ESX4.1”这两个分别是镜像的位置如下图: 4.将“GhostXPSP3.iso”和“ESX-4.1.0-update01-348481.iso”两个镜像跟别考入“winpe”,“ESX4.1”两个文件夹下,到此整个制作过程结束 三、安装方法 1.把要安装系统的电脑启动项更改为从USB启动

linux grub 引导启动过程详解

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

Linux常见问题及处理方法

一、处理linux系统故障的思路 作为一名合格的linux系统管理员,一定要有一套清晰、明确的解决故障思路,当问题出现时,才能迅速定位、解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示信息,一般情况下这个提示基本定位了问题的所在,因此一定要重视这个报错信息,如果对这些错误信息视而不见,问题永远得不到解决。 查阅日志文件:有时候报错信息只是给出了问题的表面现象,要想更深入的了解问题,必须查看相应的日志文件,而日志文件又分为系统日志文件(/var/log)和应用的日志文件,结合这两个日志文件,一般就能定位问题所在。 分析、定位问题:这个过程是比较复杂的,根据报错信息,结合日志文件,同时还要考虑其它相关情况,最终找到引起问题的原因。 解决问题:找到了问题出现的原因,解决问题就是很简单的事情了。 从这个流程可以看出,解决问题的过程就是分析、查找问题的过程,一旦确定问题产生的原因,故障也就随之解决了。 二、忘记linux root密码 这个问题出现的几率是很高的,不过,在linux下解决这个问题也很简单,只需重启linux系统,然后引导进入linux的单用户模式(init 1),由于单用户模式是不需要输入登录密码的,因此,可以直接登录系统,修改root密码即可解决问题。 下面是详细的处理方法,这里我们以Redhatlinux为基准,操作步骤如下: (1)重启系统,待linux系统启动到grub引导菜单时,找到当前系统引导选项(可以按方向键展开隐藏的菜单,单处理器只有一个引导项,多处理器有3个或3个以上引导项,一般默认选项就是系统当前引导选项)。 (2)通过方向键将光标放到当前系统引导项上,然后按键盘字母“e”,进入编辑状态。 (3)然后通过上下键,选中带有kernel指令的一行,继续按键盘字母“e”,编辑该行,在行末尾加个空格,然后添加single,类似与这样: kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet single (4)修改完成,按回车键,返回到刚才的界面。 (5)最后按键盘“b”,系统开始引导。 这样系统就启动到了单用户模式下,这里的单用户根windows下的安全模式类似,在单用户模式下,只是启动最基本的系统,网络以及应用服务均不启动。单用户模式启动完毕,系统会自动进入到命令行状态下,类似与“sh-3.1#”,然后直接执行passwd,回车,系统会提示输入新的root密码两次,最后会看到修改密码成功的提示,这样就完成了root密码的修改。如果需要正常启动系统,现在只需输入“init 3”,就进入了多用户模式。用root用户重新登录系统,看看设置的新密码是否生效。 三linux系统无法启动的解决办法 导致linux无法启动的原因有很多,常见的原因有如下几种: 文件系统配置不当,比如/etc/inittab文件、/etc/fstab文件等配置错误或丢失,导致系统错误,无法启动。

Linux启动过程详解

深入浅出:Linux的启动流程刨析 Linux的启动过程,是一个Linuxer必须要熟练掌握的。通过系统的启动过程,可以更深入的理解Linux,假如Linux系统出问题的话,可以通过启动过程来分析原因,解决问题。而且,在掌握了Linux的启动流程后,还可以借助宿主机来打造自己的Linux。 下面是我画的一张简单的Linux启动流程图 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1、/sbin/init 2、/etc/inittab 3、/etc/rc.d/rc.sysinit 4、/etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4.. 5、/etc/fstab 1、关于/sbin/init与/etc/inittab 关于/sbin/init ,它是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件,我们可以通过/etc/inittab来一睹它的功能,里面的内容是一种固定的文本格式,id:runlevels:action:process 我们来通过它的内容来学习它之前,先了解写运行级别的分类(0-6): 0:关机half

1:单用户模式singel user 2:多用户模式multi user ,不提供nfs服务without nfs 3:完全多用户字符模式full multiuser text mod 4:系统预留officially undefined 5:图形登录界面graphical login 6:重启reboot id:3:initdefault: //这里定义linux的启动时的运行级别,可以看到我的主机的启动级别是3 # System initialization. si::sysinit:/etc/rc.d/rc.sysinit //紧接着,运行系统第一个脚本/etc/rc.d/rc/sysinit //它的action:sysyinit指的是定义系统初始化过程 l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 //然后就是加载服务了,他们被定义在/etc/rc.d/rcN.d l3:3:wait:/etc/rc.d/rc 3 //action:waite 这个进程在在对应级别启动一次,知道它结束为止,我的系统启动级别为3,所有执行rc 3对应的服务 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ca::ctrlaltdel:/sbin/shutdown -t3 -r now //这里定义了一个组合快捷键,熟悉吧,没错就是重启,你可以把它注释掉不用 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"//这里定义了ups电源,powerfail 指的是如果突然断电,它对应的process命令是,提示用户系统电源失效,将要关机,提醒用户把数据都存储好 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"//这里的action,powerokwaite,指的是系统恢复供电,关机取消...

 1:2345:respawn:/sbin/mingetty tty1 //开启终端,在系统准备工作做好后,就会启动出6个终端,tty1~6 mingetyy就是终端的执行命令 2:2345:respawn:/sbin/mingetty tty2 //可以看到他们对应的级别是2345,你也可以注释

windows与linux系统引导分区系统修复

【转】 [命令]windows与linux系统引导分区系统修复 2011-09-08 16:26 转载自分享 最终编辑孤独散步者的梦 环境说明: windows与linux系统并存情况下: 一、修复Linux的GRUO引导菜单: 在windows重装,卸载之后, linux引导分区修复,因为windows清除MBR中的多重开机管理程序,重新安装GRUB即可: 用Linux启动盘,或安装盘或livecd,引导进入救援模式: 插入linux系统盘是第一张,然后在出现界面时按F4或F5键,进入linux rescue模式,或直接输入“linux rescue”,再提示设定语系(选择English),键盘类型(选择US),选择是否启用网卡(选择NO),选择如何挂载Linux分区(一般选择Rdad-Only),然后进入sh#命令行! (1)、方法一:然后进入sh#命令行! 输入:“chroot /mnt/sysimage”(切换目录); 输入:“grub-install /dev/hda”(重装GRUB,/dev/hda指linux系统安装在第一硬盘) (2)、方法二:进入#sh>后: sh#grub (输入grub回车) grub>root (hd0,1) (注:这里hd0指第一硬盘,1指第一分区,不清楚按TAB键。)grub>setup (hd0) (注:指安装GRUO在第一硬盘上) 二、修复Windows引导菜单: 在linux系统删除之后,修复系统主引导扇区,出windows引导菜单方法: (1)、用启动盘进入DOS,执行: A:\> fdisk /mbr (2)、用windows2000以上的安装光盘,引导进入“系统故障修复台”: C:\windows\>fixmbr (3)、使用SPFDisk程序修复mbr: 到https://www.360docs.net/doc/5d12884715.html,下载SPFDisk软件,做成启动盘!引导系统! A:\>spf2k3rc (执行exe程序) A:\>spfdisk /mbr GRUB使用指南kes,2007-06-15 09:29:13 GRUB使用指南 GRUB是一个多重开机管理工具,它可用来激活Linux、BSD、OS/2、BeOS与 Windows95/98/NT等众多操作系统,GRUB是一个独立于操作系统之外的开机程序,并不像LILO是依靠Linux才能进行设定与维护,也提供了类似Bash的命令列模式,让使用者更方便地设定GRUB。

linux系统启动到grub后无法启动故障处理总结

故障描述 新华保险一台web服务器由于本地硬盘损坏导致文件系统只读,出现故障后客户把服务器重启,启动到grub交互式菜单无法引导,后续更换坏盘同步后还是无法引导。 故障处理过程 出现系统启动到grub无法引导,一般可能由于grub.conf文件被破坏、/boot目录被删除或者/boot文件系统损坏导致。 1.使用系统安装光盘进入救援模式 2.chroot /mnt/sysimage无法切换,df –h没有其他分区被mount,初步怀疑/文件系统损坏导致。 3.fdisk –l查看系统盘,发现该主机本地包括有三个分区,其中/dev/cciss/c0d0p3为swap分区,其他 分区需要确认是否使用lvm。 /dev/cciss/c0d0p1 linux /dev/cciss/c0d0p2 linux /dev/cciss/c0d0p3 linux swap /solaris 4.通过pvs和vgs判断是否使用lvm,pvs没有输出,vgs 报no volume groups found 说明该主机没有 使用lvm。 5.下面需要确认c0d0p1和c0d0p2挂载点信息,mkdir /mnt/root;分别mount /dev/cciss/c0d0p1和 /dev/cciss/c0d0p2到/mnt/root下 ●/dev/cciss/c0d0p1挂载时提示指定文件系统类型,该文件系统出现损坏需要修复 ●/dev/cciss/c0d0p2可以挂载,进一步检查挂载后信息,发现该文件系统为应用数据不包括/ 或/boot数据。 根据上面mount结果基本可以判断,该主机/、/boot 、/var/、/usr/ 、/tmp、/opt/ 、/home等系统文件均在/dev/cciss/c0d0p1分区上,由于/dev/cciss/c0d0p1文件系统损坏导致/boot 无法读取从而系统只能启动到grub菜单。 6.文件系统修复 ●通过dumpe2fs /dev/cciss/c0d0p1检查是否能读取出该文件系统的superblock信息,该主机可

相关文档
最新文档