Linux – 备份服务器时应排除哪些目录?

我正在备份一台Linux服务器并将其存储在另一台服务器上。 我从一个简单的开始

rsync -aPh --del server.example.com:/ /mnt/backup 

然后有人指出我不应该备份/proc ,因为你不想在另一个服务器上恢复/proc

还有什么我应该/不应该包括的? 那么/sys呢?

这真的取决于你将如何恢复你的系统。 如果你将重build,那么你只需要你的服务的configuration/数据文件(例如:/ etc,/ opt,/ var,/ home)

如果您正在完全恢复系统,那么您可以省略/ proc,/ boot&/ dev。 然后,您可以从引导介质安装最低的操作系统,然后通过备份恢复系统。

当然,最好的备份是经过testingvalidation的备份。

因此,省略你认为不需要的东西,尝试在虚拟机中恢复,并validation你可以使用这些数据取回你的系统。

/proc/sys都是反映系统状态的虚拟文件系统,允许您更改多个运行时参数(有时会做更危险的事情,如直接写入内存或设备)。 你不应该备份或恢复它们。

在大多数现代发行版中, /dev是在启动时dynamic创build的(它是由udev和朋友填充的内存文件系统)。 没有必要支持它,试图恢复它是徒劳的。 但是,如果您的分发configuration为使用静态/dev ,则不适用(如果/devtmpfs ,则它是内存文件系统,则检查/proc/mounts )。

还有其他的文件系统,你不应该备份; usbfs (通常位于/proc/bus/usb ,如果安装的话), debugfs (假如是挂载在/sys/kernel/debug ,但是有些人把它放在别的地方;你可能没有这个) , devpts (挂载在/dev/pts ),其他tmpfs实例(通常在/dev/shm/var/run/var/lock和其他地方find;备份并恢复它们应该是无害的,他们的内容在关机时丢失),任何远程文件系统或魔法自动挂载机目录(尝试备份或恢复它们都可能最终导致灾难,因为最终可能会备份/还原到另一台机器 )。 你也应该小心使用/media/mnt ,因为可以在那里find外部设备(比如你在驱动器中忘记的CD),但是你也可能有意使用它们来安装应该备份的东西。

请注意,除了大多数无害的tmpfs实例,networking文件系统/自动挂载程序和可移动介质以外,不应备份的文件系统都是/dev/proc/sys后代。 如果您没有networking文件系统(或自动安装程序),并且没有可移动介质(不包括/sys/proc并且在还原(重新启动tmpfs实例)后重新启动应该足够了。

参见备份之道 ,第1章。

/ proc和/ sys中的一些特殊文件混淆了rsync。 通常,您不想备份安装的networking文件系统。 稀疏文件也可能导致问题。

添加-x将其限制为一个文件系统。 这样可以避免所有的networking文件系统和/ proc等等。但是,您需要为每个已安装的文件系统运行一个rsync。

添加-S以合理处理稀疏文件。

您可以使用sfdisk和dd来实现完整备份。 要备份每个硬盘的分区scheme,你可以使用sfdisk,像这样:

 sfdisk -d /dev/sda > parttable_sda.part 

要备份每个分区,您可以使用dd,如下所示:

 dd if=/dev/sda1 of=devsda1.img 

(请记住,你需要有足够的空间来编写这个文件,所以你可能想把它写到外部媒体上)每个分区一次一个,然后把所有的东西都备份起来。

然后,在另一台计算机上执行恢复操作:

 sfdisk /dev/sda < parttable_sda.part dd if=devsda1.img of=/dev/sda1 # do this for each partition 

/ boot,/ dev和/ proc是无用的备份 – 但是,如果你知道你在做什么,你可以备份/启动。

我也不会备份/ lib,/ media,/ mnt,/ sbin,/ bin,/ srv,/ sys或/ tmp。

/ usr是可选的,这取决于你是否有任何/ usr值得备份。 如果我是你我最担心的是备份用户的$ HOMEs,/ var和/ etc(用于configuration文件)。

再说一次,这完全取决于你想要做的备份types 。 这是一个Web服务器? 这是一台个人电脑吗? 这是一个shell目录/ home下的大量目录吗?

基本上,不需要备份伪文件系统(/ proc,/ sys,/ dev / shm …)。

而不是排除,我通常只备份我想要的。 包括: /home /etc /var/var/log除外)

正如这个伟大的社区所指出的:

/ dev / proc / sys / tmp / run / media / lost + found / boot(/ boot是可选的,请参阅其他注释)

为了参考我的最后一个rsync命令(在安装有'/ run / media / fred / INTENSO /'的外部媒体的Arch下并备份到一个名为'fred'的文件夹)是:

$ sudo rsync -Pazhmxv –exclude / run / media –exclude / dev –exclude / lost + found –exclude / tmp –exclude / proc –exclude / boot –exclude / sys / / run / media /弗雷德/ INTENSO /弗雷德/。

(排除的文件也可以使用大括号(–exclude = {/ dev,/ proc})在Bash或文本文件(–exclude-from ='excude.txt'))中指定。

-P:显示进度-a:归档模式-z:在传送过程中压缩-h:以可读格式输出数字-m:删除空目录-x:限制为一个文件系统-v:详细

我通常养成一个系统备份的习惯,即使我知道的东西是无用的备份。 设置起来更简单,你可以100%确定你将获得备份中包含的所有东西。

我正在使用Ubuntu Linux盒子作为网站开发的testing服务器,以及托pipe文档wiki。 每天晚上,crontab将MySQL数据库转储到/ var / www中,然后所有的/ var / www被压缩并复制到备份服务器。 这并不理想,但这已经足够了。 我不得不一次重build服务器,而我真正错过的是Apache和Sambaconfiguration文件。

我假设你在虚拟机上没有Linux。 如果可能的话,我会敦促考虑转向虚拟化。 在虚拟机级别备份是一个全新的一致性和易用性的水平。 有免费的虚拟化工具,所以你不一定要投资到VmWare或其他昂贵的怪物工具。