如何备份完整的Centos服务器?


24

几周前,我从专用服务器切换到了VPS。现在,在VPS上一切正常,我想关闭专用服务器并关闭我在托管公司的帐户。

为了省心和更安全,我想在停止服务器之前对其进行完整备份。

如果发现我需要备份中的内容,最好是可以浏览的备份。

从命令行最好的解决方案是什么?

更新:

媒介:网络

Answers:


28

最好的工具可能是转储,它是标准的Linux工具,可以为您提供整个文件系统。我会做这样的事情:

/sbin/dump -0uan -f - / | gzip -2 | ssh -c blowfish user@backupserver.example.com dd of=/backup/server-full-backup-`date '+%d-%B-%Y'`.dump.gz

这将执行/的文件系统转储(请确保您不需要转储任何其他安装!),使用gzip压缩它,然后将其ssh到远程服务器(backupserver.example.com),将其存储在/ backup / 。如果以后需要浏览备份,请使用restore:

restore -i

另一个选择,如果您无权访问转储,请使用tar并执行类似的操作

tar -zcvpf /backup/full-backup-`date '+%d-%B-%Y'`.tar.gz --directory / --exclude=mnt --exclude=proc --exclude=tmp .

但是tar也无法处理文件系统中的更改。


这个转储命令可以照顾已安装的程序,对吗?像nginx等
。– Thale

转储是文件系统的文字副本,其中包含所有内容。只要您不超过一个(通过运行进行检查mount)就可以了。
比尔·魏斯

我明白了-bash: /sbin/dump: No such file or directory
Lucas Bustamante

@LucasB您可能需要安装转储。在Ubuntu上,您可以执行以下操作sudo apt-get install dump
pehrs

@pehrs如何使用.gz文件还原?您能在回答中补充一下吗?真的有帮助。
红瓶

10

如果要从Linux备份到Linux,我将不使用转储,因为当您需要访问备份文件中的内容时,这样做很不方便。在大多数情况下,仅使用rsyncSSH进行完整的系统备份就可以了:

rsync -aAXv --delete-after --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / user@server:backup-folder

这将保留所有重要内容,让您无需其他步骤即可浏览备份。

--delete如果您多次将rsync的选项运行到同一备份文件夹中,则可能需要添加。在这种情况下,请确保源路径不以结尾/*,否则此选项仅对源目录的子目录内的文件有效,而对直接位于源目录内的文件不起作用。


3

您将在哪种介质上存储备份?如果您要通过网络进行备份,则可以sshfs / nfs将目标安装在源服务器上,并运行以下命令:

tar cvjf /<remote_mnt>/<point>/source-030810-full.tar.bz2 /* --exclude=/proc --exclude=/dev --exclude=/sys --exclude=/tmp --exclude=/<remote_mnt>

请注意,这还没有经过测试,只是我一般的想法,您可能希望排除更多或更少的内容。


3

我从pehrs使用上述命令,但已修改为ftp使用。Crontab示例:

30 3 1 * * sudo /sbin/dump -0uan -f server-full-backup-root-`date '+%d-%B-%Y'`.dump / && gzip -1 /<path_to_backup_file>/server-full-backup-root-`date '+%d-%B-%Y'`.dump
50 * * * * lftp -f upload.x

upload.x包含ftp凭据和上传规则:

open -u user,password -p 21 192.168.1.1
mirror -c -e -R /<path_to_backup_folder> /<path_to_remote_folder_without_trailing_slash>
exit

注意1:当无法重新连接目标时,lftp可能会导致较高的CPU使用率。因为在这种情况下可能会重置许多托管VPS,所以我建议监视CPU负载以杀死lftp进程,以防止主机所有者关闭服务器。进程lftp(和保管箱)的平均负载> 1.33的示例。不幸的是,由于有人,我不记得初始代码的来源:

Crontab */5 * * * * /home/cms/cron/loadmon.sh

#!/bin/bash
FROM_EMAIL_ADDRESS=cms
  trigger=1.33
  load=`cat /proc/loadavg | awk '{print $1}'`
  response=`echo | awk -v T=$trigger -v L=$load 'BEGIN{if ( L > T){ print "greater"}}'`
if [[ $response = "greater" ]]
then
  killall dropbox lftp
  nice -n 19 sh /cms/.dropbox-dist/dropboxd
  sar -q | mailx -s "High load on server - [ $load ]" r***s@gmail.com
fi

注意2:转储实用程序可能无法在OpenVZ VPS或某些其他虚拟服务器上运行。


2

你听说过巴库拉吗?

Bacula是一组开放源代码,可用于企业的计算机程序,可让您(或系统管理员)管理跨各种类型的计算机网络的计算机数据的备份,恢复和验证。Bacula相对易于使用和高效,同时提供许多高级存储管理功能,可轻松查找和恢复丢失或损坏的文件。从技术上讲,它是一个开源的,可用于企业的,基于网络的备份程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.