因为之前买的腾讯云轻量应用服务器就选了一年,结果现在快到期了(续费不起,泪目~)

更换服务器是个很纠结的事情,为了钱包着想,只能选低配的,因此系统的选择上 linux 直接排在了首位。

为了避免误删的情况,我通常会将网站备份到 OneDrive 中,在此记录一下操作过程。(好吧,百度翻了好多文章)

前期准备

这里用到的OneDrive 客户端来源自 GitHub,该工具支持同步/上传,并使用 Inotify 进行实时文件监控,来达到实时同步的效果,可以说就是一个备份工具。支持 OneDrive for Business 和个人版,给我们备份下数据还是很不错。

Github 地址:https://github.com/abraunegg/onedrive

GitHub上作者建议内存至少为 1GBSwap 不够实际上,512M 等小点的内存也是可以的,只需将 Swap 调大点即

前期准备

在安装 OneDrive 前,需要先安装以下几个依赖,避免安装失败。(以下内容按顺序逐行输入即可)

sudo yum install libcurl-devel
sudo yum install sqlite-devel
curl -fsS https://dlang.org/install.sh | bash -s dmd

以上几个依赖缺一不可!

安装完成后会提示以下内容:

Run `source ~/dlang/dmd-2.099.0/activate` in your shell to use dmd-2.080.0.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.

含义是使用source ~/dlang/dmd-2.099.0/activate的命令可以进入环境,使用deactivate命令将退出环境。

软件安装

软件需要到环境中才能安装,首先输入命令source ~/dlang/dmd-2.099.0/activate进入环境,之后依次执行如下命令:

git clone https://github.com/skilion/onedrive.git
cd onedrive
make
sudo make install

完成以上命令后,代表已完成安装,此时输入退出环境命令:deactivate

站点授权

退出环境后,输入命令:onedrive,页面会得到一串 OneDrive 网络授权激活链接

Authorize this app visiting:

https://.....   //授权激活链接

Enter the response uri: 

复制链接跳转到 Microsoft 的站点进行授权,最终会得到一个空白页面,复制空白页面地址栏的链接,粘贴到Enter the response uri: 的后面,然后 Enter 确认,这样就完成了授权动作。

执行同步

完成授权后,便可以执行同步操作了,首次输入命令:onedrive,页面将会自动下载全部内容(PS:如果想先配置完后再同步,请先根据后面的同步配置进行相应操作)

1、执行同步

#该命令第一次会将OneDrive网盘所有文件/文件夹都下载同步到云服务器的/root/OneDrive文件夹。
onedrive --sync

此后如果OneDrive网盘或者/root/OneDrive文件夹里的文件/文件夹有变动,再执行该命令会进行双向对应的变动/同步。

6、选择性同步
如果你不想同步整个网盘,而是某个文件夹,比如rookieo,使用命令:

#使用前提是OneDrive网盘和/root/OneDrive文件夹都有这个文件夹
onedrive --sync --single-directory rookieo

7、单向同步
在某些情况下(如备份网站数据),可能只需要上传到OneDrive。这样我们可以使用以下命令:

onedrive --sync --upload-only

该命令只会单向同步云服务器/root/OneDrive文件夹,不受OneDrive网盘文件变动影响

8、卸载客户端

cd /root/onedrive
make uninstall
rm -rf ~/.config/onedrive

同步配置

如果你要同步多个 OneDrive 账号,那么需要新建多个配置文件,然后运行多个同步命令即可。

1、更改同步文件夹
一般 Onedrive 默认的同步文件夹为/root/OneDrive,其实我们是可以更改的,比如更改到/home/rookieo文件夹。(以下仅以nano配置方式举例,如有类似宝塔面板之类的可视化界面,可以直接手动创建config配置文件并编辑,nano只是一种 linux 上的可视化界面功能,并不是必须的。)

需先在 linux 服务器中安装有nano,没有的可以先执行下面的代码进行安装:

sudo yum -y install nano

使用nano新增并打开配置文件config

nano /root/.config/onedrive/config

在 nano 的页面中添加以下代码:

sync_dir="/home/rookieo"

按住Ctrl+xy保存退出 nano 页面。

2、更改其它同步设置
除了步骤1说的sync_dir参数外,我们还可以使用以下配置参数:

sync_dir:同步文件的目录
skip_file:同步期间将跳过与此模式匹配的任何文件或目录
skip_symlinks:同步期间将跳过符号链接的任何文件或目录
monitor_interval:监视进程处理本地和远程更改的时间间隔(秒)

参数详解:

#skip_file后面参数不区分大小写。支持通配符和*。如果有多个文件/目录使用|分隔即可。
如:skip_file = ".*|~*|Desktop|Documents/OneNote*"

#skip_symlinks设置为"true"将在同步时跳过所有符号链接。
如:skip_symlinks = "true"

#monitor_interval为同步等待时间,默认每45秒同步一次,你可以修改成每10分钟同步一次。
如:monitor_interval = "300"

最后我们在后台进行监控,使用命令:

#synchronize为进行一次性同步
onedrive --synchronize --verbose --confdir="~/.config/onedrive"
#monitor使应用程序保持运行并监视本地和远程的更改
onedrive --monitor --verbose --confdir="~/.config/onedrive"

测试没问题了,就使用screen在后台运行。

实时同步

本处介绍如何通过在后台打开screen会话的方式实现Onedrive同步命令的不间断运行(screen的好处是不会因为连接断开而导致操作中断),如有其他同步方式也可自行调整。

使用改方法前需先在 linux 服务器中安装有screen,没有的可以先执行下面的代码进行安装:

sudo yum install screen

安装完成后,可以输入如下命令进行相应操作:

screen -S xx  #xx为创建会话的名称
# 隐藏并保留当前会话窗口:按Ctrl+A,再按"D"键 ,这样哪怕中途掉线或者要离开,会话也会一直存在。
screen -r xx #恢复名字为xx的会话

进入screen窗口后,在页面内输入以下代码执行Onedrive的实时同步操作

onedrive --monitor --verbose --confdir="~/.config/onedrive"

按住Ctrl+A+D便可退出回之前的桌面,而此时screen窗口也变为在后台运行,并不会因为退出而关闭,从而实现Onedrive的实时同步。

如想再次打开此前的screen会话却忘记或并未设定会话名称,可以执行如下代码,找到所需要的会话再打开:

screen -ls #列出你所有的会话列表

 screen -S 1928057 -X quit #关闭不用的会话

如想彻底关闭会话,可先进入到会话窗口,按住Ctrl+C,唤出命令行,然后输入以下代码:

exit #执行会话关闭

到此,本文所介绍的内容就全部结束了,只需要根据上面的步骤一步一步操作,便可实现centos服务器中文件同步到Onedrive网盘的操作,如果你有其他更好的方法,欢迎留言。

参考资料

适用于 Linux 的 OneDrive 客户端,支持 VPS 和 OneDrive 之间实时同步/备份

适用于 Linux 的 OneDrive 客户端,支持 VPS 和 OneDrive 之间实时同步/备份