Answers:
听起来您好像想要Debian的Joey Hess的etckeeper,后者/etc
使用版本控制来管理文件。它支持git,mercurial,darcs和bazaar。
git是etckeeper最佳支持的VCS,并且VCS用户最有可能知道。您的发行版可能已选择修改etckeeper,因此其默认VCS不是git。如果您爱上另一个VCS,则只能将etckeeper与git以外的VCS一起使用。
我不能给您最后的建议,但是我可以分享一些关于该主题的想法。鉴于/ etc通常很小,您可能只需要一个简单的压缩tar-ball解决方案。如果您几乎不需要浏览历史记录,那么它可能是设置起来最简单的解决方案。
对我来说,管理逻辑卷只是为了跟踪/ etc会很乏味,尤其是因为我不认为LVM快照旨在定期创建以作为备份相对少量数据的手段。
在我看来,btrfs似乎要好得多,但是它仍然不如ext {2,3,4}稳定,并且fsck工具也尚未完成。但它不断变得更好。
我个人实际上是使用git来跟踪/ etc,但是您应该记住git不会存储所有权或权限之类的文件元信息!还要检查.git目录是否具有正确的权限。尽管有一些工具可以解决这些问题。您可能想看看etc-keeper,它是专门为跟踪/ etc而开发的,或者至少使用诸如gitperms或metastore之类的东西来跟踪元信息。
您是在寻找配置管理还是跟踪/监视文件系统更改?
如果是早些时候,我会看puppet
或chef
。CFEngine
存在用于商业目的。puppet
是最近流行的野兽。
如果是较新的版本,则很难监视文件系统的更改,但是有一些程序实例,例如 inotify
文件系统审核auditctl
或SGI之fam
但同样,它是监视对象,并且实现起来可能会很昂贵(文件系统性能可能会下降)。
您可以考虑使用git
。您可以高效地跟踪更改,并且非常易于使用。
git status # Show changed files
git diff # Show file differences (paged automatically)
git commit -a # Commit all changes.
我相信初始设置是这样的。我已经有一段时间没有这样做了。
cd /etc
git init
git add *
git commit -a -m "Created repository"
这种方法最适用于单个服务器,但可以与其他更改存储库的工具一起使用。这在您的金丝雀网站上很有用,以确保发生预期的更改。
您也许可以使用克隆来处理多个服务器共有的文件。
我有一个脚本每天运行,并备份自上次备份以来已更改的文件:
#!bin/bash
ext=$(date +"%Y%m%d")_ChangeS
mkdir -p "$1/$ext" && \
ionice -c3 rsync -ah --numeric-ids --inplace --backup \
--backup-dir="$1/$ext" \
--include="/etc" / "$1" && \
rmdir --ignore-fail-on-non-empty "$1/$ext"
您输入将在其中创建备份的路径,并且该目录将具有与此类似的列表(经过几次运行):
20120106_ChangeS etc
$ls 20120106_ChangeS/etc/
cron.d
您可以对其进行一些修改以更频繁地记录更改,或者在发生更改时使用inotify触发脚本的修改版本/etc
。