这是一句古老的谚语,但仍然很准确:“在UNIX®中,所有内容都是文件”。 从概念上讲,每个UNIX资源都是一个简单的文件,您可以打开,读取,写入或两者兼而有之。 实验数据是一个文件,外壳启动脚本,UNIX内核,主目录,每个网络套接字和/ bin / ls可执行文件也是一个文件。
但是,并非每个文件都相同。 您的实验数据可能是高度定制的数据库。 Shell脚本是一个文本文件,尽管有一个重要的区别:开头的!# (通常称为shebang )行指示哪个应用程序解释该文件。 内核是二进制文件,与每个可执行文件一样,都是二进制文件,都具有系统工具可以操纵的可预测的特定格式。 目录是用于编目内容的专用索引。
此外,并非每个文件都以相同的方式存储。 文件的结构和大小取决于基础文件系统 -将文件数据持久保存到物理设备的子系统。 相同的数据(例如,同一文件的两个副本)在不同的文件系统上的组织方式不同。 每个文件系统都规定了自己的存储策略,可以将其设计为满足特定条件。 例如,可以优化一个文件系统的速度,优化另一个文件系统的空间效率,而优化另一个文件系统的持久性以防止数据丢失或损坏。 通常,没有正确或错误的文件系统可供部署:您必须分析存储需求并选择适合您目的的文件系统或文件系统组合。 UNIX(和许多供应商)提供了大量的文件系统,因此您一定会发现有好处的。
表1仅列出了一些可用于UNIX(在许多情况下为Linux®)的文件系统。
通常,文件系统需要针对其量身定制媒体,因此从一个文件系统更改为另一个文件系统通常需要备份,格式化物理驱动器以及冗长的还原和验证过程。 显然,这样的更改是根本的,并且是系统管理员的唯一权限。
但是,最近对许多UNIX和Linux内核的扩展允许任何用户创建和使用各种文件系统而没有特殊特权。 被称为FUSE ,它是User Space中的Filesystem的缩写,您可以使用该软件轻松创建新的文件系统。 从FUSE派生的文件系统可以通过SFTP挂载文件; 自动扫描文件中的病毒; 并将只读CD-ROM光盘集合视为本地驻留数据文件。
让我们在一个通用的操作系统平台上安装FUSE,并探索一些现在可供任何用户使用的新颖文件系统。 现代UNIX和Linux内核通常包括对FUSE的支持,因此构建软件类似于构建任何实用程序代码。 您必须下载软件包,解压缩它,运行配置脚本以检测系统的功能,以及构建和安装代码。 清单1显示了用于安装FUSE的代码。
FUSE版本2.8.4是发布时的最新版本。 确保从FUSE项目主页下载最新最好的代码(请参阅参考资料中的链接)。 编译后,FUSE软件包安装了一些用于构建新FUSE文件系统所需的库,以及一个用于安装和卸载FUSE文件系统的名为fusermount的应用程序。 Fusermount有一些特殊选项,但可以接受通常会提供给vanilla mount命令的选项。
安装基础代码后,您可以继续安装FUSE文件系统。 第一个尝试使用的FUSE文件系统是SSHFS,这是基于SFTP的文件系统。 通过SSHFS,您可以将任何远程目录作为本地文件系统挂载,只要您的服务器支持SSH(大多数情况下就是如此)。 在继续之前,请确保您的系统具有Glib 2.0和Gthread 2.0。 如果您的计算机具有GNOME,则可能具有这些库;请参见第28页的“库”。 否则,请从源代码或通过操作系统的本机软件包管理器安装它们。 (Debian Linux系统具有Aptitude。RedHat Linux系统提供rpm , yum和YaST 。) 清单2显示了设置SSHFS的代码。
如果您运行Ubuntu或UNIX或Linux的另一个变体,则您的发行版可能会提供所有软件包的预构建二进制文件。 例如,在Ubuntu上,可以使用以下命令安装到目前为止列出的所有FUSE软件:
$ apt-get install libglib2.0-dev fuse-utils libfuse2 sshfs如果您的依赖关系是最新的,则还可以使用简单命令apt-get install sshfs安装SSHFS。
安装FUSE库和SSHFS后,您可以将可以通过SSH访问的任何远程目录安装为本地文件系统(请参见清单3 )。 结合ssh和mount ,您可以提供远程系统的名称和登录凭据,要安装的远程目录以及本地安装点,该安装点可以是任何本地目录。
如您所见,远程目录的内容现在可以作为本地文件使用。 如果您是开发人员,并且使用多个系统来工作,则SSHFS可以使本地命令(例如cp , make和其他命令)在远程文件上运行。
要卸载FUSE文件系统,可以键入fusermount -u /some/mount/point 。 或者,由于FUSE文件系统的行为与普通文件系统相同,因此可以键入umount /some/mount/point 。
另一个远程文件系统变体称为S3FS 。 S3FS不会使用自己的远程服务器和SFTP,而是将Amazon Simple Storage Service(Amazon S3)存储桶安装为本地文件系统。 S3FS“在S3中本地和透明地”存储文件,并且您可以启用本地缓存以最大程度地减少下载。 档案大小上限为5GB。 像SSHFS一样,您可以下载并构建源代码并立即使用它。
注意 :S3FS软件包取决于cURL库开发标头和LibXML2库。
清单4显示了安装S3FS实例的代码。
假设您已经拥有一个提供访问密钥和秘密访问密钥的Amazon S3帐户,则可以使用以下命令安装您拥有的任何存储桶:
$ s3fs bucket_name -ouse_cache=/tmp -o accessKeyId=your_access_key \ -o secretAccessKey=your_secret_access_key /mnt借助S3FS,您可以将整个Git存储库保留在Amazon S3上,或使用rsync将备份放置在Amazon的存储系统上。
FUSE的另一个重要用途是archivemount ,该实用程序可将多种形式的归档文件(包括tarball(或gzip压缩的tar归档文件))挂载为本地文件系统。 假设您的系统上有可用的libarchive ,则可以快速构建archivemount ,如清单5所示。
例如,您可以使用archivemount将其自己的tarball挂载为文件系统。 清单6显示了代码。
和以前的SSHFS一样, archivemount提供了对tarball的无缝,类似于本地文件系统的访问。 顺便说一句,如果您将任何文件修改,删除或添加到tarball的“文件系统”中,则在卸载FUSE文件系统时,所有更改都将保存到原始tarball中。 命令fusermount -u ~/mnt/tgz从给定的安装点卸载FUSE文件系统。 清单7提供了对tarball“文件系统”的了解。
清单7中的最后一个tar命令确认确实将NOTES添加到了tarball中。 关于使用archivemount扩展归档文件的一个警告:软件作者警告不要写入归档文件,因为如果Write操作失败,所有更改都会丢失。 通常,尽管如此,少量的写操作也可以正常工作。 但是,您可能会发现archivemount引人注目的只读功能。
如果您想查看通过FUSE挂载的内容,只需运行典型的mount命令并查找标记为fuse系统,如清单8所示。
本文的测试平台是在Dell®台式机上运行的Ubuntu版本10。 在清单8的mount记录中,您可以在底部看到archivemount文件系统,在顶部可以看到Linux机器安装的典型物理设备。
根据前两个示例,您可以想象FUSE可以包装许多网络服务和文件格式,以提供对远程或打包文件的无缝访问。 确实,有许多可行的实现。 WikipediaFS挂载为本地文件系统,您可以在其中本地编辑文章。 其他软件包为Blogger,Flickr和Google Mail服务提供了几乎相同的功能。
FUSE的另一种用法是镜像或并行维护文件副本。 一个典型的例子是以FUSE为中心的加密文件系统(EncFS)。 给定一个源目录和一个目标目录,写入源目录的所有文件都会自动加密并保存到目标目录。 librlog是一个灵活的消息记录库,是EncFS的先决条件。 从源代码或发行版的存储库安装它,然后继续构建EncFS,如清单9所示。
安装软件包后,即可开始使用。 您必须创建两个新目录-一个用于原始文件,一个用于加密文件。 encfs实用程序将两者映射在一起,如清单10所示。
通常,您可以选择“偏执狂”模式。 接下来,输入密码以保护文件,然后再次输入以确认密码。 清单11显示了代码。
您创建的每个文件都反映在加密目录中,甚至文件名也被加密。 完成后,只需卸载未加密的目录,如清单12所示。 目录的内容将被删除,仅保留安全文件。
要查看未加密的文件,请将安装点连接到先前加密的文件集。 在提示您进行身份验证时输入密码:
$ encfs ~/encrypted_data ~/data EncFS Password: $ ls ~/data secrets.txt重新安装后,您的原始文件将可用并且可以纯文本形式查看。 对文件的任何更改都会导致对其进行重新编码。
尽管前面的示例非常简单,但是请不要低估FUSE的功能。 一些功能强大的文件存储解决方案也在用户空间中运行。 例如,ZFS-Fuse是用户空间中ZFS的实现。 MooseFS是一个容错的,网络分布式文件系统。 它将数据分散在多个物理服务器上,但用户将汞合金视为一种类似于UNIX的文件系统资源。 GlusterFS是基于FUSE的高性能分布式文件系统。
描述GlusterFS部署不在本文讨论范围之内,但是简短的介绍应该演示您可以使用FUSE构建的功能,避免内核修改和补丁。 具体来说,GlusterFS可以:
跨越任意数量的机器。 将完全不同的异构存储设备和物理文件系统(GlusterFS称为砖)聚合到一个统一的池或名称空间中。 临时组合文件系统功能(GlusterFS称为翻译程序),以构建定制的存储解决方案。 一个翻译器提供复制,而另一个则通过TCP / IP实现连接。 通过预读,后写和许多其他技巧来提高性能。GlusterFS版本3极大地简化了该软件的初始设置,这仅比在整个系统的子网络中建立SSH密钥要复杂得多。 但是更好的是,GlusterFS不需要内核更新或特殊的自定义。 因为它是用FUSE编写的,所以它可以在内核环境之外运行,并且可以由任何开发人员扩展。
保险丝是一项不可思议的技术。 使用它,您可以使用许多流行的编程语言开发新的文件系统,包括Python,Ruby,Lua, C/C++ ,Java™语言等等。 此外,创建和部署新文件系统并不要求更改所有正在运行的系统的内核。 您可以在另一篇题为“ 使用FUSE开发自己的文件系统:不需要内核编程 ”的developerWorks文章中了解有关FUSE如何与内核协同工作的更多信息。 请参阅“ 相关主题”部分,以获取其他阅读材料以及指向此处提到的项目的链接。
现在有大量的FUSE文件系统可用,并且每天都有更多的FUSE文件系统出现。 ZFS-Fuse和GlusterFS是非常复杂的解决方案的两个示例,但是archivemount和SSHFS同样有用。 所有FUSE文件系统都满足特定要求。 如果您有特殊要求,则可以考虑使用FUSE和一些代码来编写自己的文件系统。
翻译自: https://www.ibm.com/developerworks/aix/library/au-spunix_newfs/index.html
相关资源:微信小程序源码-合集6.rar