虚拟文件系统——更好的文件抽象层

虚拟文件系统——更好的文件抽象层

任何一个软件设计的难题都可以通过增加一个抽象层来解决

——题记

我们的系统开发中,经常遇到一些难办的事情,比如,一台linux服务器上,从源里安装了一套apache+php+mysql,然后另外一个管理员发现其中一个php项目的php版本不够,就编译安装了一套新的php,然后将apache的php配置链过来。但php的配置要修改的话,就十分麻烦。

还有,像linux编译安装软件,如果安装好后,工程删掉,再想移除安装的文件就十分困难。

目前并没有非常好的方式来让软件不产生垃圾文件,那么这个原因可能就是操作系统对文件系统的管理并不十分先进,我们设计了一套虚拟文件系统来解决操作系统的诸多问题。

虚拟文件系统整体设计

虚拟文件系统是相对于真实文件系统而言的,虚拟文件系统不是磁盘文件的组织格式,而是抽象出来的文件树的集合。例如在Windows下,真实文件系统可能是这样的:

C:C:\program filesC:\windowsC:\users...

但虚拟文件系统,更像是Windows中库的概念,是一组文件夹的集合,而且你可以通过api,动态的向其中增加或移除对应的目录。

虚拟文件系统的目录结构是仿照linux的,是按照功能区分,而不是物理结构区分。

例如:

/os/                    # 对应C:\windows
/software/              # 对应C:\program files\ 、 D:\program files/software/office/10/    # 对应C:\program files\office10

这样的结构,在各种系统上,都能存在相同的抽象结构,从而,我们开发跨平台程序,不再需要考虑文件系统结构的问题。

这样设计的好处

首先是软件易移动,在实目录结构的情况下,软件可能被其他软件引用,那么想移动软件,就十分困难,但在虚拟文件系统下,由于多了一层映射,可以非常方便的修改映射路径。如果你的C盘使用满了,那么只需要简单的将一部分文件拷贝到D盘,重新指定路径映射,不再需要进行任何其他操作。

其次是可以整合环境变量的功能。

linux下环境变量并不是十分关键,其原因就是在文件系统下,每款软件几乎都有固定的安装位置,所以有时可以减少环境变量的指定。而通过虚拟文件系统,为每款软件分配独立的路径规则就可以,无需使用环境变量就可以方便的找到对应的软件。

跨平台设计

虚拟文件系统由于封装了底层的文件系统,实际上可以进行跨平台设计,抽象出一套通用的跨平台的文件路径模式,提供通用的接口来进行底层文件处理。

包括路径的转换工作,在不同平台下,应该转换为不同的路径格式。

设计思路可以参考Qt的跨平台文件系统设计。

文件目录映射设置

提供虚拟目录浏览器进行查看,

提供编辑的接口,可以向任意一个虚拟目录中,添加任意的真实目录、真实文件。也可以移出一个目录下的部分内容。

还可遍历检索全部的虚拟目录,自动去除不存在的真实目录和文件。

在虚拟目录查看器下,也可以查看实目录,并且进行实目录移动时,会自动修改虚拟目录的链接。

虚拟目录和实目录模式的兼容

在添加虚拟目录后,出现了一系列问题,首先,软件工作的访问文件的目录是实目录,还是虚拟目录。

答案是看你使用哪套接口,软件访问文件系统,必然是通过编程接口来的,如果使用系统底层的编程接口,那么自然是使用实目录,如果使用新的动态库进行的文件系统访问,那么就是访问虚拟目录。

一般,我们推荐使用虚拟路径进行访问,这样软件即使被移动,那么虚拟目录依旧可以被重定向。

其次的问题就是当前目录和控制台的问题,我们一款软件工作的当前目录可以是虚拟目录吗?

我想答案是不可以,也没有必要,当前目录的作用一般是一些工具类软件,为了确定当前工作路径的位置,这样方便寻找要进行操作的文件。而虚拟目录的作用,往往是为了让软件能够清楚系统中的其他软件的位置,为了在控制台下能够使用虚拟目录,那么我们需要一个虚拟目录控制台,但我个人不觉得这个设计有意义,因为控制台也是一样,没必要非得运行在虚拟目录下。

虚拟文件系统和注册表

其实windows的注册表有部分虚拟目录的功能,放置配置文件,设置路径参数等等,几乎是windows程序的配置档案集合。

但我个人很讨厌注册表的设计,因为他有个关键的问题是,用户很难去手动的浏览和配置相关系统信息,也就是说,他的抽象层次太底层,而且注册表的设计方式,更像是一个大配置文件库,谁都可以放,而删除相关的配置信息时,又百般困难,如果注册表有表项残留,那么很可能会造成一款软件的安装失败。

我不希望虚拟文件系统有配置参数的功能,我只希望它作为一款抽象的文件系统,为用户提供访问的控制,权限管理,目录映射,目录移动,自动无效目录删除等操作。要求其稳健、简单,让用户可以通过GUI方便的控制即可。

虚拟文件的多用户切换

虽然我们现在一款电脑往往只有一个用户,但毕竟用户组的概念对计算机还是十分重要的,毕竟一款软件若能为不同用户提供不同的配置,确实是非常的方便。而现在,这些都放到用户的文件夹中,既不好管理,卸载时又难以删除。若启用虚拟文件系统,那么方便了,我们可以设置两部分的虚拟文件配置,一部分是系统全局路径配置对所有用户都有效,一部分是用户独有配置,只对当前用户有效,那么在用户切换时,我们可以切换相应虚拟文件配置。于是不同用户的虚拟文件路径没变,但其中的内容却变了。

