Mount Microsoft OneDrive storage as FUSE filesystem.
Note: For Nix users, the program is already packaged via Nix Flake in flake.nix
.
-
Use your package manager to install these dependencies:
- pkg-config
- openssl
- fuse (libfuse)
-
On Debian 12 (and other distro's) you may need to also install the following to resolve missing files:
- libssl-dev
- libfuse3-dev
-
If your rustc version isn't 1.65, and you don't mind not using the official repos, you can install it from here Rust's official site.
-
Compile and install the program from crates.io:
$ cargo install onedrive-fuse
-
For the first time, you should register your own Application (Client) ID for the API access. Read
doc/register_app.md
for detail steps. -
Login to your OneDrive account with the Client ID of your own application from the previous step. By default, we only request for read-only access.
$ onedrive-fuse login --client-id <paste-your-client-id-here>
If you want read-write access, you should instead run,
$ onedrive-fuse login --read-write --client-id <paste-your-client-id-here>
This will prompt a browser window to ask you to login your Microsoft account for OneDrive. After a successful login, the web page will pass the result token back to onedrive-fuse automatically, and prints
Login successfully.
You can close the web page now, and the command running above should also have exited successfully.Your access token will be saved under XDG config directory, which is by default
~/.config/onedrive-fuse/credential.json
. So you don't need to re-login every time. But if you are away for too long, eg. for months, you might have to re-login.
-
Create an empty directory as mount point, like
~/onedrive
, and mount your OneDrive storage on it. By default the mounted storage is readonly.$ mkdir -p ~/onedrive # The directory to be mounted should be empty. $ onedrive-fuse mount ~/onedrive
If you want to mount with read-write access, you must also request for read-write access in the previous login step. Then mount the storage with,
onedrive-fuse mount ~/onedrive -o permission.readonly=false
⚠️ Use read-write permission with care! Bugs may corrupt your files in OneDrive! -
Once it's started, wait for seconds for initialization until
FUSE initialized
displayed, indicating the filesystem is ready now. You can do whatever you want under the mount point.The program runs in foreground by default, the terminal window should be kept open. You may need other mechanism like
systemd
(see below) to make it run background. -
If you are done for, run this command to umount the filesystem gracefully. You should NOT directly
Ctrl-C
or kill theonedrive-fuse
instance, it usually cause data loss.$ fusermount -u ~/onedrive
⚠️ We havn't yet implemented auto-waiting for uploading before shutdown. Please wait your upload session to be finished before umounting the filesystem. Or your pending upload session would be cancelled.
This program is integrated with systemd and is expected to be started as a user service.
See onedrive-fuse.service.example
for an example setup.
Note that you still need to manually login first.
- FUSE syscalls
- Read
- access
- forget
- getattr
- lookup
- open
- O_RDONLY
- opendir
- read
- readdir
- release
- releasedir
- statfs
- Write
- create
- mkdir
- open
- O_WRONLY/O_RDWR
- O_TRUNC
- O_EXCL
- rename
- rmdir
- setattr
- size
- mtime
- unlink
- write
- Other
- destroy
- flush
- fsync
- fsyncdir
- init
- Unsupported
- bmap
- getlk
- getxattr
- link
- listxattr
- mknod
- readlink
- removexattr
- setlk
- setxattr
- symlink
- Read
- Cache
- Statfs cache
- Inode attributes (stat) cache
- Directory tree cache
- Sync remote changes with local cache
- File read cache
- File write cache/buffer
GPL-3.0-only