![如何在 CentOS 5 中创建服务器快照以进行备份?](https://linux22.com/image/1302501/%E5%A6%82%E4%BD%95%E5%9C%A8%20CentOS%205%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BF%AB%E7%85%A7%E4%BB%A5%E8%BF%9B%E8%A1%8C%E5%A4%87%E4%BB%BD%EF%BC%9F.png)
我正在从 VPS 迁移到专用服务器。遗憾的是,大多数专用服务器并不像托管 VPS 那样提供服务器备份,如果出现问题(以前出现过),我真的很喜欢备份所有脚本/文件,这样可以安心。
所以,问题是,是否可以每天创建某些目录的“快照”,这些快照保存在同一台服务器上,但保存在不同的文件夹中。
可以理解的是,这些备份无法防范外部灾难。我更希望能够防范恶意脚本/黑客等造成的损害。
答案1
你可能正在寻找类似 Webmin 的东西:http://webmin.com/
这是我的 CentOS 服务器设置的必需部分。它非常容易安装,并且使服务器管理变得轻而易举,尤其是备份内容。请查看此处的文档:http://doxfer.webmin.com/Webmin/FilesystemBackup
答案2
是否可以每天创建某些目录的“快照”,这些目录保存在同一台服务器上,但在不同的文件夹中......以防止恶意脚本/黑客等造成的任何损害。
是的,任何一个许多版本控制软件工具就可以达到这个效果。
我使用 Mercurial(“hg”),通常与漂亮的 gui TortoiseHg 前端一起使用。
在我的许多服务器上,都有一个文件夹(*),可能是“/var/www/”,其中包含我想要备份的所有内容 - 设置文件、模板、自定义服务器端 cgi-bin 脚本、自定义浏览器端 .js 脚本、.html 内容等。(机器上的所有其他内容都是样板操作系统和应用程序。如果这些东西被损坏,我可能会擦除它并安装它的最新版本,而不是尝试恢复到我正在使用的旧的、过时的版本)。
我第一次设置时,我会进入该文件夹并进行一次性设置
hg init
hg add
hg commit -u dc -m "initial setup"
“init”行创建一个“.hg/”文件夹,将来会用来存储压缩快照。(因此有一个流行的 Mercurial 教程叫这个名字,http://hginit.com/)“add”行和“commit”行默认扫描该文件夹下的每个文件(无论其在子文件夹中嵌套的深度如何),并将(压缩的)副本放入该“.hg/”文件夹中。
当我怀疑工作文件损坏或其他更改时(假设包含所有快照的“.hg”文件夹未损坏),我输入
hg status
它告诉我哪些文件发生了变化,无论它们在子文件夹中嵌套有多深,然后我输入
hg diff
它准确地告诉我每个文件发生了什么变化。
如果我不喜欢我所看到的内容——这是恶意的修改,或者更常见的是,这是我自己现在后悔做的愚蠢的编辑,我会输入
hg revert --all
将所有更改恢复为最近的提交。
如果我做就像我看到的那样——我做了一些调整,让它变得更好——我输入了类似
hg add
hg commit -u dc -m "tweaked .htaccess so we now have Clean URLs."
并附上一条评论,希望它能描述我为什么做出这些改变。(有几种方法可以恢复一些文件,并仅提交一些文件,甚至只提交一些对单个文件所做的许多更改 - 有关详细信息,请参阅文档)。
也许你更愿意有一个 cron 任务每天执行类似这样的操作
hg add
hg commit -u mr_backup -m "cron automated snapshot of the server."
已提交的每个版本的压缩快照都保留在“.hg/”文件夹中。有一个“hg update”命令可以恢复到任何已提交的版本。有一个“hg diff -r 1:2”命令可以准确查看第一次提交和第二次提交之间发生了哪些变化。
更复杂的情况
(*)通常我只想备份一个文件夹(“/var/www/”)。但是,有时我遇到更复杂的情况——我想要备份的文件分散在一堆不同的文件夹中,它们之间唯一的公共文件夹是根文件夹“/”,并且我不想将“.hg/”存储库放在根文件夹“/.hg/”中。
可能有更好的方法来处理它,但我现在正在做的是:
- 我创建了一个名为“MrBackup”的特殊用户,该用户对我想要备份的所有文件具有只读权限。
- 我进行了设置,以便我想要备份的每个文件夹都显示为 /home/mr_backup 的子文件夹。我目前有以下随机组合:
- 一些文件实际上位于 MrBackup 的主文件夹中,然后它们“需要”的其他地方有一个指向它们的软链接。
- 一些文件在两个地方都有指向它们的硬链接——它们“需要”在的地方,以及 MrBackup 主文件夹中的某个地方。
- cron 脚本定期将一些文件从“实时”位置复制到 MrBackup 主文件夹中的备份文件夹中,或许将另一台服务器的 SQL 数据库转储到 MrBackup 主文件夹中的转储文件中,并且备份 cron 脚本本身(“crontab -l > /home/mr_backup/backup/crontab.txt”)。
- 我经常想备份某个文件夹 P 中的几乎所有内容,除了“cache/”子文件夹,我不需要备份,因为如果需要,它将自动重新生成。我使用“.hgignore”来排除缓存子文件夹。
- 然后我使用 Mercurial,如上所述。
- 当 cron 脚本生成的文件看起来不正确时,在我进行恢复后,我需要采取一些额外步骤以某种方式将“好版本”推回“实时”位置。
附言:在与我的服务器位于不同城市的机器上,我偶尔会启动 TortoiseHg 工作台并单击后台运行的小按钮
hg pull
(并向我询问 Mr Backup 的密码)以获取已提交到存储库的所有内容的异地备份。
与其在生产服务器上实时编辑,通常更好的方法是在其他机器上进行编辑,然后提交它们,
hg push
将它们复制到生产服务器。
“.hg/”文件夹不断增大——非常缓慢,因为它只保存改变从一次提交到下一次提交,甚至那些相对较小的变更集在存储之前也会被压缩。
可能有更好的方法来应对这种缓慢的增长,但我目前所做的是:
在我“hg commit”当前版本,然后“hg pull”到我的异地备份机器上之后,每年我都会删除服务器的“.hg/”文件夹,并使用“hg init”创建一个新的、空的“.hg/”文件夹,然后提交当前版本。(2014 年异地备份存储库的最后一个版本应该与2015年异地备份存储库第一版相同)。