抗掉电的Linux系统启动方法转让专利

申请号 : CN201010181899.3

文献号 : CN102262543B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 兰雨晴李文昌董恩广王钧钟伟黄世林张木梁夏颖

申请人 : 中标软件有限公司

摘要 :

本发明涉及一种抗掉电的Linux系统启动方法,是指通过在内存中建立/etc、/root、/var和/tmp这四个系统文件夹的可读写副本,并通过运行所述四个系统文件的可读写副本来启动系统,以保持磁盘上的根文件系统在启动和运行过程中为只读状态,且满足Xwindow启动及运行时/etc、/root、/var和/tmp这四个系统文件夹为可读写状态的要求。借此,即使在频繁断电的情况时,系统既可以正常启动,又避免了对磁盘的写入操作所造成的文件系统的丢失或损坏而带来的不稳定性甚至完全不能运行的隐患。

权利要求 :

1.一种抗掉电的Linux系统启动方法,通过在内存中建立/etc、/root、/var和/tmp这四个系统文件的可读写副本,以使该系统文件的副本在Xwindow启动之前变为可读写状态供系统调用,满足系统启动及运行对该些系统文件的可读写的要求,以保持磁盘上的根文件系统在启动和运行过程中一直为只读状态,其特征在于,该方法包括:一个初始化步骤,通过重新挂载文件系统的方式,利用将根文件系统下的四个关键文件目录/etc、/root、/var和/tmp进行重新挂载成内存文件系统下的四个可读写文件夹;

一个文件夹恢复步骤,将根文件系统下的四个关键文件/etc、/root、/var和/tmp的文件内容写入到已挂载的四个可读写文件夹内,该系统包括一个特定目录,根文件系统下的/etc、/root和/var三个关键文件夹使用压缩工具打成压缩包并存放于该特定目录下,所述写入的具体方式包括通过解压缩命令,将所述三个关键文件夹的压缩包分别解压到对应的已经挂载为内存文件系统的可读写文件夹内。

2.如权利要求1所述抗掉电的Linux系统启动方法,其特征在于:所述重新挂载文件系统的方式是利用内存文件系统——tmpfs,通过挂载命令mount,将所述四个关键文件目录全部挂载为内存文件系统,并使这四个文件夹副本设为可读写状态。

3.如权利要求2所述抗掉电的Linux系统启动方法,其特征在于:所述初始化步骤还包括在通用Linux系统中,通过更改系统启动过程中的这个关键脚本rc.sysinit文件,将所述四个关键文件中存在的重新挂载的指令注释掉或者删除,从而实现根文件系统在启动和运行过程中都保持只读模式。

4.如权利要求1所述抗掉电的Linux系统启动方法,其特征在于:对已挂载的四个可读写文件夹的写入操作,需要避免写入到磁盘中,以消除读写操作对磁盘造成损坏的隐患。

5.如权利要求1所述抗掉电的Linux系统启动方法,其特征在于:初始化和文件夹恢复步骤的执行时机需要在initrd.img解压并运行和启动系统服务这两个步骤之间执行。

6.如权利要求1所述抗掉电的Linux系统启动方法,其特征在于:所述特定目录以及该特定目录下存放的/etc、/root和/var三个关键文件夹的压缩包是在定制系统时准备的。

说明书 :

抗掉电的Linux系统启动方法

技术领域

[0001] 本发明涉及一种Linux系统的启动方法,尤其是一种抗掉电的启动方法。

背景技术

[0002] 在信息发布系统和机顶盒系统等类似的Linux定制系统中,实际应用中都会存在这样一类需求,就是在用户直接断电后,盒子中的操作系统仍然能够正常启动,不允许出现因为突然掉电而导致文件系统损坏,致使操作系统无法正常启动的情况。
[0003] 对这类情况,普遍的做法是,采用日志型文件系统,即基于日志对磁盘进行检查修复,大幅度减少文件系统在遇到断电故障等不可预测的事件时用于恢复文件系统的一致性所需要的时间,可以说,这种方法基本上能够解决通用操作系统下,突然断电情况时导致损坏文件系统的问题。然而,在信息发布系统和机顶盒系统等Linux定制系统中,用户经常采用的是直接断电的关机方式,当出现如此频繁断电的情况时,采用日志型文件系统即使能对磁盘进行较快的检查和修复,也仍然不能完全避免文件系统的丢失和不完整性的问题,这个问题在实际应用当中是用户绝对不能接受的。同时,随着这些错误日积月累的增加,文件的不断丢失和损坏直接影响到系统的正常运行,而解决问题的唯一办法就是格式化文件系统,重新安装操作系统。这无形之中就会给后期系统维护带来大量的工作量,增加了运营商的维护成本。
[0004] 就目前Linux下经常使用的文件系统来讲,无论是EXT2,EXT3,XFS,还是REISERFS,且先不论它们是否支持日志对磁盘的写入功能,但都无法避免对磁盘的写入操作。而只要出现对磁盘的物理写入,那么就存在文件损坏的可能性,操作系统也存在因为文件丢失或损坏而带来的不稳定性甚至完全不能运行的隐患。

