#fuse #one-drive #mount #microsoft #user #storage

app onedrive-fuse

将 OneDrive 存储挂载为 FUSE 文件系统

10 个版本

0.2.8 2024年6月4日
0.2.7 2024年2月12日
0.2.6 2023年3月29日
0.2.4 2023年2月10日
0.1.0 2020年4月25日

#42 in 文件系统

Download history 4/week @ 2024-05-17 1/week @ 2024-05-24 159/week @ 2024-05-31 27/week @ 2024-06-07 5/week @ 2024-06-14 1/week @ 2024-06-21 14/week @ 2024-07-05

537 每月下载

GPL-3.0-only

130KB
3K SLoC

onedrive-fuse

crates.io

Microsoft OneDrive 存储作为 FUSE 文件系统挂载。

安装

注意:对于 Nix 用户,程序已经通过 Nix Flake 在 flake.nix 中打包。

  1. 使用您的包管理器安装这些依赖项

    • pkg-config
    • openssl
    • fuse (libfuse)
  2. 从 crates.io 编译并安装程序

    $ cargo install onedrive-fuse
    

准备

  1. 首次使用时,您应该注册自己的应用程序 (客户端) ID 以访问 API。请阅读 doc/register_app.md 了解详细步骤。

  2. 使用上一个步骤中应用程序的客户端 ID 登录您的 OneDrive 账户。默认情况下,我们仅请求只读访问。

    $ onedrive-fuse login --client-id <paste-your-client-id-here>
    

    如果您想请求读写访问,应运行以下命令:

    $ onedrive-fuse login --read-write --client-id <paste-your-client-id-here>
    

    这将弹出一个浏览器窗口,要求您登录 Microsoft 账户进行 OneDrive。登录成功后,网页将自动将结果令牌传递回 onedrive-fuse,并打印 FUSE 已初始化,表示文件系统已准备好。现在您可以关闭网页,上面的命令也应该已成功退出。

    您的访问令牌将被保存到 XDG 配置目录 中,默认为 ~/.config/onedrive-fuse/credential.json。因此,您不需要每次都重新登录。但是,如果您离开太久,例如数月,可能需要重新登录。

用法

手动

  1. 创建一个空目录作为挂载点,例如 ~/onedrive,然后将您的 OneDrive 存储挂载到它上。默认情况下,挂载的存储为只读。

    $ mkdir -p ~/onedrive # The directory to be mounted should be empty.
    $ onedrive-fuse mount ~/onedrive
    

    如果您想挂载为读写访问,您必须在之前的登录步骤中请求读写访问。然后使用以下命令挂载存储:

    onedrive-fuse mount ~/onedrive -o permission.readonly=false
    

    ⚠️ 请谨慎使用读写权限!错误可能会损坏 OneDrive 中的文件!

  2. 启动后,等待几秒钟进行初始化,直到显示 FUSE 已初始化,表示文件系统已准备好。您可以在挂载点下执行任何操作。

    程序默认在前台运行,应保持终端窗口开启。您可能需要其他机制(如以下所述的 systemd)来使其在后台运行。

  3. 如果您已经完成操作,请运行此命令以优雅地卸载文件系统。您不应直接按Ctrl-C或杀死onedrive-fuse实例,这通常会导致数据丢失。

    $ fusermount -u ~/onedrive
    

    ⚠️ 我们尚未实现关机前的自动等待上传。请在卸载文件系统之前等待上传会话完成。否则,您的挂起上传会话将被取消。

Systemd

此程序与systemd集成,并预期作为用户服务启动。有关示例设置,请参阅onedrive-fuse.service.example。请注意,您仍然需要先手动登录

FUSE功能实现

  • FUSE系统调用
    • 读取
      • 访问
      • 忘记
      • getattr
      • lookup
      • open
        • O_RDONLY
      • opendir
      • read
      • readdir
      • release
      • releasedir
      • statfs
    • 写入
      • create
      • mkdir
      • open
        • O_WRONLY/O_RDWR
        • O_TRUNC
        • O_EXCL
      • rename
      • rmdir
      • setattr
        • size
        • mtime
      • unlink
      • write
    • 其他
      • destroy
      • flush
      • fsync
      • fsyncdir
      • init
    • 不支持的
      • bmap
      • getlk
      • getxattr
      • link
      • listxattr
      • mknod
      • readlink
      • removexattr
      • setlk
      • setxattr
      • symlink
  • 缓存
    • Statfs缓存
    • Inode属性(stat)缓存
    • 目录树缓存
    • 同步远程更改与本地缓存
    • 文件读取缓存
    • 文件写入缓存/缓冲区

许可协议

GPL-3.0-only

依赖项

~14–27MB
~444K SLoC