基于嵌入式LINUX系统一种硬盘管理机制探究和开发_第1页
基于嵌入式LINUX系统一种硬盘管理机制探究和开发_第2页
基于嵌入式LINUX系统一种硬盘管理机制探究和开发_第3页
基于嵌入式LINUX系统一种硬盘管理机制探究和开发_第4页
基于嵌入式LINUX系统一种硬盘管理机制探究和开发_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于嵌入式linux系统一种硬盘管理机制探究和开发摘要:随着嵌入式系统使用越来越广泛,嵌入式系 统越来越多地遇到大量数据保存的需求,而硬盘是大数据量 保存的第一选择,在这种情况下,硬盘的稳定性及使用寿命 就成为设计系统时需要考虑的一个重要要素。该文主要描述了一种对于在嵌入式linux下使用ext3格式的硬盘的使用与维护机制,其关键在于结合了在实际使用过程中较常见的问题,然后相应的给出了解决方法。通过添加这些硬盘处理机制,有效提升了硬盘的工作稳定性。关键词:嵌入式系统;linux;硬盘维护;文件系统;ext3中图分类号:tp31文献标识码:b1 弓丨言(introduction)1.1硬盘保护机

2、制研究的背景和意义随着嵌入式系统使用越来越广泛,嵌入式系统越来越多 的遇到大量数据保存的需求。硬盘是计算机系统中最重要的存储设备之一,是大数据量保存的第一选择。此时,硬盘的稳定性及使用寿命就成为设计嵌入式系统时需要考虑的一个重要要素。本文主要描述了一种对于在嵌入式linux下使用ext3格式的硬盘的使用与维护机制。1.1.1嵌入式系统的特点嵌入式linux操作系统是针对不同的应用需求,对linux 内核进行裁剪修改使之能在嵌入式计算机系统上运行的一 种操作系统。嵌入式系统一般包含嵌入式微处理器、外围硬 件设备、嵌入式操作系统和应用程序四个部分1。相比于通用电脑,嵌入式系统的优势表现为如下几个方

3、 面:(1)体积小,易于安放;(2)采用专用芯片,有更高的效率与可靠性;(3)丰富的外设接口; (4)可裁剪的软件系 统;(5)更强的实时性。1. 1.2硬盘的特性介绍下面我们从两个方面来介绍硬盘:硬盘的内部物理结构、硬盘分区介绍。、硬盘的内部物理结构首先分析硬盘的内部物理结构,可以分为四部分:磁头、磁道、扇区、柱面,下面分别介绍。(1)磁头:磁头是硬盘读取数据的重要部件,磁头的主要作用是实现磁信息与电信号之间的转换,实现数据传输2o(2)磁道:当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道3。(3)扇区:将磁盘圆形的盘片划分成若干个扇形

4、区域,这就是扇区,磁盘驱动器在向磁盘读取和写入数据时,要以 扇区为单位。(4)柱面:硬盘通常由重叠的一组盘片构成,每个盘面都被划分为同等数目的磁道,并从外向内进行编号,具有 相同编号的磁道就形成一个圆柱,称为磁盘的柱面。我们通常所说的硬盘的chs参数,即cylinder (柱面)、head (磁 头)、sector (扇区),只要知道了硬盘的chs参数,就可以 确定硬盘的容量。硬盘分区介绍硬盘分区是指对硬盘的物理存储空间进行逻辑划分,将一个较大容量的硬盘分成多个大小不等的逻辑区间。将一个 硬盘划分出若干个分区,分区的数量和每一个分区的容量大小是由用户根据自己的需要来设定的4硬盘分区的概念细分,

