发明内容
日志型文件系统不能满足信息发布系统和机顶盒系统的对文件系统保护的要求,同时还会给后期维护工作增加不小的工作量。因此,本发明的目的正是针对这两个问题,从根本上给出一个彻底的解决方法,保证直接断电对文件系统不会造成上述影响,从功能和运营成本上满足用户的需求,达到降低成本的目标。
如图1所示,在通用的Linux操作系统中,系统启动完毕后,特别是Xwindow启动完毕后,整个根文件系统是可读写的状态。同时,Xwindow正常运行时,必须保证/etc、/root、/var和/tmp这四个系统文件夹处于可读写状态,否则Xwindow不能正常启动和运行。
为此,Linux操作系统需要解决两个问题,一个问题是要保持整个根文件系统下的所有文件夹在启动和运行过程中保持只读状态,从系统启动开始就避免文件对磁盘的写入操作,这是让文件系统抗掉电的关键点,也是本发明的核心。另一个问题是,因为系统本身有运行Xwindow的需要,所以要让根文件系统下的/etc、/root、/var和/tmp这四个系统文件夹在Xwindow启动之前变为可读写状态,这样才能保证Xwindow正常启动,运行之上的应用程序。
本申请人已于另一发明申请提出了文件系统解压缩法,具体是将系统的关键文件夹/etc、/root和/var使用压缩工具变为压缩包,再将系统压缩包分别解压到对应的已经挂载为内存文件系统目录下的一种方法,这种方法使得对关键文件夹/etc、/root和/var的写入操作写入到内存当中,满足系统启动的要求。文件系统解压缩法虽然使用方便简单,却有一个固有的缺憾,那就是将三个关键目录的压缩包解压到系统目录下的过程会大大延长系统的启动时间。对于信息发布和机顶盒等定制的操作系统,启动时间是受到严格控制的,因此从系统启动时间的角度考虑,文件系统解压缩法虽然实现简单,却并不是最优的。
基于上述原因,要做到既要保护根文件系统不会被损坏,又要使Xwindow能正常启动,本发明提供了另一种抗掉电的Linux系统启动方法:通过重新挂载文件系统的方式,将根文件系统中的文件夹挂载成内存文件系统下的可读写文件夹,再采用联合文件文件夹命令,将上述可读写文件夹与磁盘上完整的对应的文件夹进行联合,使已经挂载到内存文件系统下的可读写文件夹包括了磁盘上对应文件夹下的所有内容,通过调用这些内容来完成系统的启动。
针对上述方案,本发明的抗掉电的Linux系统启动方法为联合文件系统法,其包括一个初始化步骤,即通过重新挂载文件系统的方式,将根文件系统下的四个关键文件夹/etc、/root、/var和/tmp进行重新挂载成内存文件系统下的四个可读写的空文件夹;一个文件夹恢复步骤,即通过把内存文件系统下的前三个可读写的空文件夹和磁盘上对应的只读系统文件夹通过调用联合文件夹相关命令进行联合合并,使得前三个系统中的可读写空文件夹内包含磁盘上对应的只读系统文件夹里的内容。
借此,使得对/etc、/root和/var这三个系统文件夹的写入操作只写入到已经挂载到内存系统的可读写文件夹中,而对磁盘上只读的完整文件夹没有任何影响。
所述重新挂载文件系统的方式是利用内存文件系统——tmpfs,通过挂载命令mount,将这所述四个关键目录全部挂载为内存文件系统,使这四个文件夹副本挂载为可读写状态。
所述初始化步骤还包括在通用Linux系统中,通过更改系统启动过程中的这个关键脚本rc.sysinit文件,将所述四个关键文件中存在的重新挂载的指令注释掉或者删除,从而实现根文件系统在启动和运行过程中都保持只读模式。
在系统启动之前,需要做准备工作,所述准备工作包括在特定目录下分别建立/etc、/root和/var三个文件夹的只读镜像文件夹,该只读镜像文件夹为隐藏文件夹,并将/etc、/root和/var中的所有文件全部对应的拷贝到对应的镜像文件夹中。
所述准备工作还包括:保留/etc文件夹下的fstab、inittab、ld.so.cache、mtab、rc.d和rc.sysinit这几个文件或文件夹,而将/etc下的其他的文件和文件夹全部删除,同时删除/root和/var下的文件。
其中,保留的几个文件夹的目的是为了保证系统正常启动,而删除多余的文件的目的则是为了节省磁盘空间。
所述文件夹进行联合合并是指通过调用联合文件夹相关命令,将已挂载到内存文件系统下的/etc、/root和/var可读写文件夹分别与对应的只读的镜像文件夹联合。
例如,通过调用联合文件夹相关命令,将只读的/.etc文件夹与可读写的/etc文件夹联合,将只读的/.root与可读写的/root文件夹联合,将只读的/.var与可读写的/var文件夹联合。
这里需要特别说明的一点是,/tmp文件夹不需要进行联合,因为/tmp目录下都是临时文件,系统启动过程中并不需要从这个文件夹中读取任何的配置信息或使用信息,因此/tmp目录在挂载为内存文件系统后,已经是一个空文件夹,可以直接进行读写操作。从操作系统的层面来看,这四个系统文件夹内容完整,且都可读写,满足了系统正常启动的要求,同时写操作均在内存文件系统层面操作,完全不会影响到联合的只读目录,保证了操作系统自身的只读特性,具备了实时抗掉电的能力。
初始化和文件夹恢复步骤的执行时机需要在initrd.img解压并运行和启动系统服务这两个步骤之间执行。
本发明的核心内容是通过让操作系统在正常的运行过程中,保持系统文件中的文件夹除了/etc、/root、/var和/tmp这四个系统文件夹外,始终处于只读状态,而且针对/etc、/root、/var和/tmp这四个系统文件夹的写入操作是写入到内存而不是磁盘当中,从根本上完全避免操作系统对磁盘的写入操作,从而达到保护文件系统的目的,实现完美的抗掉电方案。其中,对于这四个系统文件夹的写入操作,不是写入到磁盘中,而是写入到内存中,从而从根本上消除了读写操作对磁盘造成损坏的隐患。本发明正是通过实现内存写入而不是磁盘写入,从而完全排除了掉电导致损坏系统文件的可能性。
本发明的主要特点体现在:
(1)采用了内存文件系统,借助内存文件系统使用虚拟内存空间的特性,所有的文件均停留在物理内存当中,保证了文件夹可读写的同时,还提升了对于文件的读写速度;
(2)相对于文件系统解压缩法,需要系统文件的压缩包解压到内存文件目录下的过程所存在的延长系统的启动时间的缺点,本发明通过使用联合文件系统,将支持读写的三个空文件夹/etc、/root和/var与完整的对应的文件夹进行联合,这样,这三个目录下就包括了对应目录下的所有内容。而/tmp目录在挂载为内存文件系统后,已经是一个空文件夹,也处于可读写状态。通过联合文件系统,提供了一种快速恢复文件的方法,这种方法耗时相比文件系统解压缩法大为减少,几乎不会对系统启动时间产生影响,大大缩短了启动时间,提升了系统效率。在使用联合文件系统后,当系统遇到突然断电的情况下,也只是可读写的内存文件系统中的文件丢失,而磁盘上文件系统仍然能够保持完整性,保障系统正常启动和运行。
本发明涉及到的相关技术术语的名词解释:
挂载:指将一个设备(通常是存储设备)挂接到一个已存在的目录上(这个目录可以不为空,但挂载后这个目录下以前的内容将不可用)。若要访问存储设备中的文件,必须将文件所在的分区挂载到一个已存在的目录上,然后通过访问这个目录来访问存储设备。
文件系统:操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关的软件、被管理的文件以及实施文件管理所需的数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等工作。
内存文件系统:挂载在该文件系统中的文件都是存储在虚拟内存下,这里的虚拟内存包括物理内存和交换分区(交换分区又叫虚拟内存分区就是LI NUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。需要注意的是,虽然这个SWAP分区能够作为″虚拟″的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存,SWAP分区只是临时的解决办法)。
联合文件系统:一种堆栈式的文件系统,它可以把多个目录内容合并在一起,而目录的物理位置是分开的。联合文件系统可以将一个可读写的目录和一个只读目录进行合并,对于合并之后的目录的写入操作最终都是写入到可读写的目录当中,而对只读目录没有任何的写入操作。
X Window系统:常称为X11或X,它是一种以位图方式显示的软件视窗系统,最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具套件及显示架构的运作协定,透过软件工具及架构协定来建立操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上,如今几乎所有的现代性操作系统都能支持与使用X。
由于X只是工具套件及架构规范,本身并无实际参与运作的实体,所以必须有人依据此标准进行开发撰写,如此才有真正可用、可执行的实体,此可称为实现体。XFree86是X Window系统的一个实现,自1992年至2004年,它一直以自由发放的开放源代码模式发展着。2004年,XFree86的开发因软件许可证出现分岐,而衍生出另一个发展自XFree864.4 RC2版本源代码,名叫X.Org服务器的XWindow系统。
目前依据X的规范架构所开发撰写成的实现体中,以X.Org最为普遍且最受欢迎,并逐渐在开源Unix风格操作系统中流行。X.Org所用的协定版本X11是在1987年9月所发布,而今最新的参考实作(参考性、示范性的实作体)版本则是X11 Release 7.1(简称:X11R7.1),而此专案由X.Org基金会所领导,且在MIT授权和相似的授权许可下是自由软件。
具体实施方式
为让本发明的上述及其他目的、特征及优点能更明显易懂,下文特举本发明的优选实施例,并配合附图,作详细说明如下:
Linux系统的启动大致分为六个步骤:Grub引导,Kernel启动,initrd.img解压并运行,Linux系统的init应用程序执行rc.sysinit程序,系统脚本rc根据运行级别启动系统服务和启动图形界面Xwindow。包含抗掉电功能的Linux系统启动流程图如附图2所示,实现的具体步骤包括:
(1)Linux系统启动后直接进入Grub引导程序(步骤10),Grub通过加载Grub.conf配置文件,引导配置文件中指定分区的操作系统。
(2)引导操作系统的第一步是加载系统的kernel(系统内核),即kernel启动(步骤11),并在系统的kernel加载完毕后,将系统执行权交给kernel。Kernel在获得执行权之后,会探测当前硬件并加载对应的驱动,之后,将initr.img加载到内存中。
(3)initrd.img首先会被解压缩到内存中,initrd.img是一个小型文件系统,解压后内核会执行这个小型文件系统的核心脚本,加载USB等驱动(步骤12),之后,将执行权交给系统初始化程序init。
(4)init程序执行rc.sysinit程序(步骤13),首先加载抗掉电处理模块,该模块需执行包括初始化(步骤131)和文件夹恢复(步骤132)这两个步骤。初始化和文件夹恢复步骤的执行时机非常重要,具体是需要在initrd.img解压并运行(步骤12)和启动系统服务(步骤14)这两个步骤之间执行,否则系统会因为缺失系统文件而导致不能正常启动。
Xwindows启动必须用到/etc、/root、/var和/tmp这四个关键文件夹,因此若将需要进行写入的文件系统置于设于内存中,即可避免磁盘文件系统在突然断电的情况下遭到破坏,于本实施例中的抗掉电处理模块采用联合文件系统法,联合文件系统法是专门针对“这四个特殊系统文件夹需要设定为可读写模式”的问题而采用的方法,该方法可分为两步,一是初始化(步骤131),即将四个文件夹挂载为可读写文件夹;二是文件夹恢复(步骤132),即对四个文件夹中的内容进行恢复。
初始化(步骤131)需要对四个关键目录/etc、/root、/var和/tmp进行重新挂载,这里挂载的主要目的是改变文件夹的读写模式。这里需要用到内存文件系统——tmpfs,通过挂载命令mount,将这四个目录全部挂载为内存文件系统,这样这四个文件夹就成为了四个空的可读写文件夹。
文件夹恢复(步骤132)执行之前需要做一些准备工作,于本实施例中具体分为两个方面:第一方面,建立/etc、/root和/var文件夹的镜像文件夹/.etc/、.root和/.var,所述三个镜像文件夹为三个隐藏文件夹,将/etc、/root和/var文件夹中的所有文件全部对应的拷贝到/.etc/、.root和/.var里面;这里需要特别说明的一点是,不需要建立/tmp文件夹的镜像文件夹,因为/tmp文件夹下都是临时文件,系统启动过程中并不需要从这个文件夹中读取任何的配置信息或使用信息,因此/tmp文件夹在挂载为内存文件系统后,已经是一个空文件夹,符合系统启动的要求。
准备工作还包括第二方面,保留/etc文件夹下的fstab、inittab、ld.so.cache、mtab、rc.d和rc.sysinit这几个文件或文件夹,而将/etc下的其他的文件和文件夹全部删除,同时删除/root和/var下的文件。其中,保留这几个文件夹的目的是为了保证系统正常启动,而删除多余的文件的目的则是为了节省磁盘空间。
需要说明的是,上述准备工作是在系统启动之前,具体是定制该系统的时候,就预先在系统中制作了/.etc/、/.root和/.var三个隐藏只读文件夹,并将磁盘上/etc、/root和/var中的所有文件全部对应的拷贝到只读的/.etc/、/.root和/.var中,以便每次开机,都可以直接供系统启动时使用。
有了上述准备工作,且在初始化(步骤131)完成后,再执行第二个步骤,即文件夹恢复(步骤132):通过调用联合文件夹相关命令,将只读的/.etc文件夹和可读写的/etc文件夹联合,将只读的/.root与可读写的/root的文件夹联合,将只读的/.var与可读写的/var也同作样处理。文件系统联合完毕后,/etc、/root和/var就包含了完整的系统文件,同时具备了内存文件系统的可读写功能,而/tmp文件夹也是可读写的,如此,四个关键文件夹可读写的条件至此已经全部满足,系统包括Xwindow此时已经都可以顺序的执行并运行了。
(5)当rc.sysinit执行退出时,执行器交由系统脚本rc根据运行级别启动系统服务(步骤14)。当启动系统服务(步骤14)完毕后,最终启动图形界面Xwindow(步骤15),至此系统启动完毕。
本发明采用的联合文件系统法需要联合文件系统的支持,联合文件系统在高版本的内核中已经进入了默认支持的行列,未来这种文件系统将会得到普及。
本发明是通过将系统文件夹挂载到内存文件系统下可读写文件夹的方式,并通过联合文件夹命令,将使内存文件系统下的可读写文件夹内包括了磁盘上完整的系统文件,借此可供系统启动时调用,系统启动及运行过程中针对系统文件夹的写入操作是写入到内存而不是磁盘当中,从根本上完全避免操作系统对磁盘的写入操作,从而达到保护文件系统的目的,实现完美的抗掉电方案。
以上所述者,仅为说明本发明的优选实施方式,而非限制本发明的范围,任何本领域技术人员,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,即凡依本发明所做的均等变化与修饰,应为本发明专利范围所涵盖。