#mount #tar-archive #tar #zip #libarchive #7z

app archivefs

一个只读的FUSE文件系统,用于挂载压缩存档,受archivemount启发。

3个版本 (稳定版)

1.0.1 2023年11月11日
1.0.0 2021年4月20日
0.1.0 2021年4月13日

#301 in 文件系统

GPL-3.0-or-later

33KB
823

archivefs

Archivefs是一个只读的FUSE文件系统,用于挂载压缩存档,受archivemount启发。

特性

  • 将libarchive支持的任何存档文件只读地挂载到目录中
  • 与archivemount相比,解压缩速度快几个数量级

存档格式

Archivefs支持libarchive支持的所有格式,包括但不限于

  • tar (使用gzip、bzip2、xz、zstd压缩)
  • cpio
  • ISO9660(包括Joliet和Rockridge扩展)
  • zip
  • 7-Zip

请注意,libarchive在读取rar存档时存在已知错误。

系统要求

运行

  • Linux内核3.15或更高版本(虽然FUSE可以在其他操作系统上工作,但archivefs使用的polyfuse crate目前仅支持Linux)
  • fusermount命令(通常由fusefuse2包提供)
  • libarchive

编译

  • Rust 1.31或更高版本
  • libarchive的开发文件(通常由libarchive-devlibarchive-devel包提供)

构建man页面

  • Python 3.5或更高版本
  • AsciiDoc

安装

# This will install only the archivefs executable in $HOME/.cargo/bin, without any
# man page. Also, make sure that the $HOME/.cargo/bin directory is in your PATH
cargo install archivefs

# Alternatively, you can build from source using the command
cargo build --release
# and then copy the file target/release/archivefs somewhere in your PATH

# To build the man page:
a2x -f manpage doc/archivefs.1.adoc
# and then copy the file doc/archivefs.1 in a man path (like $HOME/.local/share/man/man1 )

用法

archivefs [OPTIONS] ARCHIVEPATH MOUNTPOINT

示例会话

考虑包含文件file1file2的gzip tar存档files.tgz,以及一个空目录mnt

$ ls
files.tgz    mnt/

# Mount the archive file
$ archivefs files.tgz mnt

$ ls mnt
file1    file2

# Perform desired read operations on the archive via mnt/
# For example, to extract a file simply copy it
$ cp mnt/file1 ~/

# Unmount the archive when done
$ umount mnt

写入支持

与archivemount不同,后者通过重新创建存档来支持将数据写入存档,archivefs只支持从存档中读取。

请注意,如果存档包含硬链接,archivefs将它们视为单独的文件。

依赖关系

~7–16MB
~185K SLoC