基于嵌入式LINUX系统的一种硬盘管理机制的研究与开发

2014-09-24 00:43钟明辉朱守元
软件工程 2014年4期
关键词:嵌入式系统

钟明辉 朱守元

摘 要:随着嵌入式系统使用越来越广泛,嵌入式系统越来越多地遇到大量数据保存的需求,而硬盘是大数据量保存的第一选择,在这种情况下,硬盘的稳定性及使用寿命就成为设计系统时需要考虑的一个重要要素。该文主要描述了一种对于在嵌入式Linux下使用ext3格式的硬盘的使用与维护机制,其关键在于结合了在实际使用过程中较常见的问题,然后相应的给出了解决方法。通过添加这些硬盘处理机制,有效提升了硬盘的工作稳定性。

关键词:嵌入式系统;Linux;硬盘维护;文件系统;ext3

中图分类号:TP31 文献标识码:B

1 引言(Introduction)

1.1 硬盘保护机制研究的背景和意义

随着嵌入式系统使用越来越广泛,嵌入式系统越来越多的遇到大量数据保存的需求。硬盘是计算机系统中最重要的存储设备之一,是大数据量保存的第一选择。此时,硬盘的稳定性及使用寿命就成为设计嵌入式系统时需要考虑的一个重要要素。本文主要描述了一种对于在嵌入式Linux下使用ext3格式的硬盘的使用与维护机制。

1.1.1 嵌入式系统的特点

嵌入式Linux操作系统是针对不同的应用需求,对Linux内核进行裁剪修改使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式系统一般包含嵌入式微处理器、外围硬件设备、嵌入式操作系统和应用程序四个部分[1]。

相比于通用电脑,嵌入式系统的优势表现为如下几个方面:(1)体积小,易于安放;(2)采用专用芯片,有更高的效率与可靠性;(3)丰富的外设接口;(4)可裁剪的软件系统;(5)更强的实时性。

1.1.2 硬盘的特性介绍

下面我们从两个方面来介绍硬盘:硬盘的内部物理结构、硬盘分区介绍。

一、硬盘的内部物理结构

首先分析硬盘的内部物理结构,可以分为四部分:磁头、磁道、扇区、柱面,下面分别介绍。

(1)磁头:磁头是硬盘读取数据的重要部件,磁头的主要作用是实现磁信息与电信号之间的转换,实现数据传输[2]。

(2)磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道[3]。

(3)扇区:将磁盘圆形的盘片划分成若干个扇形区域,这就是扇区,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。

(4)柱面:硬盘通常由重叠的一组盘片构成,每个盘面都被划分为同等数目的磁道,并从外向内进行编号,具有相同编号的磁道就形成一个圆柱,称为磁盘的柱面。我们通常所说的硬盘的CHS参数,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS参数,就可以确定硬盘的容量。

二、硬盘分区介绍

硬盘分区是指对硬盘的物理存储空间进行逻辑划分,将一个较大容量的硬盘分成多个大小不等的逻辑区间。将一个硬盘划分出若干个分区,分区的数量和每一个分区的容量大小是由用户根据自己的需要来设定的[4]。

硬盘分区的概念细分,又可以分为主引导分区(master boot recorder,MBR)、主分区、扩展分区、逻辑分区。主引导分区就是指整个硬盘的信息区,主分区、扩展分区、逻辑分区都是指实际文件数据放置的地方。

我们使用Linux下常用的ext3文件系统为例,来描述一个分区的内部结构。硬盘分区首先被划分为一个个的块(block)。这些块被聚在一起分成几个大的块组(block group)。

每个块组都相对应一个组描述(group descriptor),这些组描述被聚在一起放在硬盘分区的开头部分,跟在超级块(super block)的后面[5]。

在块组的组描述中,其中有一个块指针指向这个块组的块位图(block bit-map),块位图中的每个位表示一个块。在块组的组描述中另外有一个块指针指向节点位图(inode bitmap),里面的每一个位相对应一个文件节点。在块组的描述中还有一个重要的块指针,是指向节点表。这个节点表就是这个块组中所聚集到的全部节点放在一起形成的。

