fnOS进阶:飞牛NAS如何自动备份U盘文件
有网友问 fnOS 能否实现群晖的 USB Copy 功能。目前没有配套组件,但是我用脚本实现了类似功能,这里分享一下思路:
1、创建 U盘数据自动备份脚本
首先创建自动备份 U盘数据的脚本文件 backup.sh 内容如下:
#!/bin/bash
# 获取所有 USB 设备的挂载点
get_usb_mount_points() {
# 借助 lsblk 命令列出所有块设备,筛选出 USB 设备及其挂载点
lsblk -o TYPE,RM,MOUNTPOINT | awk '$1 == "part" && $2 == "1" && $3 != "" {print $3}'
}
# 调用函数获取 USB 挂载点
usb_mount_points=$(get_usb_mount_points)
# 检查是否存在 USB 挂载点
if [ -z "$usb_mount_points" ]; then
echo "未找到已挂载的 USB 设备。"
else
echo "已挂载的 USB 设备挂载点如下:"
echo "$usb_mount_points"
fi
# 定义备份目录
backup_dir="//vol1/1000/john/backup"
# 检查备份目录是否存在,不存在则创建
if [ ! -d "$backup_dir" ]; then
mkdir -p "$backup_dir"
fi
# 检查USB设备是否已挂载
if [ -n "$usb_mount_points" ]; then
# 使用rsync进行备份
rsync -avu --include="*.jpg" --include="*.jpeg" --include="*.png" --include="*/" --exclude='*' "$usb_mount_points/" "$backup_dir"
echo "USB照片备份完成。"
else
echo "USB照片备份失败。"
fi
该脚本会备份指定图片格式到 NAS 的指定目录,你可以适当修改其中内容,比如修改备份保存位置。在 fnOS 里创建一个文件夹,然后查看“详细信息”,复制“原始路径”来修改 backup_dir 路径:

backup_dir="/vol5/1000/downloads/backup"
然后我讲解一下备份规则:
1、rsync 增量备份,我这里选择只备份 jpg、jpeg、png 这三种格式的图片:
rsync -avu --include="*.jpg" --include="*.jpeg" --include="*.png" --exclude='*' "$mount_point/" "$backup_dir"
2、如果你想要全部文件备份,去掉备份条件就可以了:
rsync -avu "$mount_point/" "$backup_dir"
准备好脚本之后在 fnOS 用户文件夹目录创建或者上传 backup.sh ,并给脚本添加执行权限:

然后测试运行一下是否能正常执行
3、如果 sh 脚本不能正常执行,应该是字符串问题,运行下面的命令:
sed -i -e 's/r$//' ./backup.sh
2、创建 udev 规则自动执行脚本
接下来我们要创建一个udev规则,这样插入 U盘后自动执行 U盘复制脚本,首先创建文件11-usb-backup.rules,内容如下:
ACTION=="add", SUBSYSTEMS=="block", KERNEL=="sd*", RUN+="/home/john/backup.sh"
这里也要将 /home/john/backup.sh 修改成你的设备实际保存脚本的路径。然后将udev规则文件移动到udev规则目录:
sudo mv 11-usb-backup.rules /etc/udev/rules.d/
并重新加载udev规则:
sudo udevadm control --reload-rules
这样当 USB 设备插入到 Linux 系统时,系统会自动执行 U盘备份脚本,指定数据备份到指定目录。
就分享到这里,我测试有效,你也可以自己尝试一下!欢迎反馈~
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

