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

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

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

  Linux Kernel 支持多种 Block 设备,比如基于 IDE 总线或者是 SCSI 总线的硬盘、光盘驱动器和磁带机,又比如在一个普通文件上实现的 Loopback Block 设备,或者是基于 TCP 的网络 Block 设备,甚至是基于内存的 RAM-DISK。这个对多种 Block 设备的支持,其实就是 Block 设备层这一逻辑层在发挥作用。每一个具体的 Block 设备的驱动,都要向 Kernel 中的 Block 设备层注册,并提供一组入口。这以后 Kernel 就可以通过这一组入口,访问这个 Block 设备。Block 设备驱动的这一组入口的确切定义如下。

struct block_device_operations {
 int (*open) (struct inode *, struct file *);
 int (*release) (struct inode *, struct file *);
 int (*ioctl) (struct inode *, struct file *, unsigned, unsigned long);
 int (*check_media_change) (kdev_t);
 int (*revalidate) (kdev_t);
 struct module *owner;
};

  一个 Block 设备驱动向负责的逻辑层注册了这一组入口之后,系统用一个号码,也即所谓的 Major Number,标识这一 Block 设备。用户空间的程序通过访问文件系统上的 /dev 目录获知某一 Block 设备和 Major Number 之间的对应关系。Kernel 则通过这一 Major Number 区分不同的设备,把来自用户空间的请求转发给相应的设备驱动。在这里,Major Number 实际上担任了 Block 设备层这一逻辑层的转换开关这一角色。相应的,我们知道,在文件系统的 VFS 逻辑层上担任转换开关角色的则是文件系统的 Mount 路径。

  前面简单地讲述了 Linux Kernel 中的 Block 设备。而 RAID 技术,我们知道,是利用多个 Block 设备来模拟一个单个的 Block 设备,并且,在这个模拟的过程中,提供一定程度的数据冗余,以保护用户数据不会因为某个单一的 Block 设备的故障而完全损毁。根据技术规范的细节的不同,RAID 又被分为几个级别。RAID 0 并不提供任何程度的数据冗余,而只是把单个硬盘 Block 设备的负载平均分担到参加 RAID 0 的所有硬盘 Block 设备上,这在一定程度上增加了对硬盘上的用户数据进行访问的速度。而 RAID 4,5 都提供了相当程度的数据冗余,可以保护用户数据不会因为某个单个硬盘 Block 设备的故障而损毁。关于 Linux Kernel 中软件 RAID 技术的原理的介绍,读者可以参考 IBM developerWorks 上面的 Daniel Robbins 的相关文章,以及 Linux Documentation Project 上面的 The Software-RAID HOWTO。相关链接,请参见文后所列参考文献。

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

正在加载评论...