一个节点当中记载的最关键的信息,是这个节点中的用户数据存放在什么地方。用户文件的内容存放在什么地方,这就是一个节点包含的信息。ext3文件系统的硬盘布局图,如图1所示。

1.1.3 保护机制的必要性

硬件都存在一个使用寿命的问题,硬盘也是如此。

硬盘对于环境有较高的要求,振动、温度、灰尘都对硬盘的使用寿命有严重影响。特别是在操作硬盘的过程中,突然断电,极有可能损坏硬盘。另外,对硬盘不正确的操作,例如,过于频繁的读写硬盘,没有设置正确的硬盘工作模式,也会影响硬盘的使用期限。

所以,在硬盘的使用过程中,有一些需要注意的事项,这也就是我们要进一步说明的硬盘的保护机制,本文主要是针对软件方面的维护机制进行描述。

1.2 本文的主要内容和安排

本课题的研发目标是开发出对嵌入式系统下硬盘的保护机制,通过多层次的保护,提升硬盘使用寿命,提供存储系统的稳定性。

2 硬盘问题类型介绍(Introduction of problem of hard disk)

硬盘在使用过程中,由于使用环境、使用过于频繁或使用方式不当,会导致出现多种问题。

下面,我们先了解一下硬盘在Linux系统下是如何使用的,然后详细描述硬盘使用过程中的常见问题。

2.1 Linux下硬盘加载使用过程

Linux下硬盘加载使用过程,大体上可以分为四部分:识别硬盘、分区管理、建立文件系统、读写文件。

2.1.1 Linux系统识别硬盘endprint

系统初始时根据MBR的信息来识别硬盘,其中包括了一些执行文件用来载入系统。在分区表中,主要储存了以下信息:分区号、分区的起始磁柱、磁柱的总数。所以在系统初始化时,就根据分区表中的这三项信息来识别硬盘。

2.1.2 硬盘分区管理

要对硬盘进行分区管理与维护,首先需要有一个分区方案。如今的硬盘基本上都在200GB以上,如果将这样的海量硬盘只分一个区或者分成很多个小区,在一定程度上都会影响硬盘的易用性和性能。不同的用户有不同的实际需要,分区方案也各不相同。

2.1.3 建立文件系统

我们刚建立的分区,还不能直接用来存放资料,必须先对这个分区做格式化的工作,格式化就是将分区划分成一格一格的块,而每个块就是文件系统存取资料的最小单位,所以才可以将资料存放在这些块中。多个块会组成一个组;除了启动扇区之外,第一个块称为超级块。在超级块中包含了磁盘的信息,例如块的大小、片断大小、块组数、每个块组包含的块数、每组节点数、总字节数和总块数等[6]。一个分区就是由超级块及多个块组构成。

2.1.4 读写文件

最常见的文件操作是读、写,另外还有一些文件属性相关访问,例如文件相关信息,例如目录、访问时间、文件大小等信息的查询与修改等。

对文件的读写,基本上是依据文件系统格式,进行相应规则下的操作,与具体的文件格式相关,不同文件系统格式的操作,会有很大差异。然而,对于用户而言,却不必关心具体操作系统如何操作硬盘,只需要依据系统提供的通用的文件访问方式,进行操作即可。

2.2 硬盘常见问题

在硬盘使用过程中,有如下常见问题:访问失败、分区挂载失败、找不到硬盘分区、探测不到硬盘、硬盘物理损坏,下面分别进行介绍。

2.2.1 访问失败

访问失败,这是最为常见的硬盘访问问题,也是修复可能性相对比较高的问题。按访问失败的类型来划分,包括五种情况:(1)创建文件失败;(2)打开文件失败;(3)打开目录失败;(4)读文件失败;(5)写文件失败。

可能导致访问失败的原因,大体上可以分为没有硬盘分区的访问权限,文件路径不存在,磁盘分区已满,硬盘损坏等。

2.2.2 分区挂载失败

在访问硬盘分区之前,需要先挂载分区到文件系统,在Linux下,是使用mount命令,mount命令的作用是加载文件系统[7],映射到相应的挂载点上去。在某些情况下,挂载会出现失败。

