Linux文件系统挂装与高层体系结构
Windows XP高昂的价格和升级收费政策使更多企业和个人用户转向自由开放的Linux操作系统,目标雇主群会迅速增长。下面是小编整理的关于Linux文件系统挂装与高层体系结构,希望大家认真阅读!
文件系统体系结构
既然已经看到了文件系统的构造方法,现在就看看Linux文件系统层的体系结构。本文从两个角度考察Linux文件系统。首先采用高层体系结构的角度。然后进行深层次讨论,介绍实现文件系统层的主要结构。
高层体系结构
尽管大多数文件系统代码在内核中(后面讨论的用户空间文件系统除外),但是图 1 所示的体系结构显示了用户空间和内核中与文件系统相关的主要组件之间的关系。
图 x文件系统组件的体系结构
用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。
VFS 是底层文件系统的主要接口。这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。有两个针对文件系统对象的缓存(inode 和 dentry)。它们缓存最近使用过的文件系统对象。
每个文件系统实现(比如 ext2、JFS 等等)导出一组通用接口,供 VFS 使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。以最近使用(LRU)列表的形式管理缓冲区缓存。注意,可以使用 sync 命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的'数据发送到设备驱动程序,进而发送到存储设备)。
这就是 VFS 和文件系统组件的高层情况。现在,讨论实现这个子系统的主要结构。
主要结构
Linux 以一组通用对象的角度看待所有文件系统。这些对象是超级块(superblock)、inode、dentry 和文件。超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。文件系统中管理的每个对象(文件或目录)在Linux中表示为一个 inode。inode 包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。另一组结构称为 dentry,它们用来实现名称和 inode 之间的映射,有一个目录缓存用来保存最近使用的 dentry。dentry 还维护目录和文件之间的关系,从而支持在文件系统中移动。最后,VFS 文件表示一个打开的文件(保存打开的文件的状态,比如写偏移量等等)。
基本的文件系统体系结构
Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数,Linux 可以在许多种存储设备上支持许多种文件系统。例如,read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型,比如 ext3 或 NFS。它也不了解文件系统所在的存储媒体,比如 AT Attachment Packet Interface(ATAPI)磁盘、Serial-Attached SCSI(SAS)磁盘或 Serial Advanced Technology Attachment(SATA)磁盘。但是,当通过调用 read 函数读取一个文件时,数据会正常返回。本文讲解这个机制的实现方法并介绍Linux文件系统层的主要结构。
什么是文件系统?
首先回答最常见的问题,“什么是文件系统”。文件系统是对一个存储设备上的数据和元数据进行组织的机制。由于定义如此宽泛,支持它的代码会很有意思。正如前面提到的,有许多种文件系统和媒体。由于存在这么多类型,可以预料到Linux文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。
挂装
在Linux中将一个文件系统与一个存储设备关联起来的过程称为挂装(mount)。使用 mount 命令将一个文件系统附着到当前文件系统层次结构中(根)。在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。
为了说明Linux文件系统层的功能(以及挂装的方法),我们在当前文件系统的一个文件中创建一个文件系统。实现的方法是,首先用 dd 命令创建一个指定大小的文件(使用 /dev/zero 作为源进行文件复制)-- 换句话说,一个用零进行初始化的文件,见清单 1。
清单 1. 创建一个经过初始化的文件
1.$ dd if=/dev/zero of= bs=1k count=10000
2.10000+0 records in
3.10000+0 records out
4.$
现在有了一个 10MB 的 文件。使用 losetup 命令将一个循环设备与这个文件关联起来,让它看起来像一个块设备,而不是文件系统中的常规文件:
1.$ losetup /dev/loop0
2.$
这个文件现在作为一个块设备出现(由 /dev/loop0 表示)。然后用 mke2fs 在这个设备上创建一个文件系统。这个命令创建一个指定大小的新的 ext2 文件系统,见清单 2。
清单 2. 用循环设备创建 ext2 文件系统
1.$ mke2fs -c /dev/loop0 10000
2fs 1.35 (28-Feb-2004)
_blocks 1024000, rsv_groups = 1250, rsv_gdb = 39
system label=
type: Linux
k size=1024 (log=0)
ment size=1024 (log=0)
8.2512 inodes, 10000 blocks
9.500 blocks (5.00%) reserved for the super user
10....
11.$
使用 mount 命令将循环设备(/dev/loop0)所表示的 文件挂装到挂装点 /mnt/point1。注意,文件系统类型指定为 ext2。挂装之后,就可以将这个挂装点当作一个新的文件系统,比如使用 ls 命令,见清单 3。
相關文章
-
Linux认证基础知识:linux操作系统目录结构
在现实生活或工作学习中,大家都经常接触到作文吧,作文是一种言语活动,具有高度的综合性和创造性。相信写作文是一个让许多人都头痛的问题,下面是小编为大家整理的游泳的作文,仅供参考,欢迎大家阅读。游泳的作文1游泳既能锻 -
Linux认证系统管理:linuxmail命令发送邮件失败
导语:工作有了计划,才会事半功倍,有了计划,才能朝着一个目标稳步前进,才能在坚持的过程中不会偏离方向,才能有效减少完成目标过程中的其他干扰因素。 国小工作计划模板范文一、指导思想:以"以人为本"的思想为指导,充分发 -
Linux文件系统结构分析论文
摘 要:阐述了Linux系统的文件结构类型,指出了EXT2是在Linux系统中最为常用的文件系统。分析了EXT2文件系统的磁盘布局、索引结点及目录结构,研究了EXT2系统实现按名存取的方法,文件读取速度更高效。关键词:EXT2文件系统;索 -
Linux操作系统文件系统基础知识
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。下面是小编收集的Linux操作系统文件系统基础知识,希望大家认真阅读! 一 、Linux文件结构文件结构是文件存放在磁盘等存贮设备上的组织方法。主 -
linux系统集群的架构与实现
基于Linux系统的开源与稳定性,以及目前服务器集群的广泛应用,小编下面为大家整理关于linux系统集群的架构与实现的文章,欢迎阅读参考: 1.引言伴随互联网技术飞速发展和各种应用的逐渐开发,以及对计算机运行效率要求的不 -
嵌入式Linux系统中的GUI系统的研究与移植介绍
摘要:针对嵌入式Linux系统中几种常见的GUI(Graphic User Interface)系统,讨论嵌入式GUI实现的底层技术方式;详细分析Microwindows、MiniGUI、Qt/Embedded等三种GUI的实现特点、体系结构、API接口。结合这三种嵌入式GUI在以 -
Linux系统文件系统优化及磁盘检查的方法
Linux中数据块是储存数据的基本数据单元,在linux中可以设置3中数据块大小分别是1024(1kB),2048(2KB),4096(4KB)。数据块大小决定了文件磁盘占有量,打个比方如果你设置了数据块大小是1024,不管你的文件有多大,至少要占1KB -
linux操作系统目录结构详解
为了帮助广大考试新手们更加顺利地复习备考,小编整理了关于Linux目录结构的备考资料,希望能够对大家有所帮助。 linux 目录结构/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根 -
Linux关闭selinux安全子系统的技巧
selinux是Linux的安全子系统,是一个强制访问控制安全模块,那么要如何关闭selinux安全子系统呢?下面小编就给大家介绍下Linux关闭selinux安全子系统的技巧,一起来学习下吧。1、首先我们可以用命令来查看selinux的状态geten -
Linux认证系统管理:linux下搭建ftp
最近为了方便目标板与PC机上LINUX之间的通讯,就在LINUX搭建了FTP,工作不难,写个总结。主要经过以下几个步骤: 1.检查是否安装了vsftpd服务器可以用rpm -q vsftpd命令来查看,若显示"vsftpd-1.1.3-8",则说明系统已经安装vs