首先,您应该对rsync的include / exclude语法有所了解。我觉得使用**
glob比*
glob 更好地完成您想做的事情。(**
膨胀到任意数量的条目,而*
膨胀仅单个条目可能匹配多个目录条目。细节在man rsync
下包含/排除模式规则。)
就是说,如果您希望能够以最小的麻烦从备份中将系统还原到已知的工作状态,则应谨慎选择排除文件或目录。我自己使用rsnapshot,实际上采取了相反的方法:包括所有内容,除了一些精心选择的目录。
所以我的rsnapshot.conf实际上声明了(带有使rsnapshot的配置文件解析器满意的选项卡):
interval backup NNN # pick your poison
one_fs 0
exclude /backup/**
exclude /dev/**
exclude /proc/**
exclude /run/**
exclude /sys/**
exclude /tmp/**
backup / ./
很少。是的,这意味着我可能会复制超出严格要求的内容,但是它可以确保复制所有非预期的内容。由于rsnapshot使用rsync的硬链接到重复数据删除行为,因此,唯一的实际成本是在第一次运行期间。之后,假设您拥有一个合理大小(与总数据集大小相比)的备份目标位置,那么在时间或磁盘空间上的花费就很少。我排除了/ backup的内容,因为这是我装载备份目标文件系统的地方。不排除它会导致将备份复制到自身中的情况。但是,为了简化起见,如果我需要恢复到裸机上,我想保留安装点!
就我而言,我也无法合理使用one_fs 1
; 我在当前约40个文件系统上运行ZFS。明确列出所有这些内容将是维护的噩梦,并使使用ZFS文件系统的工作比需要的要复杂得多。
无论如何,除了上述内容之外,您几乎要排除的所有内容都将取决于分布,因此,几乎不可能给出一个通用的答案。也就是说,您可能会在/ var下找到一些候选对象。
exclude /somepath/*
在这种情况下是完全可以的;/somepath/
正如预期的那样,它排除了中的所有内容。您不需要,**
因为/somepath/
已经排除了其中的所有内容,因此无需深入了解。