2.2.3 找不到硬盘分区

在挂载硬盘分区之前,需要先找到硬盘分区。在Linux下,硬盘分区的存在路径,第一个硬盘对应的设备名称为/dev/hda,第一个硬盘的分区对应设备名称通常为/dev/hdax(x为分区号)。若分区本身有问题,就可能导致找不到相应设备名称了。

2.2.4 探测不到硬盘

在Linux系统启动过程中,会进行硬盘的探测。IDE接口的探测流程如下:

(1)先加载通用的IDE驱动程序。

(2)初始化IDE的控制器,IDE控制芯片驱动加载后,进行初始化传输模式。

(3)接着使用IDE控制器查找连接在IDE接口上的设备,如果检查到硬盘则加载IDE硬盘的驱动程序,设置该硬盘的基本参数。

这里每一步出错,都会导致探测不到硬盘。

2.2.5 硬盘物理损坏

最严重的硬盘问题,是硬盘物理损坏。

物理硬盘损坏是指硬盘本身的构成器件损坏,如盘片、磁头、控制电路等,最大的特点是硬盘有咔嗒咔嗒的响声或者根本就不转了,并且不能读盘或者是根本就在计算机上查找不到硬盘。

对于物理损坏,就不是软件上可以解决的了,只能是通过专业硬件维修人员来维修。

3 硬盘维护机制(Maintenance mechanism of hard disk)

由于硬盘本身的工作机理,同时嵌入式系统经常工作于极其不同的环境下,就会导致在使用过程种,不可避免会出现一些问题。那么,我们就可以根据这些可能出现的问题,提前进行预防,对于已经出现的问题,预先提供处理机制,或进行修复处理。

下面介绍本课题采用的硬盘保护的方式,然后具体描述硬盘维护机制的软件架构。

3.1 硬盘保护方式

硬盘保护方式与我们使用硬盘的方式及硬盘运行环境有着密切的关系。我们考虑的嵌入式系统,其启动程序存储于flash上,大量数据则存储于硬盘里面。在有数据写入时,启动硬盘进行写入,在查询读出时进行读硬盘,其他时候,不对硬盘进行操作。虽然出于对系统稳定性的考虑,没有使用硬盘作为系统启动部分,但是本文下面描述的方法,大部分也同样适用于使用硬盘做启动存储的系统。

3.1.1 选择恰当的硬盘工作模式

硬盘的工作模式,由于考虑到节电、延长寿命,各硬盘厂家都提供了多种工作模式,这些工作模式有所不同,不过大体上,可以分为空闲模式和睡眠模式。

空闲模式,就是在硬盘不工作的时候,由于没有进行读写操作,相比较读写时,功耗有所降低。这种模式下,硬盘电机仍然在转动,当需要再次开始工作时,可以快速恢复工作。

睡眠模式是一种节能状态。进入睡眠模式,实际上就是磁头停放在启停区,然后让硬盘电机停转,由于电机是硬盘耗电的主要部分,停止电机能让整个硬盘的功耗大幅度降低。

3.1.2 减少访问硬盘的频率

对硬盘过于频繁的访问也会影响硬盘的寿命,这里说的访问,不仅仅是写文件、读文件,还包括对文件的打开与关闭,对硬盘容量、目录内容等的查询,对目录的操作,对文件属性的更改等。

减少硬盘访问的技巧,主要是要进行整体的梳理硬盘访问相关代码,去掉不必要的访问,优化访问流程。要尽量减少不必要的打开关闭操作,对于硬盘上的文件,最好是能做到只打开一次,然后进行读写操作,在所有操作完成后进行一次性关闭。只在必要的时候,才查询硬盘容量、目录内容等。endprint

