用"RAID 0.0999" 写保护 Linux硬盘分区

豆豆网   技术应用频道   2008年04月15日  【字号: 收藏本文

内容摘要:本文首先介绍Linux Kernel 中软件 RAID 技术的实现。在此基础之上,本文进一步介绍作者的一个"玩具"项目,给 Linux 的硬盘分区加上写保护。

  从上面的简略介绍,我们看到,Linux Kernel 引入 Block 设备层这一逻辑层,来支持多种不同的 Block 设备驱动的实现。然后,在 Block 设备层下面又引入 md 设备层这一较小的逻辑层,来实现对多个级别的 RAID 技术的支持。在这两个层次中担任转换开关角色的,分别是 Block 设备的 Major Number 和 Minor Number。

  用户数据的走向

  接下来,我们再从另一个角度,来看一看 Linux Kernel 中的软件 RAID 技术的实现。在这里,我们要关注的是在 Linux Kernel 中,用户数据的移动路径。

  比如说要读一个用户文件。首先,用户程序传递给 Kernel 一个路径名,比如 /etc/passwd。然后,Kernel 中的 VFS 逻辑层根据当时它记录下来的文件系统的 Mount 的情况,找到相应的文件系统驱动,就指挥它去找用户程序所请求的文件。

  对于我们这里所要关心的基于硬盘的传统的文件系统来说,硬盘呈现在它面前的样子就是连续的一长串的 Blocks。所以,对于硬盘文件系统来说,它所要做的,就是要根据用户程序所请求的文件的路径名,找到相对应的若干个 Blocks,这样以后,它的任务就算完成了,接下来的事情,就是属于硬盘 Block 设备驱动的了。对于传统的硬盘文件系统来说,它们通过在硬盘分区的开头的固定位置上,维持一些索引信息,也即所谓的 Meta Information,来完成这一任务。对于 Linux 上比较流行的 Ext2/3 文件系统的硬盘布局的详细介绍,请参见作者在 IBM developerWorks 上的另一篇文章。相关链接,请参见文后的参考文献。

  在文件系统之后,接下来登场的就是硬盘 Block 设备的驱动了。它所要完成的任务,就是在文件系统请求某一个 Block 中的数据的时候,把这个数据从硬盘上读出来。我们看到,文件系统根据 VFS 中记录的 Mount 信息,找到相关的设备,比如 /dev/hda1,或者是某一个硬盘 RAID 设备,告诉它,我要读你上面的第几个 Block 的数据。对于一个普通的硬盘 Block 设备驱动来说,它把这个 Block 号数翻译成硬盘上的硬件地址,比如 IDE 设备的 C/H/S 地址或者是 LBA 地址,然后,把来自文件系统的请求转发给 IDE 驱动就行了。

来源:ibm    作者:赵蔚    责编:豆豆技术应用

正在加载评论...