发明内容

[0005] 由于日志型文件系统不能满足信息发布系统和机顶盒系统的对文件系统保护的要求,同时还会给后期维护工作增加不小的工作量。因此,本发明的目的正是针对这两个问题,从根本上给出一个彻底的解决方法,保证直接断电对文件系统不会造成上述影响,从功能和运营成本上满足用户的需求,达到降低成本的目标。
[0006] 如图1所示,在通用的Linux操作系统中,系统启动完毕后,特别是Xwindow启动完毕后,整个根文件系统是可读写的状态。同时,Xwindow正常运行时,必须保证/etc、/root、/var和/tmp这四个系统文件夹处于可读写状态,否则Xwindow不能正常启动和运行。
[0007] 在这种情况下,既要保护根文件系统不会被损坏,又要使Xwindow能正常启动,本发明的主要思路是:通过在内存中建立/etc、/root、/var和/tmp这四个系统文件的可读写副本,以使该些系统文件的副本在Xwindow启动之前变为可读写状态供系统调用,满足系统启动及运行对该些系统文件的可读写的要求,并通过调用所述四个系统文件的可读写副本来启动系统,以保持磁盘上的根文件系统在启动和运行过程中一直为只读状态。
[0008] 保持整个根文件系统在启动和运行过程中保持只读状态,从系统启动开始就避免对磁盘的写入操作,这是让文件系统抗掉电的关键点,也是本发明的核心;让/etc、/root、/var和/tmp这四个系统文件夹在Xwindow启动之前变为可读写状态,这样才能保证Xwindow正常启动,运行之上的应用程序。
[0009] 要实现述上述目的,本发明包括一个初始化步骤,即通过重新挂载文件系统的方式,将根文件系统下的四个关键文件目录/etc、/root、/var和/tmp进行重新挂载成内存文件系统下的四个可读写文件夹;一个文件夹恢复步骤,即对上述四个文件夹的内容进行恢复。
[0010] 所述重新挂载文件系统的方式是利用内存文件系统——tmpfs,通过挂载命令mount,将这所述四个关键目录全部挂载为内存文件系统,使这四个文件夹就成为四个空的可读写文件夹。
[0011] 其中,初始化步骤可在通用Linux系统中,通过更改系统启动过程中的这个关键脚本rc.sysinit文件,将所述四个关键文件中存在的重新挂载的指令注释掉或者删除,从而实现根文件系统在启动和Xwindow运行过程中都保持只读模式。
[0012] 所述文件夹恢复步骤是指将根文件系统下的四个关键文件/etc、/root、/var和/tmp的文件内容写入到已挂载的四个可读写文件夹内。
[0013] 该系统另包括一个特定目录,根文件系统下的/etc、/root和/var三个关键文件夹使用压缩工具打成压缩包并存放于该特定目录下,所述写入的具体方式包括通过解压缩命令,将所述/etc、/root和/var三个关键文件夹的压缩包分别解压到对应的已经挂载为内存文件系统的可读写文件夹内。比如,可通过对rc.sysinit文件进行更改,增加压缩包的解压部分,再通过解压缩命令,将特定目录下的三个系统文件压缩包分别解压。
[0014] 此时,系统的/etc,/root和/var三个文件夹全部可读写,同时系统文件也已经通过解压缩的方法全部恢复完毕,而/tmp文件夹也是可读写的,如此,四个关键文件夹可读写的条件至此已经全部满足,系统包括Xwindow此时已经都可以顺序的执行并运行了。
[0015] 上述写入文件的方式除了解压缩的方式,还可以采用其它方式进行,例如利用文件系统拷贝相应的备份文件到对应的已经挂载为内存文件系统的可读写文件夹内。
[0016] 其中,对于已挂载的四个可读写文件夹的写入操作,需要避免写入到磁盘中,这样才能从根本上消除读写操作对磁盘造成损坏的隐患。
[0017] 初始化和文件夹恢复步骤的执行时机需要在initrd.img解压并运行和启动系统服务这两个步骤之间执行。
[0018] 于本实施例中,所述特定目录以及特定目录下存放的/etc、/root和/var三个关键文件夹的压缩包是在定制系统时准备的。本发明的核心内容是通过让操作系统在正常的运行过程中,保持根文件系统始终处于只读状态,从根本上完全避免操作系统对磁盘的写入操作,从而达到保护文件系统的目的,实现完美的抗掉电方案。
[0019] 本发明的主要特点体现在:
[0020] (1)采用了内存文件系统的启动方式,且所有的文件均停留在物理内存当中,保证了文件夹可读写的同时,还提升了对于文件的读写速度;
[0021] (2)采用文件夹压缩包解压的方法,不依赖于任何特殊的文件系统和工具,原理简单,使用方便。
[0022] 本发明涉及到的相关技术术语的名词解释:
[0023] 挂载:指将一个设备(通常是存储设备)挂接到一个已经存在的目录上(这个目录可以不为空,但挂载后这个目录下以前的内容将不可用)。若要访问存储设备中的文件,必须将要访问的文件所在的分区挂载到一个已经存在的目录上,然后通过访问这个目录来访问存储设备的文件。
[0024] 文件系统:操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等工作。
[0025] 内存文件系统:挂载在该文件系统中的文件都是存储在虚拟内存下,这里的虚拟内存包括物理内存和交换分区(交换分区又叫虚拟内存分区就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。需要注意的是,虽然这个SWAP分区能够作为″虚拟″的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存,SWAP分区只是临时的解决办法)。
[0026] X Window系统:常称为X11或X,它是一种以位图方式显示的软件视窗系统,最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具套件及显示架构的运作协定,透过软件工具及架构协定来建立操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上,如今几乎所有的现代性操作系统都能支持与使用X。
[0027] 由于X只是工具套件及架构规范,本身并无实际参与运作的实体,所以必须有人依据此标准进行开发撰写,如此才有真正可用、可执行的实体,此可称为实现体。XFree86是XWindow系统的一个实现,自1992年至2004年,它一直以自由发放的开放源代码模式发展着。2004年,XFree86的开发因软件许可证出现分岐,而衍生出另一个发展自XFree864.4RC2版本源代码,名叫X.Org服务器的XWindow系统。
[0028] 目前依据X的规范架构所开发撰写成的实现体中,以X.Org最为普遍且最受欢迎,并逐渐在开源Unix风格操作系统中流行。X.Org所用的协定版本X11是在1987年9月所发布,而今最新的参考实作(参考性、示范性的实作体)版本则是X11 Release 7.1(简称:X11R7.1),而此专案由X.Org基金会所领导,且在MIT授权和相似的授权许可下是自由软件。

