Gm-aaa's blog.

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

2024/12/06
loading

写在前面


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. 不支持文件夹同步的网盘
    1. 2.1. 百度网盘
    2. 2.2. 夸克网盘
  3. 3. 在国内使用不方便的网盘
    1. 3.1. GoogleDrive
    2. 3.2. DropBox
    3. 3.3. OneDrive
  4. 4. 对象存储
  5. 5. rclone是什么?
    1. 5.1. 核心功能
    2. 5.2. 主要用途
    3. 5.3. 技术特点
    4. 5.4. 使用场景
  6. 6. rclone使用方式
    1. 6.1. 安装
    2. 6.2. 配置
    3. 6.3. 挂载
    4. 6.4. 同步
    5. 6.5. 结尾