5、又可以分为主引导分区(masterboot recorder, mbr)、主分区、扩展分区、逻辑分区。主引导分区就是指整个硬盘的信息区,主分区、扩展分区、逻辑分区都是指实际文件数据放置的地方。我们使用linux下常用的ext3文件系统为例,来描述一个分区的内部结构。硬盘分区首先被划分为一个个的块(block)o这些块被聚在一起分成几个大的块组(block group )o每个块组都相对应一个组描述(group descriptor), 这些组描述被聚在一起放在硬盘分区的开头部分,跟在超级 块(super block)的后面5。在块组的组描述中,其中有一个块指针指向这个块组的 块位图(block

6、 bit-map),块位图中的每个位表示一个块。 在块组的组描述中另外有一个块指针指向节点位图(inode bitmap),里面的每一个位相对应一个文件节点。在块组的 描述中还有一个重要的块指针,是指向节点表。这个节点表 就是这个块组中所聚集到的全部节点放在一起形成的。一个节点当中记载的最关键的信息,是这个节点中的用户数据存放在什么地方。用户文件的内容存放在什么地方, 这就是一个节点包含的信息。ext3文件系统的硬盘布局图, 如图1所示。1.1.3保护机制的必要性硬件都存在一个使用寿命的问题,硬盘也是如此。硬盘对于环境有较高的要求,振动、温度、灰尘都对硬盘的使用寿命有严重影响。特别是在操作硬盘

7、的过程中,突 然断电,极有可能损坏硬盘。另外,对硬盘不正确的操作, 例如,过于频繁的读写硬盘,没有设置正确的硬盘工作模式, 也会影响硬盘的使用期限。所以,在硬盘的使用过程中,有一些需要注意的事项,这也就是我们要进一步说明的硬盘的保护机制,本文主要是 针对软件方面的维护机制进行描述。1.2本文的主要内容和安排本课题的研发目标是开发出对嵌入式系统下硬盘的保护机制,通过多层次的保护,提升硬盘使用寿命,提供存储 系统的稳定性。2 硬盘问题类型介绍(introduction of problem ofhard disk)硬盘在使用过程中,由于使用环境、使用过于频繁或使用方式不当,会导致出现多种问题。下面

8、,我们先了解一下硬盘在linux系统下是如何使用的,然后详细描述硬盘使用过程中的常见问题。2. 1 linux下硬盘加载使用过程linux下硬盘加载使用过程,大体上可以分为四部分:识别硬盘、分区管理、建立文件系统、读写文件。2. 1. 1 linux系统识别硬盘系统初始时根据mbr的信息来识别硬盘,其中包括了一些执行文件用来载入系统。在分区表中,主要储存了以下信息:分区号、分区的起始磁柱、磁柱的总数。所以在系统初始化时,就根据分区表 中的这三项信息来识别硬盘。2. 1.2硬盘分区管理要对硬盘进行分区管理与维护,首先需要有一个分区方案。如今的硬盘基本上都在200gb以上,如果将这样的海量 响硬盘

9、的易用性和性能。不同的用户有不同的实际需要,分 区方案也各不相同。硬盘只分一个区或者分成很多个小区,在一定程度上都会影2. 1.3建立文件系统我们刚建立的分区,还不能直接用来存放资料,必须先 对这个分区做格式化的工作,格式化就是将分区划分成一格 一格的块,而每个块就是文件系统存取资料的最小单位,所 以才可以将资料存放在这些块中。多个块会组成一个组;除 了启动扇区之外,第一个块称为超级块。在超级块中包含了 磁盘的信息,例如块的大小、片断大小、块组数、每个块组 包含的块数、每组节点数、总字节数和总块数等6。一个 分区就是由超级块及多个块组构成。2. 1. 4读写文件最常见的文件操作是读、写,另外还

10、有一些文件属性相关访问,例如文件相关信息,例如目录、访问时间、文件大 小等信息的查询与修改等。对文件的读写,基本上是依据文件系统格式,进行相应 规则下的操作,与具体的文件格式相关,不同文件系统格式 的操作,会有很大差异。然而,对于用户而言,却不必关心 具体操作系统如何操作硬盘,只需要依据系统提供的通用的 文件访问方式,进行操作即可。2.2硬盘常见问题 挂载失败、找不到硬盘分区、探测不到硬盘、硬盘物理损坏, 下面分别进行介绍。在硬盘使用过程中,有如下常见问题:访问失败、分区2. 2. 1访问失败访问失败,这是最为常见的硬盘访问问题,也是修复可能性相对比较高的问题。按访问失败的类型来划分,包括五