附图说明

[0029] 图1为现有通用的Linux系统启动流程图。
[0030] 图2为本发明抗掉电的Linux系统启动流程图。

具体实施方式

[0031] 为让本发明的上述及其他目的、特征及优点能更明显易懂,下文特举本发明的优选实施例,并配合附图,作详细说明如下:
[0032] Linux系统的启动大致分为六个步骤:Grub引导,Kernel启动,initrd.img解压并运行,Linux系统的init应用程序执行rc.sysinit程序,系统脚本rc根据运行级别启动系统服务和启动图形界面Xwindow。包含抗掉电功能的Linux系统启动流程图如附图2所示,实现的具体步骤包括:
[0033] (1)Linux系统启动后直接进入Grub引导程序(步骤10),Grub通过加载Grub.conf配置文件,引导配置文件中指定分区的操作系统。
[0034] (2)引导操作系统的第一步是加载系统的kernel(系统内核),即kernel启动(步骤11),并在系统的kernel加载完毕后,将系统执行权交给kernel。Kernel在获得执行权之后,会探测当前硬件并加载对应的驱动,之后,将initr.img加载到内存中。
[0035] (3)initrd.img首先会被解压缩到内存中,initrd.img是一个小型文件系统,解压后内核会执行这个小型文件系统的核心脚本,加载USB等驱动(步骤12),之后,将执行权交给系统初始化程序init。
[0036] (4)init程序执行rc.sysinit程序(步骤13),首先加载抗掉电处理模块,该模块需执行包括初始化(步骤131)和文件夹恢复(步骤132)这两个步骤。初始化和文件夹恢复步骤的执行时机非常重要,具体是需要在initrd.img解压并运行(步骤12)和启动系统服务(步骤14)这两个步骤之间执行,否则系统会因为缺失系统文件而导致不能正常启动。
[0037] Xwindows启动必须用到/etc、/root、/var和/tmp这四个特殊文件夹,因此若将需要进行写入的系统文件置于设于内存中,即可避免磁盘文件系统在突然断电的情况下遭到破坏,于本实施例中的抗掉电处理模块采用文件系统解压缩法,文件系统解压缩法是专门针对“这四个特殊系统文件夹需要设定为可读写模式”的问题而采用的方法,该方法可分为两步,一是初始化(步骤131),即将四个文件夹挂载为可读写文件夹;二是文件夹恢复(步骤132),即对四个文件夹中的内容进行恢复。
[0038] 初始化(步骤131)需要对四个关键目录/etc、/root、/var和/tmp进行重新挂载,这里挂载的主要目的是改变文件夹的读写模式。这里需要用到内存文件系统——tmpfs,通过挂载命令mount,将这四个目录全部挂载为内存文件系统,这样这四个文件夹就成为了四个空的可读写文件夹。
[0039] 文件夹恢复(步骤132)执行之前需要做一些准备工作:于本实施例中是将系统的/etc、/root和/var三个关键文件夹使用压缩工具打成压缩包,在特定目录下,建立一个隐藏文件夹,将这三个文件夹压缩包拷贝进去。这些准备工作是在系统启动之前就预先完成的。这里需要特别说明的一点是,/tmp文件夹不需要打成压缩包,因为/tmp目录下都是临时文件,系统启动过程中并不需要从这个文件夹中读取任何的配置信息或使用信息,因此/tmp目录在挂载为内存文件系统后,已经是一个空文件夹,符合系统启动的要求。
[0040] 需要说明的是,上述准备工作,在本实施例中是在系统启动之前,即定制该系统的时候,就预先在系统中准备好了/etc、/root和/var三个关键文件夹的压缩包,以便每次开机,都可以直接供系统启动时使用,以便更快速启动。
[0041] 初始化(步骤131)完成后,执行第二步文件夹恢复(步骤132):对rc.sysinit文件进行更改,增加压缩包的解压部分,分别是通过解压缩命令,将特定目录下的三个系统文件压缩包分别解压到对应的已经挂载为内存文件系统的目录下,此时,系统的/etc、/root和/var三个文件夹全部可读写,同时系统文件也已经通过解压缩的方法全部恢复完毕,而/tmp文件夹也是可读写的,如此,四个关键文件夹可读写的条件至此已经全部满足,系统包括Xwindow此时已经都可以顺序的执行并运行了。
[0042] 需要说明的是上述文件恢复步骤,除了可通过解压缩到内存文件系统的方式,还可以采用直接将磁盘上根文件系统的/etc、/root和/var的文件的备份内容直接拷贝到对应的已经挂载为内存文件系统的可读写文件夹内。
[0043] (5)当rc.sysinit执行退出时,执行器交由系统脚本rc根据运行级别启动系统服务(步骤14)。当启动系统服务(步骤14)完毕后,最终启动图形界面Xwindow(步骤15),至此系统启动完毕。
[0044] 本发明所需要的工具,仅包括内核中自带支持的内存文件系统——tmpfs和一个压缩解压缩工具,并不需要其他文件系统或者复杂工具的支持,也不依赖于特殊软件或文件系统,实现方法简单有效,且能在最短时间内实现只读文件系统上运行Xwindow系统的目标,满足了抗掉电的要求,降低了运营商的运营维护成本,符合用户的需求。
[0045] 以上是以重新挂载文件系统的方式,使需要进行写入的系统文件置于物理内存中,其仅为说明本发明的优选实施方式,而非限制本发明的范围,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,即凡依本发明所做的均等变化与修饰,应为本发明专利范围所涵盖。