内容摘要:本文首先介绍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 作者:赵蔚 责编:豆豆技术应用
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- redhat/Fedora
- Ubuntu Linux
- IBM AIX
- FreeBSD
- Solaris
- NetBSD
- SCO Unix
- find基本用法
- ldd命令原理及用法例子
- su和sudo命令的区别与使用技巧
- Linux操作系统下的dd命令技巧
- 关于Top命令的参数详解
- 关于Tar命令的使用
- SSH实用技巧及常用命令使用
- Linux后台执行命令
- VI命令使用技巧集锦
- Vmstat命令列出的属性详解
- 如何查看及修改文件读写权限
- 最大可存储的单文件容量
- ext2/ext3文件系统介绍
- 常用压缩格式的压缩解压方法
- Linux系统的引导过程详细解析
- Configure参数解释说明
- Linux下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法