Gm-aaa's blog.

Debian12同步onedrive/googledrive/s3的解决方案

2024/12/06 3

写在前面


linux上对于网盘同步的这个功能,相应的平台支持一直都比不上windows。因为即便Linux在服务器领域有着夸张的市场占有率,但在桌面端,windows依旧是王者级别。

之前使用了一段时间的Ubuntu24.04LTS桌面端,由于写项目时,总是有数据备份焦虑。除了偶尔手动局域网内通过samba备份文件夹内容到网关上的HDD,总想着在某个网盘再备份一份。

经过了一段时间的探索,总结出以下几个网盘:

不支持文件夹同步的网盘

百度网盘

image-20241206131621257

不得不说,百度网盘的linux客户端还是很简约的,少去了windows上的弹窗广告、开机自启动的agent…但同样也少去了windows上的文件夹同步功能。这就很难受。

夸克网盘

image-20241206133728446

官网并没有对Linux平台的客户端,就更不用说文件同步功能了。

在国内使用不方便的网盘

GoogleDrive

谷歌的云端硬盘在windows上的使用体验简直是绝佳的,个人感觉是除了windows原生支持的onedrive之外,最好的网盘。但因为众所周知的原因,使用会有一些门槛。

image-20241206212805471

并且在linux上也和Gnome桌面进行了集成。

优点:

  1. 生态成熟,能够和谷歌相册、workspace深度集成
  2. 支持的其他平台多,openai、notion等多个平台都能够导入googledrive的文件进行操作
  3. 在各个操作系统上,功能都比较完善
  4. 免费15G能够满足日常的文档、代码同步

缺点:

  1. 国内使用需要魔法

DropBox

这个网盘的体验是很不错的,Android、Linux、windows、IOS、MAC几乎全平台都支持同步功能,及其强大。虽说Linux上有一些小BUG,但是并不影响正常使用。

image-20241206210656668

image-20241206212725669

缺点:

  1. 免费空间只有2G,要想满足日常使用,价格上还是有些贵的。

  2. 同GoogleDrive,正常使用需要一定门槛

OneDrive

onedrive和windows深度集成,相信大部分人就算没使用过也听说过它 。但有一点我至今都不是很明白:

onedrive的网页版为什么无法使用,但是桌面端只要登录上去之后,却能够很丝滑地同步呢?这样做的原因又是什么?这就很奇怪

onedrive在linux上的客户端为命令行形式,让人感到很难受的是,有点搞不懂命令行的一些参数,按照默认设置挂载的话,它会把你网盘的所有东西全下载到本地,而不是像windows上只在本地保留一个索引或者缩略图,需要用到时再进行下载。

折腾了半天也没搞明白有些参数的含义,所以放弃了。

对象存储

国内的云服务商比如阿里、腾讯、七牛提供的OOS服务大多都是流量计费的,但是毕竟这么做对于个人来说充满了不确定性。

万一哪天被人刷了流量,可就得不偿失了。

所以排除国内的云服务商,发现赛博活佛cloudflare提供的R2对象存储服务很不错。

免费额度:

  1. 存储空间:每月10GB
  2. A类操作:每月100万次
  3. B类操作:每月1000万次

A操作通俗一点指的是对存储桶的写操作,而B操作就是读;并且完美兼容亚马逊的s3对象存储。

这对我这种开始学习写博客的个人玩家可是非常友好,顺带也将图床一步步从vps上的lsky搬到github,再搬到cloudflare。关于图床的解决方案等以后有时间再分享。这次主要还是探讨一下这些云端存储服务在Linux上的一些操作。

rclone是什么?

通俗一点来说,只要它支持的网盘,都能够挂载到本地,并且能够控制是下载至本地缓存,或者仅仅本地保留索引。并且能够通过Linux的cron定时任务将需要进行同步的文件夹定时同步,完美满足我的需求。下面有请perplexity.ai选手发言:

Rclone是一个功能强大、开源、使用go语言开发的命令行工具,主要用于云存储管理和数据传输。以下是它的主要特点:

