zoukankan      html  css  js  c++  java
  • 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE

    HACK #21FUSE

    本节将介绍使用用户进程的文件系统框架—FUSE。
    FUSE概要
    FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架。使用FUSE,就可以以一般应用程序进程的形式生成独特的文件系统,与已有的文件系统同样进行挂载。从Linux 2.6.14开始实际安装FUSE。
    例如,在最近的Linux发布版中,有一些标准配置用于挂载Windows的文件系统NTFS的ntfs-3g(Ubuntu等)。当连接到存在NTFS格式文件系统的分区表所在的磁盘时,经由gvfs挂载。此时,使用FUSE安装到用户空间的ntfs-3g开始将NTFS文件系统挂载到用户的目录树。
    此外还有ZFS on FUSE。ZFS适用的是CDDL这个与GPL没有互换性的许可证。因此它不能整合到拥有GPL许可证的Linux内核中。在这种情况下,使用FUSE安装ZFS,从而能够使用ZFS文件系统,就是ZFS on FUSE。一旦启动zfs-fuse守护进程(demon),就可以使用zfs或zpool命令进行ZFS的操作。
    安装FUSE文件系统
    libfuse就是用于简单安装使用FUSE的独特文件系统的标准库。例如,安装并读入专用的文件系统时,只需要生成下列4个功能。
    getattr 获取文件属性
    readdir 获取目录条目
    open 打开文件
    read 读入文件
    卸载
    使用FUSE挂载的文件系统,可以使用fusermount命令来卸载。

    $ fusermount -u 挂载点
    

    使用FUSE的文件系统
    这里将介绍使用从普通发布版中可以获取的FUSE的文件系统。
    sshfs
    将可以把SSH远程登录的机器的目录挂载到本地机器上,在与远程服务器频繁进行文件交换时非常便利。例如,将remote主机的admin用户的foo目录挂载到本地的~/remote-foo时,命令行如下。类似一般的SSH,同样要求输入密码。

    $ sshfs hshimamoto@remote:foo ~/remote-foo
    

    在此之后,对本地机器的~/remote的foo目录进行的处理就是对远程机器remote的foo目录的处理。
    fuseiso
    挂载ISO映像文件。一般挂载ISO映像时是使用loopback设备进行挂载的,但有时普通用户权限是无法操作loopback设备的。另外loopback设备还存在可利用次数的限制。
    使用fuseiso,就可以很简单地将ISO映像挂载到自己的文件系统,并参照其内容。

    # fuseiso foo.iso ~/iso
    encfs
    

    加密文件系统。用户将特定目录加密,然后挂载将该目录解密后的文件系统。
    已加密的文件(目录)名和内容通过文件系统生成时指定的算法加密,但需要注意的是,目录中的文件数或文件大小、属性等不会因为加密而修改。
    命令示例如下。创建目录enc-foo,并挂载为dec-foo。

    $ mkdir ~/enc-foo
    $ mkdir ~/dec-foo
    $ encfs ~/enc-foo ~/dec-foo
    

    首次挂载加密目录时,将进行加密的初始设置。将显示如下信息,输出用来进行加密设置的提示符。
    生成新的加密卷标。

    Please choose from one of the following options:
     enter "x" for expert configuration mode,
     enter "p" for pre-configured paranoia mode,
     anything else, or an empty line will select standard mode.
    ?>
    

    针对详细的设置这里不作介绍。直接按【Enter】键,使用默认设置。

    Standard configuration selected.
    

    设置已完成。生成下列属性的文件系统:
    文件系统加密算法:"ssl/aes",版本3:0:2
    Filename encoding: "nameio/block", version 3:0:1
    键大小:192位
    Block Size: 1024 bytes
    Each file contains 8 byte header with unique IV data.
    Filenames encoded using IV chaining mode.
    File holes passed through to ciphertext.

    Now you will need to enter a password for your filesystem.
    You will need to remember this password, as there is absolutely
    no recovery mechanism. However, the password can be changed
    later using encfsctl.

    新的Encfs密码:
    确认Encfs密码:
    再设置用来加密、解密的密码就完成了。尝试在dec-foo目录下创建文件。

    $ vi ~/dec-foo/bar.txt
    $ cat ~/dec-foo/bar.txt
    

    Hello Encfs!!
    卸载dec-foo后,就难以用普通的方法来参照这个加密目录。

    $ fusermount -u ~/dec-foo
    

    看一下enc-foo目录,可以发现由于已经加密,因此内容不是文本,而是二进制数据。

    $ ls enc-foo/
    QQJqAaAW-hx1QiWGH8fRHplZ
    $ file enc-foo/QQJqAaAW-hx1QiWGH8fRHplZ
    enc-foo/QQJqAaAW-hx1QiWGH8fRHplZ: data
    

    再次使用encfs命令进行挂载时,这次只要求输入密码。

    $ encfs ~/enc-foo ~/dec-foo
    

    EncFS密码:

    $ ls dec-foo/
    bar.txt
    $ cat dec-foo/bar.txt
    Hello Encfs!!
    

    小结
    本节介绍了FUSE,还介绍了一些使用FUSE的便捷文件系统。此外可能还有其他使用FUSE的文件系统。
    参考文献
    Documentation/filesystems/fuse.txt
    FUSE(http://fuse.sourceforge.net/)
    —Hiroshi Shimamoto

  • 相关阅读:
    Java 反射 调用 demo
    Java 使用 DBCP mysql 连接池 做数据库操作
    Java 使用 Dbutils 工具类库 操作mysql
    NodeJs 遍历文件夹内容 上传到服务器.并输出上传记录文件
    Java-JDBC.mysql 工具类 读取本地文件配置
    vue使用axios发送数据请求
    word2vec 理论与实践
    pytorch_SRU(Simple Recurrent Unit)
    Highway Networks Pytorch
    Highway Networks
  • 原文地址:https://www.cnblogs.com/tcicy/p/8552824.html
Copyright © 2011-2022 走看看