还有很重要的一点,就是尽量不要使用无缓冲写文件模式。在Linux系统下,向硬盘写入的数据,是暂存在系统缓冲中的,这样是为了减少请求写硬盘的次数并改进程序的性能。只有在缓冲已经写满或者一段时间后,系统统一进行一次刷新,此时才真正写入硬盘。延迟写减少了磁盘读写次数,但是却降低了文件内容的更新速度,使得欲写到文件中的数据在一段时间内并没有写到磁盘上[8]。对于某些关键的不能丢失的文件,需要设置写硬盘的方式为无缓冲模式,即一旦发出写命令,就阻塞等待真正的写入硬盘完成才返回。除了那些特别关键不能丢失的文件之外,其他的文件,最好是不要使用无缓冲模式,因为无缓冲模式也会大幅增加对硬盘的实际操作次数。

3.1.3 修复硬盘分区信息

虽然上面我们已经做了多方面的预防措施,但是由于实际工作环境的各不相同,还是有可能导致硬盘的异常,所以我们还需要考虑,在硬盘确实遇到异常之后,如何恢复丢失的数据。

分区挂载失败,是我们比较常见的问题之一,那么,我们挂载硬盘分区失败后,是否就没有方法恢复里面的数据了呢?

答案是有可能恢复的!

这里我们先了解一下数据的存放方式,要使用硬盘等介质上的数据文件,通常需要依靠操作系统所提供的文件系统功能,文件系统维护着存储介质上所有文件的索引[9]。因为效率等诸多方面的考虑,在我们利用操作系统提供的指令删除数据文件或进行格式化操作的时候,磁介质上的磁粒子极性并不会被清除,操作系统只是对文件系统的索引部分进行了修改。正是操作系统这样处理存储的方式,为我们进行数据恢复提供了可能。

下面我们分析一下硬盘分区挂载的过程,对于Linux系统,挂载就是采用mount命令,mount把现有的文件树中的一个目录映射为新加入的文件系统的根[10]。对于一个设备,例如我们的硬盘分区,它本身是已经指定了文件系统格式的,是ext3格式,而根文件系统,不一定与设备文件系统格式一致,例如,在flash上比较常见的文件系统如jffs2、yaffs2等。Linux系统如何管理不同的文件系统,是内核里面的事情,我们只需要知道是哪个目录对应于我们的设备就行了。

让我们关注一下mount的操作过程,mount的过程就是把设备的文件系统加入到linux的虚拟文件系统vfs框架中,主要分三个步骤:

(1)首先,要mount一个新的设备,需要创建一个新的超级块(super block)。这通过要mount的文件系统的文件系统类型,例如我们的ext3来调用相关函数创建一个新的super block。

(2)对于任何一个准备mount的文件系统,都要有一个虚拟文件系统的挂载点(vfsmount), 创建这个vfsmount,并设置好其属性。当文件系统被实际安装时,将有一个vfsmount结构体在安装点被创建[11]。

(3)将创建好的vfsmount加入到系统中。

由上面的mount过程可知,在Linux系统本身运行正常的情况下,挂载的成功与否,很大程度上与分区的超级块信息相关。而硬盘分区的超级块信息基本上就是直接来源于分区表信息,所以我们首先关注的就是分区表的修复。

当然,Linux系统已经提供了修复硬盘的工具:fsck。但是在嵌入式系统实际使用过程中,我们却遇到了问题:内存不够用!原来是fsck在修复过程中,会占用较多的内存,特别是在分区较大的情况下,对内存的要求是非常高的,而嵌入式系统的内存,通常都是按照需求配备,不会留下很多的空闲内存。

下面,介绍我们的应对策略:

首先,硬盘分区正常的情况下,备份硬盘分区信息。通常,这个信息量不大。

其次,在系统启动时,检查硬盘加载情况,若是有设备存在,而且mount失败,则极有可能是分区信息损坏,然后就进行硬盘分区信息的修复。

这个策略的主体部分,是进行硬盘分区信息的修复,其中又要分步骤描述:

(1)首先,读取硬盘备份信息,获取硬盘分区基本信息。

(2)然后读取每个硬盘分区的块使用情况、节点使用情况,更新到备份分区信息里。

(3)使用更新后的备份分区信息,替换掉硬盘里损坏的分区信息。

(4)最后,重新mount该分区。

这样一个过程,内存使用是非常有限的,完全能实现使用较小的内存实现分区表的修复工作。

3.1.4 修复日志信息

