内容摘要:本文首先介绍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 作者:赵蔚 责编:豆豆技术应用
- 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下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法