我的意图是每天创建服务器上某个硬盘驱动器的“快照”。如何自动确保今天、三天前、五天前、十天前(等等)的快照被保留并循环替换?我找到了一个工具:口是心非,但我没有找到任何方法来使用它来实现这一点。我应该使用 bash shell 脚本吗?有什么例子可以让我得到启发吗?
系统运行的是 Debian。
答案1
口是心非会创建快照,但是以压缩档案的形式,而不是可以直接读取的形式。
创建快照的方法有多种。一些高级文件系统,例如ZFS和Btrfs将它们作为内置功能,就像某些磁盘层一样,例如左心室容量。
在通用文件系统上,基本技术是重现要为其创建快照的目录树,但创建硬链接到每个文件而不是复制文件。当文件被删除并被新版本替换时,快照保留旧版本。请注意,某些应用程序会就地修改文件;这也会修改快照版本,因为它们是相同的文件。这是基于硬链接的解决方案的固有问题。
直接硬链接的一种变体是在备份文件时始终创建副本,但如果自上次备份以来文件没有更改,则创建指向较早备份的硬链接而不是创建新副本。与前一种方法不同,此方法适用于备份,因为它不会因修改旧备份中的文件而面临重写历史记录的风险。
同步与--link-dest
选项和快照是制作此类快照的最常用工具。 Rsnapshot 是一个更高级别的工具:它在底层使用 rsync,但负责使用正确的参数调用它,管理旧备份的剔除等。
使用 rsnapshot,您可以通过定义多个时间间隔来指定如何剔除旧备份。最低间隔是进行备份的频率,在您的情况下是每天。较长的间隔定义了保留哪些备份。对于中的每个指令,当您运行 时,rsnapshot 会执行两件事:retain INTERVAL N
rsnapshot.conf
rsnapshot INTERVAL
- 剔除备份目录,以便仅
N
保留 -1 个快照INTERVAL
。 - 对于最低间隔,进行备份;对于其他间隔,复制前一个间隔的当前图像。
例如,要进行每日备份并保留 3 天、5 天和 10 天前的备份,请retain
在您的 中包含以下行/etc/rsnapshot.conf
:
retain daily 2
retain day3 2
retain day5 3
rsnapshot daily
作为日常 cron 作业运行。在该作业前几分钟运行一次rsnapshot day3
,rsnapshot day5
每三天运行一次;你可以这样近似:
04 04 5,10,15,20,25,30 * * rsnapshot day5
07 04 3,6,9,12,15,18,21,24,27,30 * * rsnapshot day3
10 04 * * * rsnapshot daily
(例如,您不能拥有 3 天前的备份,因为您要在第 2 天进行擦除 - 您要做的就是在 3 天内保留一个每日备份。)更经典的保留方案是每周和每月保留,如 rsnapshot 中所示文档。
答案2
经过一个月的互联网研究,我发现了这一点:蝴蝶备份
该实用程序rsync
用于备份、恢复和其他操作(存档、保留、清理等...)
该实用程序有一个目录用于保存各种备份的点,因此可以从特定时间恢复备份。 (与 Windows 上的时间机器或 VSS 类似)。
这是备份的示例:
$> bb backup --computer pc1 --destination /nas/backup_store --data User Config --type Unix
并恢复:
$> bb restore --computer pc1 --catalog /nas/backup_store --backup-id f65e5afe-9734-11e8-b0bb-005056a664e0
看到backup-id
:
$> bb list --catalog /nas/backup_store
BUTTERFLY BACKUP CATALOG
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Timestamp: 2018-08-03 17:50:36
...
和详细信息f65e5afe-9734-11e8-b0bb-005056a664e0
:
$> bb list --catalog /nas/backup_store --backup-id f65e5afe-9734-11e8-b0bb-005056a664e0
Backup id: f65e5afe-9734-11e8-b0bb-005056a664e0
Hostname or ip: pc1
Type: Full
Timestamp: 2022-02-03 17:50:36
Start: 2022-02-03 17:50:36
Finish: 2022-02-03 18:02:32
OS: MacOS
ExitCode: 0
Path: /nas/mybackup/pc1/2022_02_03__17_50
List: etc
home
就是这样!
而且,这个工具备份Unix(Linux、BSD等)、MacOS和Windows(安装了rsync的cygwin)机器。
答案3
我一直在使用 BackupPC 进行备份。这样可以使用tar、SMB、rsync来访问正在备份的文件。就我而言,我在所有系统上使用 rsync(Windows 中的 Cygwin)。
我已经找到了备份,所以第一次恢复后速度很快。增量备份和完整备份可以按不同的计划保留。每个文件版本仅保留一份副本,因此非常节省空间。文件恢复是通过网页完成的,您可以在其中浏览并下载单个文件、创建恢复存档或直接恢复文件。在大多数系统上,我禁用了写访问权限,因此我需要从存档或通过复制单个文件进行恢复。
还有多种其他备份系统使用类似的机制来保留历史备份。