我们在 Linux 服务器上使用网络 Samba 驱动器进行备份。为了存储权限(Samba 不支持此功能),我们在网络驱动器上为一个大文件(50GB)创建了一个循环设备。这在大多数情况下都运行良好,但每隔几周循环设备就会进入只读模式。
以下是网络驱动器和循环驱动器的 fstab 代码片段:
//xyxyxy.your-backup.de/backup /backup cifs credentials=/root/backup-credentials,iocharset=utf8 0 0
/backup/backup.lp /backup-loop ext3 loop,sync,defaults,_netdev 0 0
我也尝试了标准循环配置,但问题仍然存在:
/backup/backup.lp /backup-loop ext3 loop,sync 0 0
我们的假设:据我所知,当与物理设备的连接丢失时,挂载的驱动器将进入只读模式。因此,当网络驱动器失去连接时,循环文件将消失,循环挂载将进入只读模式。cifs 处理其自身挂载的重新连接,但循环对此一无所知。
我们当前的解决方案是在我们的 cronjob 启动备份过程之前强制重新安装 samba 和 loop 设备。这可行,但感觉不对。
当目标循环文件重新上线时,是否有可能触发循环设备的重新挂载?
答案1
我认为您关于当与网络驱动器的连接丢失时,系统将进入只读模式的假设是正确的。我使用 Samba 共享上的一个小文件进行了一个简单的测试,如果我拔掉网线,也会发生同样的事情。
至于解决这个问题的方法,我会这样做:
根据您实际的备份方式,我会在备份过程中挂载循环文件 rw,并在完成后卸载它。这也有助于防止备份被意外盗用。
如果您需要在其他时间访问备份,请以只读方式挂载它。您可以始终以这种方式挂载文件,除非您确实想要进行备份
这样,就不会有人受伤,你也能随时随地做你想做的事。我甚至可以说,考虑到安全问题,这比一直将循环文件挂载为 rw 要好一点。
如果您使用 rsync 进行备份,您可以检查 rsync 退出状态,以确定在备份过程中是否不幸丢失了连接(其他工具也是如此 - 只是我的偏好)。然后您可以采取相应的措施。
这并不能完全满足您的要求 - 我想说它能给您带来一些更好的东西 - 但我不认为您可以期望循环设备按您希望的方式工作。无论如何,有些技巧。
我希望这有帮助 :-)
答案2
多年后,我们用 ssh 上的 Borg 备份替换了 samba 上的这个循环驱动器。
这对于文件备份来说是一个总体更好的解决方案。