11、种情况:(1)创建文件失败;(2)打开文件失败;(3)打开 目录失败;(4)读文件失败;(5)写文件失败。可能导致访问失败的原因,大体上可以分为没有硬盘分 区的访问权限,文件路径不存在,磁盘分区已满,硬盘损坏 等。2. 2.2分区挂载失败在访问硬盘分区之前,需要先挂载分区到文件系统,在 linux下,是使用mount命令,mount命令的作用是加载文 件系统7,映射到相应的挂载点上去。在某些情况下,挂 载会出现失败。2. 2.3找不到硬盘分区在挂载硬盘分区之前,需要先找到硬盘分区。在linux下,硬盘分区的存在路径,第一个硬盘对应的设备名称为/dev/hda ,第一个硬盘的分区对应设备名称通常

12、为/dev/hdax (x为分区号)。若分区本身有问题,就可能导致找不到相应设备名称了。2. 2.4探测不到硬盘在linux系统启动过程中,会进行硬盘的探测。ide接 口的探测流程如下:(1) 先加载通用的ide驱动程序。(2) 初始化ide的控制器,ide控制芯片驱动加载后,进行初始化传输模式。(3) 接着使用ide控制器查找连接在ide接口上的设 备,如果检查到硬盘则加载ide硬盘的驱动程序,设置该硬盘的基本参数。这里每一步出错,都会导致探测不到硬盘。2. 2. 5硬盘物理损坏最严重的硬盘问题,是硬盘物理损坏。物理硬盘损坏是指硬盘本身的构成器件损坏,如盘片、磁头、控制电路等,最大的特点是硬

13、盘有咔嗒咔嗒的响声或 者根本就不转了,并且不能读盘或者是根本就在计算机上查 找不到硬盘。对于物理损坏,就不是软件上可以解决的了,只能是通过专业硬件维修人员来维修。3 硬盘维护机制(maintenance mechanism of harddisk)由于硬盘本身的工作机理,同时嵌入式系统经常工作于极其不同的环境下,就会导致在使用过程种,不可避免会出现一些问题。那么,我们就可以根据这些可能出现的问题,提前进行预防,对于已经出现的问题,预先提供处理机制, 或进行修复处理。下面介绍本课题采用的硬盘保护的方式,然后具体描述硬盘维护机制的软件架构。3. 1硬盘保护方式硬盘保护方式与我们使用硬盘的方式及硬盘

14、运行环境有着密切的关系。我们考虑的嵌入式系统,其启动程序存储 于flash上,大量数据则存储于硬盘里面。在有数据写入时,启动硬盘进行写入,在查询读出时进行读硬?其他时候,不对硬盘进行操作。虽然出于对系统稳定性的考虑,没有使 用硬盘作为系统启动部分,但是本文下面描述的方法,大部 分也同样适用于使用硬盘做启动存储的系统。3. 1. 1选择恰当的硬盘工作模式的工作模式,由于考虑到节电、延长寿命,各硬盘厂家都提供了多种工作模式,这些工作模式有所不同,不过 大体上,可以分为空闲模式和睡眠模式。空闲模式,就是在硬盘不工作的时候,由于没有进行读 写操作,相比较读写时,功耗有所降低。这种模式下,硬盘 电机仍然

