详解畅谈Linux initrd系统
创始人
2024-06-16 14:40:19
0

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应用程实际应用

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...