挂载过程失败的原因,也有可能是由于ext3文件系统的日志部分损坏。由于具体到日志的更新机制,比较复杂,本文不进行讨论,此处的修复机制,是从应用层面上来说的,使用比较简单的操作来尝试修复ext3文件系统的日志部分。

如此操作之后,若之前存在因为日志文件异常而访问ext3格式的硬盘异常,会因为转换到ext2格式,而清理掉了所有日志信息,在再次转换到ext3格式时,建立了一个新的日志信息,这样就解决了日志信息异常的问题了。

3.1.5 修复只读文件系统

对于ext3文件系统格式,有时会由于硬盘分区信息的异常,在系统启动后,将分区设置为只读模式。此时,若判断的程序中,没有考虑到,会导致写硬盘操作异常。

其实导致只读文件系统,通常就是分区信息异常导致的问题。在这里特意提出来,就是在实际使用过程中,极有可能忽略此问题,往往在发现读取硬盘状态成功后,就以为对硬盘的访问都是正常的了,而在后续的使用过程中,却遇到写失败的错误。

所以,在我们注意到这个问题之后,解决问题也是比较简单的,就是在判断文件系统状态时,添加一个写操作,如果写操作成功了,则此分区就是可写的,若写操作失败了,就是只读文件系统了。遇到只读文件系统的处理,也是修改硬盘分区信息,前面已经说过了,就不再赘述。endprint

3.1.6 格式化

3.1.7 动态适应不同容量的硬盘

设计硬盘使用机制时,是必须要考虑到对不同容量的支持的,有三个原因。

(1)在市面上存在着多种容量的硬盘,嵌入式产品的使用场景比较复杂,需要支持市面上不同容量的硬盘。

(2)在现场使用过程中,用户可能需要即时更换硬盘,此时可能导入不同容量的硬盘,此时就需要系统能动态适应不同容量的硬盘。

(3)我们还要看到将来硬盘存储容量的变化:硬盘的存储容量每年都在增长,其增长速度基本符合摩尔定律,大约每5年就能提高至10倍,我们必须提前考虑到对可预见的将来会出现的新的大容量硬盘的支持。

由于以上的几个原因,所以我们需要在硬盘维护机制中添加对不同硬盘容量的支持。只有充分考虑到可能会发生的变化,我们的系统才能是比较稳定的。

3.1.8 动态切换分区

考虑到可能会遇到修复分区信息也不能修复的分区的情况,会导致整个分区被格式化的情况,这里,我们就需要考虑到若分区的损坏,我们如何将损失减少的问题。

若是整个系统只有一个分区,则发生这种情况,一旦格式化,就是整个硬盘的数据都丢失了。所以,可以考虑将一个硬盘分为几个区,这样,就将数据丢失的风险降低了。使用多个分区,就带来了一个新的需求:分区切换。在当前使用硬盘分区将满之前,预先进行分区切换。另外要考虑的一点是,当遇到一个分区不能进行正常访问时,也需要进行分区切换。

3.2 硬盘维护软件架构

将上面提出的多种硬盘处理方式进行综合,就构成了我们的硬盘维护软件的主框架,硬盘维护软件的主流程如图2所示。

通过以上硬盘维护软件框架,可以实现对硬盘的状态判断,在遇到异常时进行各种异常处理,并能支持分区的动态切换等功能。

4 测试结果(Test results)

对于硬盘工作稳定性的测试,我们首先是让系统工作一段时间,然后查看系统整体是否正常运行,然后跟踪硬盘是否出现异常情况。通过三个月的连续运行情况,对比是否启用硬盘维护方式的系统,测试结果见表1。

测试结果分析:在对分区的统计中,使用了硬盘维护机制的系统只出现了一次分区的异常,其异常情况相比较未启用硬盘维护机制的系统减小到之前的25%。从总体运行情况上看,启用硬盘维护机制的系统发生的异常明显减少。测试结果清楚的显示了使用硬盘维护机制之后的硬盘,其工作稳定性得到了极大的提高。

5 结论(Conclusion)

本课题是从实际应用出发,研究并开发了一套硬盘维护机制,提升嵌入式系统下硬盘的工作稳定性。经过一年多的开发,已经基本实现了这一目标。

