详解畅谈Linux initrd系统

系统 Linux
将刚刚找到的root 路径mount到Linux initrd中的/sysroot下,但要注意,这时的/sysroot就好像rescue mode的/mnt/sysimage目录,是一样的意思,都只是先将实体操作系统存在的实体路径mount到一个虚拟操作系统(在这里是initrd)的暂存目录中,再通过切换的方式转为实体的主目录。

Linux initrd有很多值得学习的地方,这里我们主要介绍Linux initrd,包括介绍nash等方面,Linux initrd 讲究了很多重要的事情,init的执行在这里分为以下几部操作,请对所区分的各个部分加以了解。

定义主目录(root)的路径

mkrootdev指令是nash这一支shell所提供的功能,主要就是在要转换之前先行将主目录定义清楚,默认会将GRUB中kernel command line所设置root=xxx中的xxx路径先建立好。

将root 路径mount到/sysroot下将刚刚找到的root 路径mount到Linux initrd中的/sysroot下,但要注意,这时的/sysroot就好像rescue mode的/mnt/sysimage目录,是一样的意思,都只是先将实体操作系统存在的实体路径mount到一个虚拟操作系统(在这里是initrd)的暂存目录中,再通过切换的方式转为实体的主目录。不同的是,在rescue mode中用的是chroot;但在Linux initrd用的则是switchroot指令,之所以会有这样的差异,是因为rescue mode直接使用了操作系统的指令,而initrd在加载时,并没有操作系统的指令可用,因此是通过nash内置的指令。或许有人会问,rescue mode不也是以Linux initrd的方式加载的吗?是的,但要在此补充说明的是,虽然都是Linux initrd,但rescue mode中的initrd是光盘直接提供的,而这里所说的Linux initrd则是安装操作系统后由操作系统直接产生的,两者有很多不同之处。您若有兴趣,不妨将光盘的initrd文件打开来看(如图4-45所示),将会发现该Linux initrd中的init文件并不是一个脚本文件,而是一个真正可以在操作系统下执行的程序。

当然,存放在CD或DVD中的Linux initrd文件是为用户安装操作系统所使用的,会遇到许多软、硬件的不同需求,因此,initrd的文件所需存放的资料(像module)远比操作系统开机所需加载的Linux initrd文件多得多。像图4-46 中Fedora Core 6安装光盘中的initrd文件几乎是操作系统下initrd文件的4倍之多。

建立其他的文件系统

在主目录(在initrd阶段为/sysroot)建好之后,setuproot指令开始运行,将Linux initrd通过init建立好的/proc、/sys、/de目录中所有资料转移到/sysroot,以方便转换到新的实体操作系统,这也是nash内置的功能,但笔者在nash的使用手册竟无法找到任何有关setuproot的描述,不知为何独漏这一支。

切换到新的root目录,并开始执行实体系统下的init文件
switchroot是nash在2.6版kernel以后的版本才可使用的新功能,刚刚setuproot把所有和操作系统有关的目录都建立在/sysroot后,setuproot会将/sysroot切换为实体操作系统下的主目录(/),完成后会顺便将所有之前Linux initrd存在内存中的资料清空,如同所有在虚拟文件系统(包括/sys、/proc或/dev等)中的资料,因此,当switchroot执行完成时,内存中就不会再有Linux initrd所建的任何目录及文件,完全由实体操作系统来运行。

总结

在此要特别强调,千万不要在您的计算机实验上述所提到nash支持的setuproot及switchroot两种功能,虽然本章一开始就说明了如何执行nash及如何实际使用nash中的功能,但如果使用到setuproot及switchroot两者其中之一,都会对操作系统造成破坏,尤其是switchroot。原因是这两者原本就是要为切换到实体操作系统做准备,但并不会理会本身所存在的路径是属于内存或是实体硬盘。

当用户执行时,会强迫由setuproot将原本在操作系统中/proc、/sys及/dev的文件先做搬移操作,这样在开机时,就会因为被删除掉许多重要文件而造成无法正常开机,更惨的是,接着会执行switchroot,我们提过这个功能会将切换过后遗留的文件全部清掉,这在实体操作系统所代表的就是将硬盘中的资料全数删除,因此,在执行完switchroot后,就只剩原本console的画面陪伴你,重开机后就一个不剩了,想做实验的用户,千万要考虑清楚再下手。

当然,在switchroot执行后,就进入操作系统程序,而这个重责大任就交给存在于实体操作系统中的init这个程序,下一章将以init开头,直到进入登录画面的每一步,都会交待得清清楚楚,当然,Linux initrd在每一个版本及每一套不同的操作系统厂商(如Red Hat、SuSE、Debian等)都或多或少有些许的不同之处,但毕竟都是使用Linux initrd的kernel,了解其中一个之后,对每个版本一定都会有较清楚的认知。

【编辑推荐】

  1. 简单讲述Linux内核系统应用
  2. 学习讨论Linux命令行内核系统
  3. 详细介绍网络安装 Linux
  4. 稳定又易于使用的Linux桌面系统
  5. 大致介绍Linux应用程实际应用
责任编辑:佚名 来源: CSDN
相关推荐

2010-03-02 16:32:35

Linux initr

2009-12-23 16:56:45

2020-08-21 10:05:22

Linux系统结构内核

2009-12-25 15:23:18

Linux shell

2009-10-22 09:20:37

Linux系统网络操作系统

2021-11-08 10:30:30

Linux僵尸命令

2021-11-06 10:17:38

Linux僵尸进程

2010-05-26 12:57:59

linux 系统监控

2009-12-01 13:35:39

Telnet服务

2009-10-22 12:27:30

linux块设备

2021-08-31 11:53:38

Linux inputLinux 系统

2009-03-05 09:43:32

Linux系统进程管理命令

2009-12-03 09:49:25

Linux系统引导程序

2009-11-10 13:43:37

Visual Stud

2009-12-29 11:07:52

Ubuntu Linu

2009-12-10 14:27:07

Linux操作系统

2009-12-23 10:05:30

Linux操作系统

2009-12-22 14:54:19

Linux系统Load

2013-01-14 16:00:29

Linux系统

2009-12-22 17:08:18

Linux系统源码包安
点赞
收藏

51CTO技术栈公众号