我有一个 Linux 日志服务器,多个应用程序在其中写入数据。数据以突发方式写入,并且写入许多不同的文件。我需要备份这个乱七八糟的文件,最好尽可能保留文件版本之间的一致性,并避免文件被截断。服务器上的数据总量约为 100Gb。我真正想要(但不能)的是关闭系统,冷备份系统,然后重新启动它。
各种备份工具对并发修改提供了哪些保证?它们何时“冻结”文件版本?我目前正在研究 rsync、dump 和 tar,但我也愿意考虑其他(开源)替代方案。
遗憾的是,更改应用程序或阻止备份写入不是一个选项。系统尚未运行 LVM,但我已考虑重建系统,然后进行快照。
答案1
您正在考虑的所有工具都无法保证不会发生并发修改。但是,您真的需要时间点快照吗?如果需要,请使用上面提供的 LVM 快照选项。由于您已将 rsync 作为一个选项,因此我假设磁盘到磁盘备份也是一个选项。
最不安全的是 dump,它在读取磁盘块时会复制它们。考虑到数据的大小,目录信息和数据之间可能存在很大差异。对于磁盘到磁盘的备份,您可以考虑将 dd 复制到相同大小的分区作为替代方案。这两种解决方案本质上都做同样的事情,也存在同样的问题。
Tar 将逐个读取文件并读取到每个文件的末尾。如果在 tar 备份文件时文件被重命名或删除,tar 将备份它开始读取的文件。对于日志文件来说,这是一个合理的解决方案。
Rsync 的行为类似于 tar,但只复制更改。本质上,它会将所有更改复制到目录中。使用基于日期的日志轮换方案 (logfile.年月日) 而不是常见的轮换版本方案 (logfile.1 logfile.2gz ...)。它可以有效地备份您的日志文件。
答案2
某种日志轮换对您来说不是一种选择吗?只需备份已轮换的日志文件 - 这不是一个解决方案吗?
是的 - 否则 LVM 级别的快照将是你的最佳选择[请记住,当快照处于活动状态时,你的写入性能会下降]。
答案3
如果您正在使用 syslog,则可以配置日志服务器以将日志实时复制到另一台服务器(例如 rsyslog)进行实时备份。
然后按照长期存档的建议备份所有旋转的文件。
logrotate 也可以针对自定义应用程序进行配置,并且可以在轮换日志上应用 bash 脚本。因此,您可以完全跳过外部备份工具中的 /var/log,并将日志复制到更静态的存档目录中。