本文先描述了硬盘的概念,及在Linux下使用过程中比较常见的问题,然后给出了相应的一些解决方法,并具体描述了硬盘维护的几个方面,通过这几个方面对硬盘进行的管理与维护,有效的提升了硬盘的工作稳定性。

由于硬盘的使用范围非常广泛,硬盘厂家众多,且硬盘新技术也在不断开发中,所以在硬盘稳定性这方面的研究还有非常大的空间,是一个可以持续研究的大课题。

参考文献(References)

[1] 孙纪坤,张小全.嵌入式Linux系统开发技术详解—基于ARM[M].北京:人民邮电出版社,2006:2-4.

[2] 谢霞玲,滕先伟.硬盘维修从入门到精通[M].北京:机械工业出版社,2009:6-7.

[3] 硬盘-百科名片[Z].http://baike.baidu.com/view/4480.htm.

[4] 赵彪.硬盘分区与故障排解速查手册[J].电脑报,2006,06(7):29-31.

[5] 赵蔚.Ext2 文件系统的硬盘布局[Z].http://www.ibm.com/developerworks/cn/linux/filesystem/ext2/index.html.

[6] 陶利军.Linux系统文件安全实战全攻略[M].北京:人民邮电出版社,2011,(10):70-75.

[7] 曹江华,方建国.Linux核心应用命令速查[M].北京:电子工业出版社,2010,(08):213-215.

[8] [美]W.Richard Stevens,Stephen A.Rago.UNIX环境高级编程(第二版)[M].北京:人民邮电出版社,2006,(05):87-88.

[9] 李晓中,乔晗,马鑫.数据恢复原理与实践[M].北京:国防工业出版社,2011,(05):16-18.

[10] Evi Nemeth,Garth Snyder,Trent R.Hein[美].Linux系统管理技术手册[M].北京:人民邮电出版社,2008:65-67.

[11] Robert Love[美].Linux内核设计与实现[M].北京:机械工业出版社,2011:230-232.

作者简介:

钟明辉(1977-),男,本科,工程师.研究领域:嵌入式Linux软件设计.

朱守元(1981-),女,专科,设计师.研究领域:计算机图像设计.endprint

3.1.6 格式化

3.1.7 动态适应不同容量的硬盘

设计硬盘使用机制时,是必须要考虑到对不同容量的支持的,有三个原因。

(1)在市面上存在着多种容量的硬盘,嵌入式产品的使用场景比较复杂,需要支持市面上不同容量的硬盘。

(2)在现场使用过程中,用户可能需要即时更换硬盘,此时可能导入不同容量的硬盘,此时就需要系统能动态适应不同容量的硬盘。

(3)我们还要看到将来硬盘存储容量的变化:硬盘的存储容量每年都在增长,其增长速度基本符合摩尔定律,大约每5年就能提高至10倍,我们必须提前考虑到对可预见的将来会出现的新的大容量硬盘的支持。

由于以上的几个原因,所以我们需要在硬盘维护机制中添加对不同硬盘容量的支持。只有充分考虑到可能会发生的变化,我们的系统才能是比较稳定的。

3.1.8 动态切换分区

考虑到可能会遇到修复分区信息也不能修复的分区的情况,会导致整个分区被格式化的情况,这里,我们就需要考虑到若分区的损坏,我们如何将损失减少的问题。

若是整个系统只有一个分区,则发生这种情况,一旦格式化,就是整个硬盘的数据都丢失了。所以,可以考虑将一个硬盘分为几个区,这样,就将数据丢失的风险降低了。使用多个分区,就带来了一个新的需求:分区切换。在当前使用硬盘分区将满之前,预先进行分区切换。另外要考虑的一点是,当遇到一个分区不能进行正常访问时,也需要进行分区切换。

3.2 硬盘维护软件架构

将上面提出的多种硬盘处理方式进行综合,就构成了我们的硬盘维护软件的主框架,硬盘维护软件的主流程如图2所示。