核心功能

  • 管理云存储上的文件
  • 在不同云存储服务之间同步和传输数据
  • 支持超过40种云存储产品,包括S3对象存储、商业和消费者文件存储服务
  • 提供类似unix命令的操作,如rsync、cp、mv、mount等

主要用途

  • 将文件备份(和加密)到云存储
  • 从云存储还原(和解密)文件
  • 在不同云服务之间镜像数据
  • 在云存储供应商之间迁移数据
  • 将云存储挂载为本地磁盘

技术特点

  • 保留文件时间戳

  • 自动验证校验和

  • 支持断点续传

  • 支持服务器端传输

  • 提供加密、压缩、分块等功能

  • 支持Windows、macOS、Linux和FreeBSD系统

    1

使用场景

  • 文件传输和备份
  • 多云存储服务管理
  • 数据同步和迁移
  • 云存储系统挂载

rclone使用方式

安装

终端直接安装就OK

sudo apt install 

配置

配置是比较麻烦的一点,在安装好之后,进行交互配置

rclone config

image-20241206215938215

第一次使用需要new一个remote,输入n,紧接着会让你输入一个名称,起一个好记的名字就行。

image-20241206220335521

然后,会让你选择一个具体云端存储产品,输入对应产品的序号回车即可

接下来的操作会有所不同,不过大致的思路都是一致的

这里拿onedrive举例

image-20241206220626150

client_id和client_secret都不填,直接回车,这里选择注册产品时的地域。这里我选择global

image-20241206221105661

下面的advanced config和 auto config都选择默认,直接回车,仅接着会弹出浏览器的对话

image-20241206221259564

正常登录即可。登录好之后就算配置完成了。

需要注意的是,配置cloudflare的R2存储桶时需要准备好密钥id和密钥的key,第一步选择amazone的s3,提供商选择cloudflare,后续大致步骤都一致。

挂载

挂载比较简单

rclone mount <配置远程存储的名字>: <要挂载在本地的文件夹路径> --daemon

比如:

rclone mount google_drive: ~/google_drive/ --daemon

–daemon的意思是在后台以守护进程形式进行

这样挂载会将远程存储索引至本地,需要浏览时再下载至本地缓存。当在文件夹内添加内容时,会上传至对应的远程存储。对于缓存的配置参数,我并没有花过多的时间去研究,有兴趣的朋友可以自行研究一下。

需要注意的是,挂载r2时,需要加上存储桶的名字。

rclone mount <配置远程存储的名字>:<存储桶的名字> <要挂载在本地的文件夹路径> --daemon

同步

rclone sync <本地需要同步的文件夹> <远程存储的名字>:<和本地文件夹对应的远程文件夹路径>  --progress

–progress的意思是将同步的过程进行输出,遇见问题方便调试

比如:

rclone sync /home/g/OneDrive/项目 onedrive:项目  --progress

执行这个命令,只会同步一次,要想实现自动化,还需要shell脚本和定时任务的配合

将先前的同步命令编辑到一个.sh结尾的文件中

rclone sync /home/g/OneDrive/项目 onedrive:项目  --progress
echo "OK"

然后使用定时任务

crontab -e # 编辑定时任务

在定时任务中加入

*/30 * * * * sh /home/g/desktop/rclone-onedrive.sh >> /home/g/desktop/onedrive.log

这里设置的是每i半个小时执行一次同步,顺带还能保留一个日志

结尾

在折腾的过程中,发现现在互联网上好多的中文内容都已经过时。比如搜索一个中文的技术问题,往往排在前面的都是CSDN、掘金等等这种社区的博客内容,内容质量堪忧。想要解决问题还得花大量时间在内容筛选上。还是好好学习英语吧,英文论坛的质量还是很高的,不管什么项目,官方文档一般第一个支持的语言就是英文。加油!共勉。

CATALOG
  1. 1. 写在前面
  2. 2. 不支持文件夹同步的网盘
  3. 3. 在国内使用不方便的网盘
  4. 4. 对象存储
  5. 5. rclone是什么?
  6. 6. rclone使用方式