#zstd #fuse #compression #folder #uncompressed #mapped

app fuse-zstd

一个简单的FUSE文件系统,将使用zstd压缩的现有文件夹映射到包含未压缩文件的文件夹。

1 个稳定版本

1.2.0 2024年2月12日

#425 in 文件系统

MIT 许可证

56KB
1.5K SLoC

FUSE-zstd

FUSE-zstd是一个简单的FUSE文件系统,将使用zstd压缩的现有文件夹映射到包含未压缩文件的文件夹。

它做什么?

它只是重新挂载现有文件系统路径的一部分。

file.txt.zst
directory/
directory/file.txt.zst

file.txt
directory/
directory/file.txt

注意

当你直接将压缩文件添加到源文件夹时,你需要重新在挂载文件夹中打开它们以重新计算未压缩大小(例如使用head命令),否则挂载文件夹中的文件将显示为空。

并确保源文件夹中的所有文件都包含.zst扩展名,否则文件将不会在挂载目录中显示。

要求

  • fuse3
  • libfuse3

从源代码构建

安装rust

https://www.rust-lang.net.cn/tools/install

安装开发库

Debian

apt install fuse3 libfuse3-3 libfuse3-dev

编译它

cargo build --release

准备一个包

Debian

安装cargo-deb

cargo install cargo-deb

构建包

cargo deb

用法

确保在您的/etc/fuse.conf中启用了选项user_allow_other

确保源和挂载点目录存在并具有适当的权限。

mkdir -p /tmp/fuse-zstd/ /tmp/fuse-zstd-compressed/

运行它。

cargo run -- --data-dir /tmp/fuse-zstd-compressed/ --mount-point /tmp/fuse-zstd/

现在您在mount-point目录中创建的每个文件都应该在data-dir中作为带有zst扩展名的压缩文件出现。

限制

  • 源文件夹必须只来自单个FS(需要具有唯一的inode)。
  • 源文件夹FS必须支持扩展文件属性(xattr)以存储文件的未压缩大小。
  • 源文件夹必须只包含文件和目录(否则fuse-zstd可能会崩溃)。

动机

尽管有一些文件系统支持压缩,但并非所有托管服务都支持此类文件系统。想象一下,您有一个包含数千个大型JSON文件的ext4文件系统。在这种情况下,FUSE-Zstd可以非常方便。

依赖关系

~8–18MB
~243K SLoC