硬链接占用大量空间

硬链接占用大量空间

我做了一个rsync增量备份脚本对于我的服务器,它将复制 MySQL 数据库备份和指定的文件夹路径到远程服务器。这是 Github 上的代码。

第53-57行的代码摘录:

############### Create most current hand link

echo "Creating most current hard link on backup server $most_recent_backup_link"
ssh $remote_backup_server rm -rf ${most_recent_backup_link}
ssh $remote_backup_server cp -alv ${remote_backup_folder}/backup-${backup_folder_name}/ ${most_recent_backup_link}

我正在在备份服务器上创建最新硬链接时出现问题(程序中的第 53-57 行)。一切正常,rsync 仅复制大约 1-2MB 的数据。但硬链接复制过程使用了大约30MB数据。我得到了一大堆未发生改变的文件,而唯一发生改变的文件大小非常小。通常这不是问题,但是当您每小时备份一次时,备份应该尽可能小。

例如,我上次进行的备份,rsync 传输了 1.3MB。但备份目录却增长了 35MB。

为什么硬链接会占用这么多硬盘空间?

答案1

查看您的代码(在 git hub 上),看起来您正在为每个备份创建一个 .sql.gz 文件。即使只有 1 或 2MB 的更改,就 rsync 而言,备份将是一个全新的文件,因此它将取消链接文件以创建一个新的文件,因为它们现在不同了。

您可能希望直接备份 mysql 目录(这需要在备份时停止 mysql)以实现所需的空间节省。如果采用这种方式,您可能希望运行从服务器来执行备份,这样,您的数据库将始终保持运行,并且只有在执行备份时才会停止从服务器。

答案2

您应该研究一下 storeBackup (storeBackup.org)。它使用硬链接进行重复数据删除备份,功能非常强大。

它比 rsync 具有更多用于制作硬链接备份的功能。对于每小时备份,您可以考虑 storeBackup 选项“lateLinks”,它将推迟创建所有硬链接。您可以使用所有硬链接进行每日备份。(或者,如果您选择保留每个每小时备份,您可以在以后链接所有推迟的备份。)

storeBackup 还具有一项功能,可让您决定保留哪些备份。例如,您可以告诉它只保留过去 24 小时的所有每小时备份,保留过去 30 天的每日备份,并保留超过该天的月份的第一个备份。这样您就不会浪费太多空间。

相关内容