Linux文件系统解析

来源:互联网 发布:游戏网络加速器 编辑:程序博客网 时间:2024/06/05 05:37

Linux文件系统解析

  基于分层结构探析

 摘要: 在文件系统方面,Linux在众多操作系统中的一把"瑞士军刀".Linux支持多种文件系统,从日志型文件系统到集群型再到加解密型系统。对于使用标准的或者特殊的文件系统的系统,或者是开发一种文件系统的系统,Linux都是一个绝佳的平台。本文探究了Linux内核的虚拟文件系统(VFS--有时也被称为虚拟文件系统交换器),并把它与之相关的主要结构一一展示给大家.

 

关键词:文件,文件系统,Linux,系统

 

文件系统的基本框架

     Linux文件系统的主要框架是基于一种从复杂的文件系统集中抽象出一些共同点的思想。通过提供一些公共函数api,可以在各种存储设备上使用文件系统。如Read 函数并不需要了解具体的文件系统。也并不了解它的存储设备。但是,当执行read函数时,会返回正确的文件数据。本文主要讲述这一机制的实现方法并介绍文件系统分层的主要结构.

 

什么是文件系统?

    文件系统是对存贮在设备的数据与元数据的一种机制。由于定义如此泛泛,支持它的代码会非常有趣。有如此多的存储设备以及文件系统,可以预料,Linux会采用分层结构,把用户接口层,文件系统实现层,操作存储设备的驱动程序分离开来。

   挂载

    把文件系统与存储设备关联起来的程序称之为挂载。Mount 命令用来将一个文件系统附着在当前的文件系统体系中。  在这过程中,需要提供文件系统类型,文件系统和挂载点。

    为了描述清楚文件系统层的功能,我们在当前的一个文件中创建一个文件系统。首先使用dd创建一个文件.见清单1.

    清单1.创建一个初始化文件

   dd if=/dev/zero of=file.img bs =1k count=10000

 

    现在有了一个名为file.img大小为10M的文件。使用losetup命令把它与玄幻设备关联起来.

  

   losetup /dev/loop0 file.img

 

  现在这个文件是以块设备出现。使用mke2fs在这个设备上创建一个文件系统,这个文件格式为ext2.如清单2.

  清单2.创建一个ext2文件系统使用循环设备

   mke2fx -c /dev/loop0 10000    

   使用 mount 命令将循环设备(/dev/loop0)所表示的 file.img 文件挂装到挂点 /mnt/point1。注意,文件系统类型指定为 ext2。挂装之后,就可以将这个挂装点当作一个新的文件系统,比如使用 ls 命令,见清单 3。

 

   mkdir /mnt/point1

   mount -t ext2 /dev/loop0 /mnt/point1

   如清单 4 所示,还可以继续这个过程:在刚才挂装的文件系统中创建一个新文件,将它与一个循环设备关联起来,再在上面创建另一个文件系统。

   dd if=/dev/zero of=/mnt/point1/file.img bs=1k count=1000 

   losetup /dev/loop1 /mnt/point1/file.img

   mke2fs -c /dev/loop1 1000

   mkdir /mnt/point2
   mount -t ext2 /dev/loop1 /mnt/point2
  

   通过这个简单的演示很容易体会到 Linux 文件系统(和循环设备)是多么强大。可以按照相同的方法在文件上用循环设备创建加密的文件系统。可以在需要时使用循环设备临时挂装文件,这有助于保护数据。

    既然已经看到了文件系统的构造方法,现在就看看 Linux 文件系统层的体系结构。本文从两个角度考察 Linux 文件系统。首先采用高层体系结构的角度。然后进行深层次讨论,介绍实现文件系统层的主要结构。

 

    高层体系结构

   尽管大多数文件系统代码在内核中(后面讨论的用户空间文件系统除外),但是图 1 所示的体系结构显示了用户空间和内核中与文件系统相关的主要组件之间的关系。

   用户空间包括应用程序和一些库,他们为文件系统调用提供用户接口。系统调用接口的作用就像交换器,它将系统调用从用户空间发送到内核空间中的适当端点。

   VFS是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,有两个针对文件系统对象的缓存。它们缓存最近使用的文件系统对象。

   每个具体的文件系统实现导出一组通用接口,供VFS使用。例如,对底层设备驱动程序的读写请求会通过换乘去缓存来传递。

 

 原文链接:http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/?S_TACT=105AGX52&S_CMP=cn-a-l

 

原创粉丝点击