我们每天都会执行一个自动 rsnapshot 作业,该作业会写入已安装的磁盘。最近,它没有写入已安装的磁盘,而是写入主文件系统,从而慢慢填满可用空间。
是否有一个选项可以在挂载定义 (fstab) 中使用,以确保在挂载不可用时不会对主磁盘进行写入?还是我必须将其放入与快照相关的脚本中?
谢谢
答案1
当文件系统被挂载时,挂载点将获得该文件系统的根 inode 的权限。如果文件系统未挂载,则作为挂载点的目录只是父文件系统上的另一个目录。
您可以利用这一事实来防止意外写入可能未挂载的挂载点:
- 卸载目标文件系统。
- 将挂载点的权限更改为不太友好的权限。
类似这样的操作chmod 0000 /path/to/mountpoint
应该可以正常工作。 - 重新挂载目标文件系统
挂载点的权限应更改以匹配已挂载文件系统的根 inode 的权限。
root
请注意,如果执行写入操作并且绕过了常规权限检查,则此方法效果不佳。
您可以使用immutable
标志(schg
或uchg
在BSD 系统,i
属性在 Linux 系统上)但我个人没有测试过文件系统属性的行为。直观上看,它们应该与文件系统权限的工作方式相同。
请注意,理想情况下,您需要修改备份脚本以确保安装了适当的文件系统,否则您将不得不捕获并处理上述解决方案将生成的错误。
检测输出中没有适当的文件系统mount
可能是一个更可靠的解决方案。
答案2
典型的解决方案是检查脚本,例如使用mountpoint
命令。
if mountpoint -q $dir ; then
echo "$dir is not mounted"
exit 1
else
echo "$dir is mounted"
fi
另一种方法是使用以下方法进行测试stat
:
if [ `stat -fc%t:%T "$dir"` != `stat -fc%t:%T "$dir/.."` ]; then
echo "$dir is mounted"
else
echo "$dir is not mounted"
exit 1
fi
答案3
有点旧了,但以防别人发现它。
参见 /etc/rsnapshot.conf
# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
no_create_root 1