通过以上硬盘维护软件框架,可以实现对硬盘的状态判断,在遇到异常时进行各种异常处理,并能支持分区的动态切换等功能。

4 测试结果(Test results)

对于硬盘工作稳定性的测试,我们首先是让系统工作一段时间,然后查看系统整体是否正常运行,然后跟踪硬盘是否出现异常情况。通过三个月的连续运行情况,对比是否启用硬盘维护方式的系统,测试结果见表1。

测试结果分析:在对分区的统计中,使用了硬盘维护机制的系统只出现了一次分区的异常,其异常情况相比较未启用硬盘维护机制的系统减小到之前的25%。从总体运行情况上看,启用硬盘维护机制的系统发生的异常明显减少。测试结果清楚的显示了使用硬盘维护机制之后的硬盘,其工作稳定性得到了极大的提高。

5 结论(Conclusion)

本课题是从实际应用出发,研究并开发了一套硬盘维护机制,提升嵌入式系统下硬盘的工作稳定性。经过一年多的开发,已经基本实现了这一目标。

本文先描述了硬盘的概念,及在Linux下使用过程中比较常见的问题,然后给出了相应的一些解决方法,并具体描述了硬盘维护的几个方面,通过这几个方面对硬盘进行的管理与维护,有效的提升了硬盘的工作稳定性。

由于硬盘的使用范围非常广泛,硬盘厂家众多,且硬盘新技术也在不断开发中,所以在硬盘稳定性这方面的研究还有非常大的空间,是一个可以持续研究的大课题。

参考文献(References)

[1] 孙纪坤,张小全.嵌入式Linux系统开发技术详解—基于ARM[M].北京:人民邮电出版社,2006:2-4.

[2] 谢霞玲,滕先伟.硬盘维修从入门到精通[M].北京:机械工业出版社,2009:6-7.

[3] 硬盘-百科名片[Z].http://baike.baidu.com/view/4480.htm.

[4] 赵彪.硬盘分区与故障排解速查手册[J].电脑报,2006,06(7):29-31.

[5] 赵蔚.Ext2 文件系统的硬盘布局[Z].http://www.ibm.com/developerworks/cn/linux/filesystem/ext2/index.html.

[6] 陶利军.Linux系统文件安全实战全攻略[M].北京:人民邮电出版社,2011,(10):70-75.

[7] 曹江华,方建国.Linux核心应用命令速查[M].北京:电子工业出版社,2010,(08):213-215.

[8] [美]W.Richard Stevens,Stephen A.Rago.UNIX环境高级编程(第二版)[M].北京:人民邮电出版社,2006,(05):87-88.

[9] 李晓中,乔晗,马鑫.数据恢复原理与实践[M].北京:国防工业出版社,2011,(05):16-18.

[10] Evi Nemeth,Garth Snyder,Trent R.Hein[美].Linux系统管理技术手册[M].北京:人民邮电出版社,2008:65-67.

[11] Robert Love[美].Linux内核设计与实现[M].北京:机械工业出版社,2011:230-232.

作者简介:

钟明辉(1977-),男,本科,工程师.研究领域:嵌入式Linux软件设计.

朱守元(1981-),女,专科,设计师.研究领域:计算机图像设计.endprint

3.1.6 格式化

3.1.7 动态适应不同容量的硬盘

设计硬盘使用机制时,是必须要考虑到对不同容量的支持的,有三个原因。

(1)在市面上存在着多种容量的硬盘,嵌入式产品的使用场景比较复杂,需要支持市面上不同容量的硬盘。

(2)在现场使用过程中,用户可能需要即时更换硬盘,此时可能导入不同容量的硬盘,此时就需要系统能动态适应不同容量的硬盘。

(3)我们还要看到将来硬盘存储容量的变化:硬盘的存储容量每年都在增长,其增长速度基本符合摩尔定律,大约每5年就能提高至10倍,我们必须提前考虑到对可预见的将来会出现的新的大容量硬盘的支持。

由于以上的几个原因,所以我们需要在硬盘维护机制中添加对不同硬盘容量的支持。只有充分考虑到可能会发生的变化,我们的系统才能是比较稳定的。

3.1.8 动态切换分区

