《对话UNI新型文件系统简介13331.pdf》由会员分享,可在线阅读,更多相关《对话UNI新型文件系统简介13331.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 对话 UNI 新型文件系统简介 Lele was written in 2021 在 UNIX 中,所有东西都是文件,但是并非以相同的方式存储每个文件。文件系统决定在介质上如何分解并组织文件。在过去,介质意味着磁带或磁盘。但是,文件系统现在可以把任何源 远程服务器、存档文件甚至其他文件系统 “翻译”为虚拟介质。本文介绍几种新式的文件系统。简介有句老话说:“在 UNIX 中,所有东西都是文件”,这种说法很准确。从概念上说,每个 UNIX 资源都是一个简单的文件,可以打开、读和/或写它。您的实验数据、shell 启动脚本、UNIX 内核、主目录、每个网络套接字和/bin/ls 可执行程序等等都是
2、文件。常用缩略词 SFTP:安全传输协议 SSH:安全 Shell 但是,每个文件并不相同。实验数据可能是高度定制的数据库。shell 脚本是文本文件,但是有一个重要的特征:以?!#(常常称为?shebang)开头的行指出由哪个应用程序解释此文件。内核和所有可执行程序都是二进制文件,它们都采用可预知的系统工具可操纵的特定格式。目录是用于内容编目的特殊索引。另外,每个文件并非以相同的方式存储。文件的结构和大小取决于底层文件系统?即把文件数据存储到物理设备上的子系统。相同的数据 比如同一文件的两个拷贝 在不同的文件系统上以不同的方式组织。每个文件系统规定自己的存储战略,可能是为满足特定的条件而设计
3、的。例如,一种文件系统可能是以提高速度为目的而优化的,另一种文件系统偏重高效地使用空间,还有一种文件系统偏重于防止数据丢失或损坏。通常,对于部署哪种文件系统,并没有简单的答案:必须分析自己的存储需求,选择能够满足目标的文件系统或文件系统组合。UNIX(和许多软件商)提供很多种文件系统,所以一定能找到适合自己需要的文件系统。列出适用于 UNIX(在许多情况下也适用于 Linux)的几种文件系统。表 1.UNIX 文件系统 文件系统 优点 Zettabyte 文件系统(ZFS)实质上规模无限的文件系统(1?zettabyte等于 270字节),可以使用常见的现成的存储介质构造它。ZFS 还可以在写
4、数据时压缩数据,从而进一步扩大介质容量。网络文件系统(NFS)这是 UNIX 的出色特性之一,NFS 让远程文件系统看起来像是本地的。NFS 非常适合共享数据。日志文件系统(JFS)JFS 和许多替代品保留对每个文件所做的更改的日志。当系统崩溃或损坏时,“重播”日志以恢复文件。B 树文件系统(Btrfs)Btrfs 是最新的文件系统之一,是未来的 Linux 版本的默认文件系统,它通过维护数据和元数据校验和来保证持久性。Btrfs 还提供快照并可以混合使用几乎任何大小的设备。您自己的文件系统通常,文件系统要求相应地调整介质,所以把一种文件系统改为另一种通常要使用格式化的物理备份驱动器,还需要很
5、长的恢复和检验过程。显然,这样的更改很复杂,只能由系统管理员执行。但是,许多 UNIX 和 Linux 内核最近的一项扩展让任何用户都可以创建和使用多种文件系统,不需要特殊的特权。这个扩展称为?FUSE,即Filesystem in User Space。可以使用这种软件非常轻松地创建新的文件系统。从 FUSE 派生的文件系统可以通过 SFTP 挂装文件;自动地扫描文件中的病毒;像本地驻留的数据文件一样操作只读的 CD-ROM 光盘。让我们在一个常见的操作系统平台上安装 FUSE,研究任何用户现在都可以使用的一些新型文件系统。现代的 UNIX 和 Linux 内核通常都包含对 FUSE 的支持
6、,所以构建此软件的过程与构建任何实用程序代码相似。必须下载软件包,解压它,运行配置脚本以探测系统的功能,构建并安装代码。给出用于安装 FUSE 的代码。清单 1.安装 FUSE$wget fuse2.8.42.8.42.8.4configure$make$sudo make install 到本文发表时,最新版本是 FUSE 2.8.4。一定要从 FUSE 项目主页下载最新代码(见中的链接)。编译之后,FUSE 包安装构建新的 FUSE 文件系统所需的很多库和名为fusermount的应用程序,这个应用程序用于挂装和卸载 FUSE 文件系统。除了通常提供给?mount 命令的选项之外,fuse
7、rmount 还有几个特殊选项。自制 NFS安装基础代码之后,可以继续安装 FUSE 文件系统。我们要尝试的第一个 FUSE 文件系统是 SSHFS,它是一种基于 SFTP 的文件系统。只要服务器支持 SSH(大多数服务器都符合这个条件),就可以通过 SSHFS 把任何远程目录挂装为本地文件系统。在继续操作之前,要确认系统上有?Glib 和?Gthread。如果系统上有 GNOME,很可能有这些库;否则,从源代码或通过操作系统的本机包管理器安装它们。(Debian Linux 系统有 Aptitude。Red Hat Linux 系统提供?rpm、yum 和 YaST。)给出安装 SSHFS
8、的代码。清单 2.安装 SSHFS$wget projects/fuse/files/sshfs-fuse/tar xzf cd$./configure$make$sudo make install 如果运行 Ubuntu 或者 UNIX 或 Linux 的其他变体,您的发行版可能提供所有软件包的预构建二进制代码。例如,在 Ubuntu 上,目前可以用以下命令安装列出的所有 FUSE 软件:$apt-get install fuse-utils libfuse2 sshfs 如果您依赖的代码是最新的,还可能能够用?apt-get install sshfs 命令安装 SSHFS。安装了 FUS
9、E 库和 SSHFS,就可以把能够通过 SSH 访问的任何远程目录挂装为本地文件系统(见?)。通过组合?ssh 和 mount,提供远程系统的名称、登录凭证、希望挂装的远程目录和本地挂装点(可以是任何本地目录)。清单 3.把能够通过 SSH 访问的目录挂装为文件系统$ssh ls bin Documents lib Media Pictures Sites tmp Desktop Downloads Library Movies projects Source Documentation Dropbox local Music Public src$cd$mkdir-p mounts/exam
10、ple$sshfs:/home/me mounts/example$cd mounts/example$ls bin Documents lib Media Pictures Sites tmp Desktop Downloads Library Movies projects Source Documentation Dropbox local Music Public src 如您所见,现在可以像本地文件一样方便地使用远程目录的内容。如果您是使用多个系统的开发人员,SSHFS 让您能够用本地命令 比如cp、make 等 操作远程文件。可以输入?fusermount-u/some/mount
11、/point以卸载 FUSE 文件系统。因为 FUSE 文件系统的表现就像一般的文件系统一样,所以也可以输入umount/some/mount/point。另一个远程文件系统变体称为?S3FS。S3FS 并不使用您自己的远程服务器和 SFTP,而是把 Amazon Simple Storage Service(Amazon S3)bucket 挂装为本地文件系统。S3FS“自然、透明地在 S3 中”存储文件,还可以启用本地缓存以尽可能减少下载量。最大文件大小是 5GB。与 SSHFS 一样,可以下载并构建源代码,然后马上就能使用它。注意:S3FS 包依赖于?cURL 库开发头文件和 LibXM
12、L2 库。给出安装 S3FS 实例的代码。清单 4.安装 S3FS$wget tar xzf cd s3fs$make$sudo make install 假设您已经有一个 Amazon S3 账号,账号提供访问密钥和秘密访问密钥,就可以用以下命令挂装自己的任何 bucket:$s3fs bucket_name-ouse_cache=/tmp-o accessKeyId=your_access_key -o secretAccessKey=your_secret_access_key/mnt 有了 S3FS,就可以把整个 Git 存储库放在 Amazon S3 上,或者使用?rsync 在 A
13、mazon 的存储系统上存储备份。访问任何存档FUSE 的另一个重要工具是?archivemount,这个实用程序可以把很多形式的存档挂载为本地文件系统,包括 tarball(即用 gzip 压缩的 tar 存档)。假设系统上有?libarchive,就可以快速地构建?archivemount,见?。清单 5.安装 archivemount$wget 0.6.1 tar xzf 0.6.1 cd archivemount-0.6.1$./configure$make$sudo make install 例如,可以使用?archivemount 把它自己的 tarball 挂装为文件系统。给出代
14、码。清单 6.把 tarball 挂装为文件系统$tar tfz 0.6.10.6.10.6.10.6.10.6.1 mkdir-p/mnt/tgz$archivemount 0.6.1/mnt/tgz$cd/mnt/tgz/archivemount-0.6.1$ls configure depcomp CHANGELOG install-sh missing COPYING README 与 SSHFS 相似,archivemount 为 tarball 提供与本地文件系统相似的无缝的访问。顺便说一句,如果在 tarball 的“文件系统”中修改、删除或添加任何文件,那么当卸载 FUSE 文
15、件系统时所有修改会保存到原来的 tarball 中。fusermount-u/mnt/tgz 命令从指定的挂装点卸载 FUSE 文件系统。列出一个 tarball“文件系统”的内容。清单 7.通过 archivemount 写文件$cd/mnt/tgz/archivemount-0.6.1$echo Remember this for later.NOTES$ls CHANGELOG COPYING depcomp missing configure install-sh NOTES README$fusermount-u/mnt/tgz$tar tfz 0.6.10.6.10.6.10.6.
16、10.6.1 中最后的 tar 命令确认 NOTES 确实已经添加到 tarball 中了。对于用 archivemount 扩展存档,有一个警告:软件的作者指出,在存档中写文件应该谨慎,因为如果写操作失败,所有修改都会丢失。但是,一般来说,少量写操作不会出问题。尽管如此,archivemount 的只读特性是非常出色的。如果希望检查通过 FUSE 挂装的文件系统,只需运行典型的?mount 命令并寻找标有 fuse 的系统,见。清单 8.通过 FUSE 挂装的文件系统$mount/dev/sda1 on/type ext3(rw,relatime,errors=remount-ro)tmpf
17、s on/lib/init/rw type tmpfs(rw,nosuid,mode=0755).udev on/dev type tmpfs(rw,mode=0755)tmpfs on/dev/shm type tmpfs(rw,nosuid,nodev)devpts on/dev/pts type devpts(rw,noexec,nosuid,gid=5,mode=620)fusectl on/sys/fs/fuse/connections type fusectl(rw)archivemount on/home/strike/mnt/tgz type (rw,nosuid,nodev,
18、user=strike)本文所用的测试环境是在 Dell 桌面 PC 上运行的 Ubuntu 10。在所示的 mount 脚本中,可以在底部看到 archivemount 文件系统,在顶部看到 Linux 挂装的典型物理设备。适合保存机密数据的文件系统根据前两个示例,您可以想到 FUSE 能够包装许多连网的服务和文件格式,从而对远程或打包的文件提供无缝的访问。确实有很多有效的实现。WikipediaFS 把 Wikipedia 挂装为本地文件系统,可以在其中本地地编辑文章。其他软件包为博客、Flickr 和 Google Mail 服务提供相似的功能。FUSE 的另一个特性是镜像,即并行地维护
19、文件的拷贝。典型的示例是 FUSE-centric Encrypted File System(EncFS)。指定一个源目录和一个目标目录,写到源目录中的所有文件就会自动地加密并保存到目标目录中。EncFS 需要?librlog,这是一个灵活的消息日志记录库。从源代码或发行版的存储库安装它,然后继续构建 EncFS,见?。清单 9.安装 EncFS$wget tar xzf cd$./configure$make$sudo make install 安装软件包之后,就可以使用它了。必须创建两个新目录 一个用于保存原来的文件,一个用于保存加密的文件。encfs 实用程序映射这两个目录,见。清单
20、10.创建用于加密的目录对$mkdir/data$mkdir/encrypted_data$encfs/encrypted_data/data Creating new encrypted volume.Please choose from one of the following options:enter x for expert configuration mode,enter p for preconfigured paranoia mode,anything else,or an empty line will select standard mode.p Paranoia conf
21、iguration selected.Configuration finished.The file system to be created has the following properties:Filesystem cipher:ssl/aes,version 2:2:1 Filename encoding:nameio/block,version 3:0:1 Key Size:256 bits Block Size:1024 bytes,including 8 byte MAC header Each file contains 8 byte header with unique I
22、V data.Filenames encoded using IV chaining mode.File data IV is chained to filename IV.File holes passed through to ciphertext.-WARNING-The external initialization-vector chaining option has been enabled.This option disables the use of hard links on the file system.Without hard links,some programs m
23、ay not work.The programs mutt and procmail are known to fail.For more information,please see the encfs mailing list.If you would like to choose another configuration setting,please press CTRL-C now to abort and start over.Now you will need to enter a password for your file system.You will need to re
24、member this password,as there is absolutely no recovery mechanism.However,the password can be changed later using encfsctl.New Encfs Password:Verify Encfs Password:一般情况下,可以选择 paranoia 模式。接下来,输入用于保护文件的密码并再次输入以确认密码。给出代码。清单 11.EncFS 自动地加密新文件$cd/data$vi Create file with your secrets.$ls$ls/encrypted_dat
25、a LKs2bi5sfttNlyExybM6eNck 创建的每个文件都会出现在加密的目录中,甚至文件名也加密了。操作完之后,只需卸载未加密的目录,见?。此目录的内容被删除,只留下加密的文件。清单 12.卸载未加密的目录$fusermount-u/data$ls/data No such file or directory$ls/encrypted_data LKs2bi5sfttNlyExybM6eNck 要想查看未加密的文件,应该把一个挂装点连接到前面加密的文件集。当出现提示时,输入密码以验证自己的身份:$encfs/encrypted_data/data EncFS Password:$l
26、s/data 重新挂装之后,可以以明文看到原来的文件。对文件的任何修改会被重新编码。FUSE:并不是玩具!尽管前面的示例相当简单,但是不要低估 FUSE 的能力。一些强大的文件存储解决方案也在用户空间中运行。例如,ZFS-Fuse 是一种用户空间中的 ZFS 实现。MooseFS 是一种容错的网络分布式文件系统。它把数据分散在几个物理服务器上,但是用户作为一个与 UNIX 相似的文件系统资源操作它。GlusterFS 是一个基于 FUSE 的高性能分布式文件系统。解释 GlusterFS 部署超出了本文的范围,但是应该简要描述可以用 FUSE 构建的功能,从而避免修改内核和应用补丁。具体地说,
27、GlusterFS 可以:跨越任意数量的计算机。把不同类型的存储设备和物理文件系统 GlusterFS 将它们称为brick?聚合为一个统一的池或名称空间。以特殊的风格组合文件系统特性 GlusterFS 将它们称为translator?以构建定制的存储解决方案。例如,一个 translator 提供复制,而另一个通过 TCP/IP 实现连接。通过提前读、延迟写和许多其他技术大大提高性能。GlusterFS 3 大大简化了软件的初始设置,只比跨系统子网建立 SSH 密钥复杂一点儿。但更棒的是,GlusterFS 不要求更新内核或执行特殊的定制。因为它是用 FUSE 编写的,它在内核的环境之外操
28、作,任何开发人员都可以扩展它。发挥 FUSE 的威力!FUSE 是一种不可思议的技术。有了它,就可以用任何流行的编程语言开发新的文件系统,包括 Python、Ruby、Lua、C/C+、Java 语言等。另外,创建和部署新的文件系统并不需要修改所有正在运行的系统的内核。可以通过另一篇 developerWorks 文章“”进一步了解 FUSE 如何与内核协作。其他资料和这里提到的项目的链接见?。现在已经有很多 FUSE 文件系统,而且还在不断出现新的。ZFS-Fuse 和 GlusterFS 是非常尖端的解决方案,而?archivemount 和 SSHFS 的功能比较简单。所有 FUSE 文件系统都用以满足特定的需求。如果您有特殊的需求,可以考虑使用 FUSE 开发自己的文件系统,这只需编写很少的代码。