每日备份 500k+ 个文件的最快方法是什么?

每日备份 500k+ 个文件的最快方法是什么?

我们有一个应用程序,到目前为止已经生成了超过 54 万张图片。这些图片保存在一个树形结构中,到目前为止使用了 500 万个 Inode。

我们想每天在远程异地服务器上备份数据。我们考虑过使用 rsync,但不确定这是否是最快的方法。

你们对有效的备份策略有什么建议吗?

答案1

天哪,每天扫描 5,000,000 个 inode 来查找发生变化的文件要花这么长时间啊!

如果有一种方法可以仅备份自上次备份以来的更改,那会怎样?

嗯,你可以……快照

快照的最大障碍是切换到支持快照的文件系统。

在 Linux 上,两个著名的快照文件系统是:

两者都是写时复制文件系统。这对您来说实际上意味着他们会跟踪自上次快照以来的更改,以便当您将最新快照发送到备份服务器时,只会发送更改,但您仍然拥有您决定保留的所有每日备份的完整副本。

这意味着,作为奖励,您可以保留一天以上的备份,而不需要太多的额外空间(仅占用每天更改所使用的磁盘空间),并且您可以灵活地删除备份,根据需要保留每周、每月或每年的备份。

Btrfs 增量备份

这是您可以运行以进行增量备份并将其发送到备份服务器的命令示例:

# Make a snapshot
btrfs subvolume snapshot -r /app/data /backup/app-data-$(date "+%Y%m%dT%H%M%S%Z")

# Ensure the snapshot is saved
sync

# Find your latest snapshot, referred to as `/backup/app-data-THIS_BACKUP_TIMESTAMP` below
ls -lhtr /backup/

# Send the snapshot since the previous snapshot to the backup server
btrfs send -p /backup/app-data-LAST_BACKUP_TIMESTAMP /backup/app-data-THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "btrfs receive /backup/app-data"

笔记:-p /backup/app-data-LAST_BACKUP_TIMESTAMP如果这是第一次备份,则从最后一个命令中排除。

ZFS 增量备份

这是您可以运行以进行增量备份并将其发送到备份服务器的命令示例:

# Create a snapshot of the "data" dataset in your "app-pool" zpool
zfs snapshot app-pool/data@$(date "+%Y%m%dT%H%M%S%Z")

# Find your latest snapshot, referred to as `app-pool/data@THIS_BACKUP_TIMESTAMP` below
zfs list -rt snapshot app-pool/data

# Send the snapshot since the previous snapshot to the backup server
zfs send -i app-pool/data@LAST_BACKUP_TIMESTAMP app-pool/data@THIS_BACKUP_TIMESTAMP | ssh BACKUP_USER@BACKUP_SERVER "zfs receive backup-pool/app-data"

笔记:-i app-pool/data@LAST_BACKUP_TIMESTAMP如果这是第一次备份,则从最后一个命令中排除。

相关内容