You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于FUSE编写文件系统:如何将设备挂载至挂载点?

FUSE文件系统扩展设备参数的解决方法

问题核心

你当前的FUSE示例程序仅支持单一挂载点参数,直接传入设备路径+挂载点两个参数时,FUSE默认的参数解析逻辑会把设备路径当成无效选项,进而报错。要实现管理指定设备并挂载的需求,需要修改程序的参数处理逻辑。

解决步骤

1. 修改程序的参数解析逻辑

在FUSE默认参数解析前,先提取自定义的设备路径参数,再调整参数列表让FUSE能正确识别剩余内容。以下是C语言的示例代码片段:

#include <fuse.h>
#include <stdio.h>
#include <string.h>

static char *target_device = NULL;

// 自定义参数解析函数
static int parse_args(int argc, char *argv[]) {
    if (argc < 3) {
        fprintf(stderr, "用法: %s <设备路径> <挂载点> [FUSE选项]\n", argv[0]);
        return -1;
    }
    // 保存目标设备路径
    target_device = argv[1];
    // 调整参数数组:移除设备参数,让FUSE仅处理挂载点及后续选项
    memmove(&argv[1], &argv[2], sizeof(char*) * (argc - 1));
    argc--;
    // 交给FUSE处理剩余参数
    return fuse_parse_cmdline(&argc, &argv, NULL, NULL);
}

int main(int argc, char *argv[]) {
    if (parse_args(argc, argv) != 0) {
        return 1;
    }

    // 此处可添加设备初始化逻辑,比如打开目标块设备
    // int fd = open(target_device, O_RDWR);
    // ...

    // 调用FUSE主函数,此时参数列表已符合FUSE要求
    return fuse_main(argc, argv, &your_fuse_ops, NULL);
}

2. 编译并正确执行

  • 编译时链接FUSE库:gcc hello.c -o hello -lfuse
  • 执行时注意权限:操作块设备通常需要root权限,建议用sudo运行,同时优先使用绝对路径避免波浪号展开问题:
    sudo ./hello /dev/nvme0n2 /home/your_username/mount_point
    
    若坚持使用波浪号,确保未将其放在引号内,让shell能正常展开。

额外注意事项

  • 处理设备时要做好前置检查:确认设备存在、有权限访问、为合法块设备等
  • 如需添加FUSE官方选项,直接追加在命令末尾即可,例如:
    sudo ./hello /dev/nvme0n2 ~/mount_point -o allow_other
    

内容的提问来源于stack exchange,提问作者gmm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:37:19