欢迎来到天天文库
浏览记录
ID:31726441
大小:93.43 KB
页数:9页
时间:2019-01-17
《linux文件系统分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、在文件系统方面,Linux®可以算得上操作系统中的“瑞士军刀”。Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统。对于使用标准的和比较奇特的文件系统以及开发文件系统来说,Linux是极好的平台。本文讨论Linux内核屮的虚拟文件系统(VFS,有时候称为虚拟文件系统交换器),然后介绍将文件系统连接在一起的主要结构。基本的文件系统体系结构Linux文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的APT函数,Linux可以在许多种存储设备上支持许多种文件系统。例如,read函数调用可以从指定的文件
2、描述符读取一定数量的字节。read函数不了解文件系统的类型,比如ext3或NFS。它也不了解文件系统所在的存储媒体,比如ATAttachmentPacketInterface(ATAP1)磁盘、Serial-AttachedSCSI(SAS)磁盘或SerialAdvancedTechnologyAttachment(SATA)磁盘。但是,当通过调用read函数读取一个文件吋,数据会正常返冋。本文讲解这个机制的实现方法并介绍Linux文件系统层的主要结构。什么是文件系统?首先回答最常见的问题,“什么是文件系统”。文件系统是对一个存储设备上的数
3、据和元数据进行组织的机制。由于定义如此宽泛,支持它的代码会很有意思。正如前面提到的,有许多种文件系统和媒体。由于存在这么多类型,可以预料到Linux文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。文件系统作为协议另一种看待文件系统的方式是把它看作一个协议。网络协议(比如IP)规定了互联网上传输的数据流的意义,同样,文件系统会给出特定存储媒体上数据的意义。挂装在Linux中将一个文件系统与一个存储设备关联起来的过程称为建裳(mount)o使用mount命令将一个文件系统附着到当前文件系统层次结构
4、中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。为了说明Linux文件系统层的功能(以及挂装的方法),我们在当前文件系统的一个文件中创建一个文件系统。实现的方法是,首先用dd命令创建一个指定换句话说,一个用零大小的文件(使用/dev/zero作为源进行文件复制)进行初始化的文件,见清单lo清单1.创建一个经过初始化的文件$ddif=/dev/zeroof=file・imgbs=lkcount=1000010000+0recordsin10000+0recordsout$现在有了一个10MB的f订c・img文件。使用lose
5、tup命令将一个循环设备与这个文件关联起来,让它看起来像一个块设备,而不是文件系统中的常规文件:$losetup/dev/loopOfile,img$这个文件现在作为一个块设备出现(由/dev/loopO表示)。然后用mke2fs在这个设备上创建一个文件系统。这个命令创建一个指定大小的新的cxt2文件系统,见清单2。清单2.用循环设备创建ext2文件系统$mke2fs-c/dev/loopO10000mke2fs1.35(28-Feb-2004)maxblocks1024000,rsvgroups=1250,rsvgdb=39Filesys
6、temlabel二OStype:LinuxBlocksize=1024(log=0)Fragmentsize二1024(log=0)2512inodes,10000blocks500blocks(5.00%)reservedforthesuperuser•••$使用mount命令将循环设备(/dev/loopO)所表示的f订e.img文件挂装到挂装点/mnt/pointlo注意,文件系统类型指定为ext2o挂装之后,就可以将这个挂装点当作一个新的文件系统,比如使用Is命令,见清单3。清单3.创建挂装点并通过循环设备挂装文件系统$mkdir/
7、mnt/pointl$mount—text2/dev/loopO/mnt/pointi$Is/mnt/pointllost+found$如清单4所示,述可以继续这个过程:在刚才挂装的文件系统中创建一个新文件,将它与一个循环设备关联起来,再在上面创建另一个文件系统。清单4.在循环文件系统中创建一个新的循环文件系统$ddif=/dev/zeroof=/mnt/pointl/file,imgbs=lkcount=10001000+0recordsin1000+0recordsout$losetup/dev/loopl/mnt/pointl/fil
8、e.img$mke2fs-c/dev/loopl1000mke2fs1.35(28-Feb-2004)maxblocks1024000,rsvgroups=125,rsvgdb=
此文档下载收益归作者所有