1 个稳定版本
1.2.0 | 2024年2月12日 |
---|
#425 in 文件系统
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