虚拟文件系统——更好的文件抽象层
任何一个软件设计的难题都可以通过增加一个抽象层来解决
——题记
我们的系统开发中,经常遇到一些难办的事情,比如,一台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
版权声明:本文为博主原创文章,未经博主允许不得转载。