我们正在使用网络 Samba 驱动器在我们的 Linux 服务器上进行备份。为了存储权限(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 和循环设备。这有效,但感觉不对。
当目标循环文件重新联机时,是否有可能触发循环设备的重新挂载?
我认为您对网络驱动器连接丢失时进入只读模式的假设是正确的。我用 Samba 共享上的一个小文件做了一个简单的测试,如果我拉动网络电缆,也会发生同样的事情。
至于问题的解决方案,我会这样做:
根据您实际进行备份的方式,我会将循环文件 rw 作为备份过程的一部分挂载,并在完成后将其卸载。这也有助于保护备份免受意外盗窃。
如果您需要在其他时间访问备份,请将其挂载为只读。您可以始终以这种方式挂载文件,除非您确实想要进行备份
这样,没有人会受到伤害,并且您可以在您想要的时候做您想做的事。考虑到安全问题,我什至会说它甚至比一直保持循环文件挂载 rw 好一点。
如果您使用 rsync 进行备份,您可以检查 rsync 退出状态以确定您是否不幸在备份时丢失了连接(其他工具也是如此 - 只是我的偏好)。然后,您可以采取相应的行动。
这并不能完全满足您的要求-我会说它可以使您得到一些更好的东西-但我认为您不能期望循环设备按您的意愿工作。反正有些诡计。
我希望这有帮助 :-)