在飞牛之前一直都是用群晖系统,后看飞牛不错,目前已经全部专用飞牛NAS。不过飞牛的备份不太好用,尤其与网盘同步是经常出错且没有增量备份。
而群晖的cloudsync确实好用,因此就想办法通过docker安装群晖并将飞牛目录挂载到群晖,利用cloudsync进行同步。
因群晖的file station提供远程挂载功能,但是挂载的目录不能用于cloudsync同步,因此需要使用rclone将飞牛目录挂载到群晖指定的目录才可行。
-
docker部署群晖,具体到https://github.com/vdsm/virtual-dsm了解如何部署
-
群晖开启ssh, 并通过ssh安装rclone
curl https://rclone.org/install.sh | sudo bash
配置rclone config, 我是使用webdav连接飞牛,长期运行后比较稳定,很少出现断连。
-
群晖设置开机启动挂载飞牛目录,群晖的控制面板-任务计划-新增 触发的任务,选择用户root,开机运行,代码如下:/volume1/file/fnnos需根据实际情况改为群晖的挂载目录
#!/bin/sh
synopkg stop CloudSync
# 等待系统核心服务完全启动,避免因网络未就绪而挂载失败
sleep 30
# 首先尝试卸载,防止重复挂载(如果之前不干净关机)
/usr/bin/rclone mount fnos: /volume1/file/fnnos \
--config /root/.config/rclone/rclone.conf \
--allow-other \
--allow-non-empty \
--daemon
# 可选:记录日志,便于排查问题
echo "Rclone mount script executed at $(date)" >> /volume1/file/rclone_mount.log
sleep 30
synopkg start CloudSync
以上代码是防止群晖在没有完成挂载就运行cloudsync而导致找不到同步目录的错误。
-
设置cloudsync的同步配置
以上对于百度网盘的同步很友好。
对于其他网盘,如阿里、115、123、夸克等,cloudsync没有提供接入。但是可以通过飞牛OS的远程挂载后再用cloudsync的webdav挂载实现同步。需要将网盘使用飞牛OS远程挂载。然后修改远程挂载的目录。
具体飞牛OS修改远程挂载目录方法如下:
ssh连接飞牛,用nano或vim编辑/etc/mountmgr/mout_info.json文件中各个远程挂载的"mountPoint",指定至飞牛自定义的挂载目录。然后运行systemctl restart nfs-server.service重启挂载服务。
另外,群晖通过rclone挂载有时也难免出现错误,一旦无法挂载,cloudsync找不到同步目录就会出错,而这些错误即使停止cloudsync再重新启动也不会恢复,只能重新设置同步目录等,非常繁琐。出现同步目录不存在时,可以通过ssh运行以下脚本恢复:
#!/bin/sh
# 群晖CloudSync错误修复脚本
# 描述:停止CloudSync服务,重置数据库中的错误状态,然后重新启动服务
echo "开始执行CloudSync错误修复脚本..."
# 1. 停止CloudSync服务
echo "正在停止CloudSync服务..."
synopkg stop CloudSync
if [ $? -ne 0 ]; then
echo "错误: 无法停止CloudSync服务"
exit 1
fi
# 2. 等待10秒确保服务完全停止
echo "等待服务停止..."
sleep 10
# 3. 切换到CloudSync数据库目录
echo "切换到CloudSync数据库目录..."
cd /volume1/@cloudsync/db
if [ $? -ne 0 ]; then
echo "错误: 无法访问CloudSync数据库目录"
exit 1
fi
# 4-7. 使用SQLite3处理数据库
echo "正在处理数据库..."
# 先显示当前错误状态
echo "当前错误状态:"
sqlite3 config.sqlite "SELECT sync_folder, error FROM session_table;"
# 重置错误状态
echo "正在重置错误状态..."
sqlite3 config.sqlite "UPDATE session_table SET error = 0 WHERE error != 0;"
# 显示重置后的结果
echo "错误状态已重置,重置数量:"
sqlite3 config.sqlite "SELECT changes() as 重置的错误数量;"
# 检查SQLite命令执行状态
if [ $? -ne 0 ]; then
echo "错误: 数据库操作失败"
exit 1
fi
# 8. 再次等待10秒
echo "等待服务重启准备..."
sleep 10
# 9. 重新启动CloudSync服务
echo "正在启动CloudSync服务..."
synopkg start CloudSync
if [ $? -ne 0 ]; then
echo "错误: 无法启动CloudSync服务"
exit 1
fi
echo "CloudSync错误修复脚本执行完成!"
echo "服务已重新启动,所有错误状态已重置。"