#fuse #squashfs #mount #squash-fs #squashfuse

squashfuse-rs

使用 Rust 编写的 Squashfs 的 FUSE 实现

4 个版本 (2 个破坏性更新)

0.3.0 2024 年 7 月 26 日
0.2.1 2024 年 7 月 26 日
0.2.0 2024 年 7 月 26 日
0.1.0 2024 年 7 月 25 日

#455文件系统

Download history 302/week @ 2024-07-25 14/week @ 2024-08-01

每月 316 次下载

MIT 许可证

9KB
173 代码行

squashfuse-rs

使用 fuserbackhand 包在 rust 中实现的 SquashFS 的 FUSE 实现!

受一个名为 squashfuse 的 C 库的启发 https://github.com/vasi/squashfuse/tree/master

欢迎提交 PR,我对 SquashFS 和 FUSE 并不十分了解,所以如果有更好的方法,请告诉我!

示例用法来自 appimage-type2-runtime-rs

fn fusefs_main(offset: u64, mountpoint: &Path, archive_path: &Path) -> anyhow::Result<()> {
    let reader = BufReader::new(File::open(&archive_path)?);
    let fs = squashfuse_rs::SquashfsFilesystem::new(
        backhand::FilesystemReader::from_reader_with_offset(reader, offset)?,
    );
    let mount_options = vec![
        fuser::MountOption::FSName("squashfuse".to_string()),
        fuser::MountOption::RO,
    ];
    match fuser::mount2(fs, mountpoint, &mount_options) {
        Ok(()) => {
            println!("Mounted {:?} at {:?}", archive_path, mountpoint);
            Ok(())
        }
        Err(err) => Err(anyhow::anyhow!("Failed to mount: {}", err)),
}

依赖

~7.5MB
~139K SLoC