最近TG上加了一位dalao(耐心的可爱大姐姐(x)),从她口中听闻了IDC供应商的一些幕后真想。加之受最近某些国人IDC跑路的影响,因此愈发担心这台服务器的数据安全(虽然大姐姐说本站目前在用的狗云大概不会跑路)。
于是,便想到用免费的OneDrive网盘进行定期数据备份。
前置知识:
一个大容量的OneDrive账户
(这里我采用了开小号注册开发者白嫖Office 365 E5订阅 + 开小号GitHub Action自动续期(ms:我 嫖 我 自 己。话说备份服务器难道不算开发者需求吗?当然算了~))
一台需要备份的服务器(废话)
准备完成后,可以开始利用OneDrive备份这台服务器了~
步骤一:rclone挂载OneDrive
首先安装需要的软件
我的服务器基于ProgynovaDebian,所以对应的命令为:
sudo apt install rclone fuse
同时在你的本机也安装rclone备用。
在你的本机(能打开浏览器的机器上),执行
rclone authorize "onedrive"
在浏览器中继续操作(登陆OneDrive并授权),并复制Paste the following into your remote machine --->,<---End paste之间的内容,那是一段json文本。
在服务器执行
sudo rclone config
依据指示操作(这点英文肯定大家都看得懂吧),并粘贴复制的json文本,完成rclone挂载点设置。
之后,在远程机器上运行:
sudo rclone mount MountName:RemoteDir LocalDir --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
其中MountName为之前在rclone中设置的挂载点名称,RemoteDir为远程文件夹的目录(OneDrive中的路径),LocalDir为本地挂载路径。
我的挂载点名称为OneDrive,远程路径为Backup,本地路径为/home/OneDrive,于是,我的命令就是:
rclone mount OneDrive:Backup /home/OneDrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000
这时你的终端会没有相应,没关系,这并不是rclone被卡死,而是正常现象。
打开另一个ssh,连接服务器,执行
df -h
可以正常看到OneDrive挂载点,说明挂载成功。
进入OneDrive挂载目录,新建几个文件试试?
你会发现网页端文件夹被神奇的同步了。
但是,就这样让rclone每次卡住一个终端可不是什么好主意,即使用screen运行,也缺乏必要的守护。服务器必要追求稳定,于是,我们选择用systemd守护rclone。
首先Ctrl+C你之前打开的rclone进程。
sudo nano /lib/systemd/system/rclone.service
粘贴以下内容:
[Unit] Description = rclone Requires=network.target [Service] User = root ExecStart = /usr/bin/rclone mount OneDrive:Backup /home/OneDrive --copy-links --no-gzip-encoding --no-check-certificate --allow-other --allow-non-empty --umask 000 Restart = on-abort [Install] WantedBy = multi-user.target
请将ExecStart一行替换为你所需要的内容。
sudo systemctl enable rclone sudo systemctl restart rclone sudo systemctl status rclone
没有报错,说明OneDrive挂载正式完成。
步骤二:编写备份脚本
首先决定你要备份的文件和备份方式,我要备份wordpress网站目录、wordpress数据库、apache2配置文件。
(什么?你说这台服务器上还跑着calendar?那种怎样都好的东西炸了就炸了吧~)
相应的备份命令为:
sudo tar -zcvf ./wordpress.tar.gz /var/www/wordpress sudo tar -zcvf ./apache.tar.gz /etc/apache2 sudo mysqldump -uUser -pPassword wordpress > wordpress.sql
哪里需要替换大家都很清楚(什么?你不知道?这都不知道还配做Linux运维?)
当然如果你认为我的数据库用户名密码就是User和Password那我也没办法~
把这些东西写成脚本,大概是这个样子:
#!/usr/bin/python3 import time dirName = str(time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime())) import os print('Creating Directory') os.system('mkdir ' + dirName) print('Zipping WordPress Site') os.system('sudo tar -zcvf ./' + dirName + '/wp_sitefiles.tar.gz /var/www/wordpress') print('Zipping Aapche2 Configure') os.system('sudo tar -zcvf ./' + dirName + '/apache2_conf.tar.gz /etc/apache2') print('Dumping Database') os.system('sudo mysqldump -uroot -pVirgo wordpress > ./' + dirName + '/wp_database.sql') print('Moving Files') os.system('mv ./' + dirName + ' /home/OneDrive/' + dirName)
(因为不会用bash所以只好用Python,不用骂了,我自己会爪巴的)
对这个文件chmod +x增加执行权限,然后用root账户运行以下~
然后你会看到你的OneDrive对应文件夹里出现了以时间为名的文件夹,里面还有你需要的文件
什么?里面只有奇奇怪怪的tmp文件,且执行没有完成?
请静待上传完成,执行
watch -n 0.5 -d sudo ifconfig eth0
用监视网络流量来减少你的焦虑
如果成功的话,只要让这个文件定时执行,我们的定期备份就算成功了。
sudo crontab -e
文件末尾追加以下内容:
0 3 * * 1 /home/Amagi/backup/work.py
这条命令意为每周1上午3时执行work.py,最后的可执行文件路径请修改成自己的文件。crontab具体用法请自行必应。
最后,别忘了启动cron服务。
sudo systemctl enable cron sudo systemctl start cron sudo systemctl status cron
素质三连,然后静待下次更新后,看成果吧~
呐,所以,如果对你有帮助的话,能否帮忙推荐一下这个萌新的博客呢?
评论~ NOTHING