总结

虚拟文件系统的设计,是针对当前操作系统中配置难,软件管理难的问题提出的,相当于是在传统文件系统上增加了一部分抽象层。由于几乎没有桌面软件不依赖文件系统,所以推广这款虚拟文件系统是很难的。不过我希望通过建立跟这个设计相符的软件包管理器,然后将这种软件包格式进行推广,逐渐让大家了解到虚拟文件系统的优势,也能逐步将传统的文件系统的滥用降低,从而最终形成,只有特定有root权限的软件可以读写全部路径,以及只有经过root用户授权后的任意路径写入存在,其他默认路径读取都是通过灵活的虚拟路径进行访问的方式。

本文纯属个人对操作系统的设计观点,可能有很多地方考虑不周,如有其他意见建议,欢迎批评指正及讨论。

本文属 西风逍遥游 原创, 转载请注明出处: 西风世界 http://blog.csdn.net/xfxyy_sxfancy

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 10:55:16

虚拟文件系统——更好的文件抽象层的相关文章

Linux 虚拟文件系统(VFS)介绍

1. 通用文件模型 Linux内核支持装载不同的文件系统类型,不同的文件系统有各自管理文件的方式.Linux中标准的文件系统为Ext文件系统族,当然,开发者不能为他们使用的每种文件系统采用不同的文件存取方式,这与操作系统作为一种抽象机制背道而驰. 为支持各种文件系统,Linux内核在用户进程(或C标准库)和具体的文件系统之间引入了一个抽象层,该抽象层称之为"虚拟文件系统(VFS)". VFS一方面提供一种操作文件.目录及其他对象的统一方法,使用户进程不必知道文件系统的细节.另一方面,V

虚拟文件系统-VFS

1.什么是虚拟文件系统? OpenCms将所有的资源都存放在数据库中,这些资源的节点共同构成了虚拟文件系统(VFS,Virtual File System).虚拟文件系统可以在传统工作空间中查看. 虚拟文件系统可以看做一个实际的文件系统,它提供实际文件系统中提供的功能: 文件.文件夹的移动.复制.删除. 权限设置. 资源编辑锁定. 资源创建时间.最后修改时间记录. 此外,它还扩展了一些功能: 资源类型定义(不仅限于文件.文件夹). 自定义资源属性. 资源关联. 资源历史记录保存与恢复. 资源移动

从文件 I/O 看 Linux 的虚拟文件系统

1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式:更进一步,对文件的 操作可以跨文件系统而执行.如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘:而这样的操作涉及到两个不同的文件系统. 图 1. 跨文件系统的文件操作 “一切皆是文件”是 Unix/Linux 的基本哲学之一.不

文件IO详解(三)---Linux虚拟文件系统

http://blog.chinaunix.net/uid-14735472-id-2921377.html 讲解虚拟文件系统的一些数据结构以及之间的关系,有些地方看不懂 http://www.docin.com/p-941544538.html 讲解了进程打开文件时内核所建立的各种数据结构之间的联系 在给磁盘分区后,每个分区中都可以建立起各自独立的文件系统,建立的物理文件系统可以是相同的,也可以是不同的.那么不同的物理文件系统的组织数据的方式肯定是不同的,比如说ext2文件系统组织数据的方式是

使用 /proc 文件系统来访问 linux操作系统 内核的内容 && 虚拟文件系统vfs及proc详解

http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/20130422/366044.html 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口 简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux? 内核空间和用户空间之间进行通信.在 /proc 文件系统中,

linux文件系统体系结构 和 虚拟文件系统(VFS)

图 1. Linux 文件系统组件的体系结构 用户空间包含一些应用程序(例如,文件系统的使用者)和 GNU C 库(glibc),它们为文件系统调用(打开.读取.写和关闭)提供用户接口.系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点. VFS 是底层文件系统的主要接口.这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大.有两个针对文件系统对象的缓存(inode 和 dentry).它们缓存最近使用过的文件系统对象. 每个文件系统实

Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnblogs.com/wrjvszq/p/4257164.html一文我们提到过linux

Linux虚拟文件系统(VFS)学习

虚拟文件系统(Virtual Filesystem)也可称之为虚拟文件系统转换(Virtual Filesystem Switch),是一个内核软件层,用来处理与Unix标准文件系统相关的所有系统调用.其健壮性表现在能为各种文件系统提供一个通用的接口. 通用文件系统模型 VFS所隐含的主要思想在于引入一个通用的文件系统模型(common file model),这个模型能够表示所有支持的文件系统.在通用文件模型中,每个目录被看做一个文件,可以包含若干文件和其他的子目录. 通用文件模型由下列对象类

GlusterFS:虚拟文件系统(VFS)介绍

2012-10-27 12:05 1434人阅读 评论(0) 收藏 举报  分类: GlusterFS文件系统研究(13)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.概述 Linux虚拟文件系统是一个内核软件层,用来处理与UNIX标准文件系统相关的所有系统调用.其健壮性表现在能为各种文件系统提供一个通用的接口. Linux虚拟文件系统支持的文件系统可以划分为三种主要的类型: 1.磁盘文件系统 这些文件系统管理在本地磁盘分区中可用的磁盘空间或者其他可以起到磁盘作