为什么把这两个问题放在一起?因为它们都是关于文件系统的
为OneDrive配置Rclone
使用rclone可以与OneDrive网盘同步,甚至像在Windows系统中一样挂载到本地文件系统中。rclone可以同步多种网盘,其他可能请参考List of applications/Internet - ArchWiki
安装rclone
pacman -Syu rclone
如果需要使用挂载功能,还需要安装fuse3
pacman -Syu --asdeps fuse3
OneDrive配置
Microsoft OneDrive - rclone doc
rclone config
这个指令将运用交互式的方式逐步引导用户完成设置
第一步,设置名称(Enter name for new remote.),这个名称配置当前网盘在rclone的名称,之后使用输入的名称加英文冒号的形式即可代指此网盘如OneDrive:
第二步,网盘类型(Type of storage to configure.),根据前面程序给出的表输入序号或括号中的小写英文序列来告诉rclone当前网盘的类型,OneDrive当前(rclone-1.61.1)为31
第三、四步,一些客户端(Option client_id.)与(Option client_secret.),rclone提示两项一般留空
第五步,设置OneDrive区域,请参考自身情况与解析onedrive的各个版本,到底选哪个! - 知乎
第六步,编辑高级设置,默认不编辑
第七步,登录微软账户与授权rclone应用访问网盘
第八步,选择连接类型,默认是OneDrive Personal or Business
第九步,rclone将自动搜索所有可能的网盘,并列出以供选择,根据提示选择即可
之后的步骤让用户确定配置是否正确,全部确认即可。输入q退出配置程序
rclone的使用
rclone仅使用带冒号的配置名称代指远程网盘,如 OneDrive:,其余均认为是本地位置
sync:rclone sync [option] SOURCE DESTINATION
同步指令会在以SOURCE的为准覆盖DESTINATION,操作中会包含必要的删除操作,强烈建议在运行前仔细检查来源与目标位置,并增加--dry-run并观察反馈查看有哪些文件会被更新,以防止不必要的操作造成数据丢失。
--create-empty-src-dirs 选项同步空文件夹以同步目录结构。
-P 选项实时查看rclone进程的工作状况
copy:rclone copy [option] SOURCE DESTINATION
复制指令可以用于复制单个文件到任意位置,注意复制文件夹时不会包含任何目录结构(与cp指令不同),源中的所有文件都会摊开到目标中
mount:rclone mount [option] REMOTE: LOCAL_DIR
挂载指令依赖fuse3,在Arch Linux中是可选依赖,如果不能使用,请先检查是否安装fuse3
挂载指令会将远程网盘挂载为本地文件系统,可以直接在命令行运行,也提供了daemon模式。rclone会在收到SIGINT时卸载并退出,如果在daemon模式下,则可以使用fusermount -u LOCAL_DIR卸载。
--vfs-cache-mode [full|writes|minimal|off] 控制rclone缓存模式,full会在所有读写中启用缓存,提供最大限度的兼容性,writes则关闭了只读打开文件的缓存,minimal只缓存以“读写”方式打开的文件,off关闭所有缓存。对于OneDrive,推荐至少使用writes模式。
Systemd挂载单元
#这一节单元记录我的处理方式,就是写了个挂载脚本,能用就没再深究了。官方文档在此
提示:这个方法在停止服务时会因为rclone返回exit-code导致systemd标记为failed我也试过用--daemon的方式运行,依然会标failed,就没再折腾了。我这倒是没什么实际上的问题,说一声让大家了解情况。
在~/.config/systemd/user 中创建文件 onedrive-mount.service,文件内容为
[Unit]
Description=Mount OneDrive: to ~/OneDrive
[Service]
Type=simple
ExecStartPre=/usr/bin/sleep 5s
ExecStart=/usr/bin/rclone mount OneDrive: /home/kevin/OneDrive --vfs-cache-mode full
ExecStopPost=/usr/bin/fusermount3 -u /home/kevin/OneDrive
[Install]
WantedBy=plasma-core.target
之后systemd --user enable onedrive-mount.service --now
Systemd同步单元
最近网络不太好,把OneDrive挂载到本地后总是导致Dolphin卡顿甚至卡死。于是又写了个用来开机同步的单元。在~/.config/systemd/user 中创建文件 onedrive-sync.service:
[Unit]
Description=Sync OneDrive: to ~/OneDrive on start up
[Service]
Type=oneshot
ExecStart=/usr/bin/rclone sync OneDrive: /home/kevin/OneDrive --create-empty-src-dirs --update
Restart=on-failure
RestartSec=30
[Install]
WantedBy=xdg-desktop-autostart.target
2025-03-12:更新目标,与应用同步启动,防止在没有网的情况下卡住 plasma 桌面