考虑到可能会遇到修复分区信息也不能修复的分区的情况,会导致整个分区被格式化的情况,这里,我们就需要考虑到若分区的损坏,我们如何将损失减少的问题。

若是整个系统只有一个分区,则发生这种情况,一旦格式化,就是整个硬盘的数据都丢失了。所以,可以考虑将一个硬盘分为几个区,这样,就将数据丢失的风险降低了。使用多个分区,就带来了一个新的需求:分区切换。在当前使用硬盘分区将满之前,预先进行分区切换。另外要考虑的一点是,当遇到一个分区不能进行正常访问时,也需要进行分区切换。

3.2 硬盘维护软件架构

将上面提出的多种硬盘处理方式进行综合,就构成了我们的硬盘维护软件的主框架,硬盘维护软件的主流程如图2所示。

通过以上硬盘维护软件框架,可以实现对硬盘的状态判断,在遇到异常时进行各种异常处理,并能支持分区的动态切换等功能。

4 测试结果(Test results)

对于硬盘工作稳定性的测试,我们首先是让系统工作一段时间,然后查看系统整体是否正常运行,然后跟踪硬盘是否出现异常情况。通过三个月的连续运行情况,对比是否启用硬盘维护方式的系统,测试结果见表1。

测试结果分析:在对分区的统计中,使用了硬盘维护机制的系统只出现了一次分区的异常,其异常情况相比较未启用硬盘维护机制的系统减小到之前的25%。从总体运行情况上看,启用硬盘维护机制的系统发生的异常明显减少。测试结果清楚的显示了使用硬盘维护机制之后的硬盘,其工作稳定性得到了极大的提高。

5 结论(Conclusion)

本课题是从实际应用出发,研究并开发了一套硬盘维护机制,提升嵌入式系统下硬盘的工作稳定性。经过一年多的开发,已经基本实现了这一目标。

本文先描述了硬盘的概念,及在Linux下使用过程中比较常见的问题,然后给出了相应的一些解决方法,并具体描述了硬盘维护的几个方面,通过这几个方面对硬盘进行的管理与维护,有效的提升了硬盘的工作稳定性。

由于硬盘的使用范围非常广泛,硬盘厂家众多,且硬盘新技术也在不断开发中,所以在硬盘稳定性这方面的研究还有非常大的空间,是一个可以持续研究的大课题。

参考文献(References)

[1] 孙纪坤,张小全.嵌入式Linux系统开发技术详解—基于ARM[M].北京:人民邮电出版社,2006:2-4.

[2] 谢霞玲,滕先伟.硬盘维修从入门到精通[M].北京:机械工业出版社,2009:6-7.

[3] 硬盘-百科名片[Z].http://baike.baidu.com/view/4480.htm.

[4] 赵彪.硬盘分区与故障排解速查手册[J].电脑报,2006,06(7):29-31.

[5] 赵蔚.Ext2 文件系统的硬盘布局[Z].http://www.ibm.com/developerworks/cn/linux/filesystem/ext2/index.html.

[6] 陶利军.Linux系统文件安全实战全攻略[M].北京:人民邮电出版社,2011,(10):70-75.

[7] 曹江华,方建国.Linux核心应用命令速查[M].北京:电子工业出版社,2010,(08):213-215.

[8] [美]W.Richard Stevens,Stephen A.Rago.UNIX环境高级编程(第二版)[M].北京:人民邮电出版社,2006,(05):87-88.

[9] 李晓中,乔晗,马鑫.数据恢复原理与实践[M].北京:国防工业出版社,2011,(05):16-18.

[10] Evi Nemeth,Garth Snyder,Trent R.Hein[美].Linux系统管理技术手册[M].北京:人民邮电出版社,2008:65-67.

[11] Robert Love[美].Linux内核设计与实现[M].北京:机械工业出版社,2011:230-232.

作者简介:

钟明辉(1977-),男,本科,工程师.研究领域:嵌入式Linux软件设计.

朱守元(1981-),女,专科,设计师.研究领域:计算机图像设计.endprint

猜你喜欢
嵌入式系统
办公自动化系统的设计
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究