15、在转动,当需要再次开始工作时,可以快速恢复工作。睡眠模式是一种节能状态。进入睡眠模式,实际上就是磁头停放在启停区,然后让硬盘电机停转,由于电机是硬盘耗电的主要部分,停止电机能让整个硬盘的功耗大幅度降 低。3. 1.2减少访问硬盘的频率对硬盘过于频繁的访问也会影响硬盘的寿命,这里说的访问,不仅仅是写文件、读文件,还包括对文件的打开与关 闭,对硬盘容量、目录内容等的查询,对目录的操作,对文 件属性的更改等。减少硬盘访问的技巧,主要是要进行整体的梳理硬盘访问相关代码,去掉不必要的访问,优化访问流程。要尽量减 少不必要的打开关闭操作,对于硬盘上的文件,最好是能做 到只打开一次,然后进行读写操作,在所有

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

17、,最好是不要使用无缓冲模式,因为无缓冲模式也会大幅 增加对硬盘的实际操作次数。3. 1.3修复硬盘分区信息虽然上面我们已经做了多方面的预防措施,但是由于实际工作环境的各不相同,还是有可能导致硬盘的异常,所以 我们还需要考虑,在硬盘确实遇到异常之后,如何恢复丢失 的数据。分区挂载失败,是我们比较常见的问题之一,那么,我们挂载硬盘分区失败后,是否就没有方法恢复里面的数据了 呢?答案是有可能恢复的!这里我们先了解一下数据的存放方式,要使用硬盘等介质上的数据文件,通常需要依靠操作系统所提供的文件系统 功能,文件系统维护着存储介质上所有文件的索引9。因 为效率等诸多方面的考虑,在我们利用操作系统提供的指

18、令 删除数据文件或进行格式化操作的时候,磁介质上的磁粒子 极性并不会被清除,操作系统只是对文件系统的索引部分进 行了修改。正是操作系统这样处理存储的方式,为我们进行 数据恢复提供了可能。下面我们分析一下硬盘分区挂载的过程,对于linux系统,挂载就是采用mount命令,mount把现有的文件树中的 一个目录映射为新加入的文件系统的根10 o对于一个设 备,例如我们的硬盘分区,它本身是已经指定了文件系统格 式的,是ext3格式,而根文件系统,不一定与设备文件系 统格式一致,例如,在flash ±比较常见的文件系统如jffs2、 yaffs2等。linux系统如何管理不同的文件系统,是内

19、核里 面的事情,我们只需要知道是哪个目录对应于我们的设备就 行了。让我们关注一下mount的操作过程,mount的过程就是 把设备的文件系统加入到linux的虚拟文件系统vfs框架 中,主要分三个步骤:(1) 首先,要mount 个新的设备,需要创建一个新 的超级块(super block)0这通过要mount的文件系统的文 件系统类型,例如我们的ext3来调用相关函数创建一个新 的 super blocko(2) 对于任何一个准备mount的文件系统,都要有一 个虚拟文件系统的挂载点(vfsmount),创建这个vfsmount, 并设置好其属性。当文件系统被实际安装时,将有一个 vfsmo

20、unt结构体在安装点被创建11。(3) 将创建好的vfsmount加入到系统中。由上面的mount过程可知,在linux系统本身运行正常 的情况下,挂载的成功与否,很大程度上与分区的超级块信 息相关。而硬盘分区的超级块信息基本上就是直接来源于分 区表信息,所以我们首先关注的就是分区表的修复。当然,linux系统已经提供了修复硬盘的工具:fsck。 但是在嵌入式系统实际使用过程中,我们却遇到了问题:内 存不够用!原来是fsck在修复过程中,会占用较多的内存, 特别是在分区较大的情况下,对内存的要求是非常高的,而 嵌入式系统的内存,通常都是按照需求配备,不会留下很多 的空闲内存。下面,介绍我们的应对策略:首先,硬盘分区正常的情况下,备份硬盘分区信息。常,这个信息量不大。其次,在系统启动时,检查硬盘加载情况,若是有设备存在,而且mount失败,则极有可能是分区信息损坏,然后 就进行硬盘分区信息的修复。这个策略的主体部分,是进行硬盘分区信息的修复,其中又要分步骤描述:(1) 首先,读取硬盘备份信息,获取硬盘分区基本信(2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论