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


37

我正在备份Linux服务器并将其存储在另一台服务器上。

我从一个简单的开始

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

然后有人指出,我不应该备份/proc,因为您不想将/proc一台服务器的服务器还原到另一台服务器。

还有其他我不应该/不应该包括的东西吗?

例如,怎么样/sys

Answers:


24

这实际上取决于您如何还原系统。如果要重建,则只需要服务的配置/数据文件(例如:/ etc,/ opt,/ var,/ home)

如果要进行完整的系统还原,则可以省略/ proc,/ boot和/ dev。然后,您可以从启动媒体安装最低操作系统,然后通过备份还原系统。

当然,最好的备份是经过测试验证的备份。

因此,请忽略您不需要的内容,尝试在VM中还原并确认您可以使用此数据恢复系统。


5
不要完全省略/boot-您可能需要将旧的引导配置与新的引导配置进行比较。只要确保不要手动还原即可 /boot
奎克吉x德09年

5
并同时排除/ sys ...并恢复为裸机,最好也排除/etc/udev/rules.d/。
wazoox

2
也丢失了+找到了哪个文件系统,/ mnt和/ media不会复制任何已安装的设备
刀片

29

这两个/proc/sys是反映系统的状态,并允许您更改一些运行时参数(有时做更危险的事情,比如直接写入存储器或设备)的虚拟文件系统。您永远不应备份或还原它们。

在大多数现代发行版中,/dev它是在启动时动态创建的(它是由udevand friends 填充的内存文件系统)。备份它毫无意义,尝试还原它是徒劳的。但是,如果您的发行版配置为使用static /dev,则此方法不适用(检查/proc/mounts,如果/devtmpfs,则为内存文件系统)。

还有其他文件系统不应该备份;usbfs(通常/proc/bus/usb,如果安装的话), debugfs(应该是在/sys/kernel/debug如果安装在所有的,但有些人把它放在别的地方,你可能没有这一项), devpts(安装在/dev/pts),其他tmpfs情况下(通常存在于/dev/shm/var/run/var/lock以及其他位置;备份和还原它们应该是无害的,但毫无意义,因为它们的内容在关闭时会丢失),任何远程文件系统或魔术自动挂载器目录(尝试备份或还原它们都可能会导致灾难,您可以这样做)最终将备份/还原到另一台机器上)。您还应该注意/media/mnt,因为可以在此处找到外部设备(例如您在驱动器中忘记的CD),但是您也可能故意使用它们来安装应备份的内容。

需要注意的是,不是大多无害的其他tmpfs情况下,网络文件系统/ automounters和可移动介质,你不应该备份是所有后代文件系统/dev/proc/sys。如果您有任何网络文件系统(或automounters),并没有可移动媒体,排除/sys/proc并重启后恢复(擦拭tmpfs实例)就足够了。



8

/ proc和/ sys中的某些特殊文件使rsync混淆。通常,您也不想备份已安装的网络文件系统。稀疏文件也会引起问题。

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

添加-S可以明智地处理稀疏文件。


4

/ boot,/ dev和/ proc对备份非常无用-但是,如果您知道自己在做什么,则可以备份/ boot。

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

/ usr是可选的,具体取决于/ usr中是否有值得备份的内容。如果您是我,则最担心备份用户的$ HOMEs,/ var和/ etc(用于配置文件)。

同样,这实际上取决于您要执行的备份类型。这是网络服务器吗?这是个人电脑吗?这是在/ home下具有大量目录的Shell服务器吗?


我想利用克隆备份到一台新机器恢复
罗里

“克隆”是什么意思?您总是可以只使用dd和sfdisk备份原始分区sfdisk -d> partition_table.part dd if = / dev / sda1 of = dev.sda1.img(对每个分区执行此操作),然后在新系统上:sfdisk / dev / sda <partition_table.part dd if = dev.sda1.img of = / dev / sda1(对于每个分区,再次)
Michael Pobega,2009年

由于注释系统不喜欢代码标签,因此我发布了另一个答案。
Michael Pobega,09年

@MichaelPobega如果您要备份原始分区,则必须复制整个磁盘大小。如果仅使用了80BG的磁盘,为什么还要复制512GB?随着rsync你不仅只复制你已经使用的,但也使未来的同步,这样你就可以放心地为它运行一个cron作业。
最多

回到今年以后,我十年的经验告诉我,您是正确的@Max。
Michael Pobega

3

您可以使用sfdisk和dd实现完全备份。


要备份每个硬盘的分区方案,可以使用sfdisk,如下所示:

sfdisk -d /dev/sda  > parttable_sda.part

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

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

/dev/sda1被卸载,如用活光盘启动。

(请记住,您将需要大量可用空间来写入此文件;因此,您可能希望将其写入外部媒体)对每个分区一次执行一次,然后备份所有内容。


然后,要在另一台计算机上还原,可以执行以下操作:

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

3
警告:仅当分区已卸载或只读安装时,才执行此操作。在写入分区时将其原始内容转储会导致备份上的文件系统严重不一致(因为文件系统开头附近的块比结尾附近的块“更早”地复制,并且文件系统算法不会可以预期;如果可以以某种方式对文件系统进行原子快照,则可以避免此问题。fsck将无济于事,因为它的算法还取决于文件系统写入磁盘的顺序。
CesarB

dd是要走的路。当然,在LiveCD上启动。dd if=/dev/urandom of=/dev/sdb bs=512 count=12擦除目标驱动器的MBR和分区表很重要。
SDsolar

2

我通常不备份而不是排除自己想要的东西。包括:(/home /etc /var除外/var/log


1

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


1

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

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

作为参考,我的最终rsync命令(在Arch中,外部媒体安装在“ / run / media / fred / INTENSO /”中,并备份到名为“ fred”的文件夹中)是:

$ sudo rsync -Pazhmxv-排除/ run / media-排除/ dev-排除/ lost + found-排除/ tmp-排除/ proc-排除/ boot-排除/ sys / / run / media / fred / INTENSO / fred /。

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

-P:显示进度-a:存档模式-z:在传输期间压缩-h:以人类可读格式输出数字-m:修剪空目录-x:限制为一个文件系统-v:详细


1

我在Ubuntu 18.04机器上,但排除了以下这些因素:

/dev/
/proc/
/sys/
/tmp/
/run/
/mnt/
/media/
/lost+found/
/cdrom/
/swapfile

另外,特别是对于我的设置,我不包括以下内容:

/home            <-- Backed up separately
/backup          <-- Mount point for backup disks
/data            <-- Mount point for data disks, which are backed up off-site
/scratch         <-- Mount point for volatile fast SSD scratch disk

0

我通常养成备份系统上所有内容的习惯,即使我肯定知道的东西也无济于事。设置更简单,您可以100%确保将所需的一切都包含在备份中。


1
是的,但是后续的问题是,您是否需要从备份中删除哪些内容?
罗里

我要回应的是:“没有”。
Maximus Minimus

真正。您将其从还原过程中排除,而不是备份本身。但是您可能仍然希望放弃/proc/dev以免与贫穷的小孩子混淆rsync
TJ Crowder

1
@mh,您将还原/ proc / kcore,这是原始服务器的内存吗?听起来有点傻...
罗里

0

我使用Ubuntu Linux盒子作为网站开发和托管文档Wiki的测试服务器。每天晚上,crontab会将MySQL数据库转储到/ var / www中,然后将所有/ var / www压缩并复制到备份服务器中。这不是理想的,但足够了。我不得不一次重建服务器,而我真正想念的只是Apache和Samba配置文件。


0

我假设您在虚拟机上没有Linux。如果有可能,我敦促考虑迁移到虚拟化。虚拟机级别的备份是一致性和易用性的全新提升。有免费的虚拟化工具,因此您不必一定要投资VmWare或其他昂贵的怪兽工具。


0

问题:备份服务器时应排除哪些目录?

这是我经常使用的脚本,从Ubuntu 16.04 LTS笔记本电脑到Ubuntu 16.04 LTS服务器。它清楚地显示了进行完全备份时应跳过哪些目录:

echo "EMPTYING TRASH"
rm -rf ~/.local/share/Trash/* >/dev/null 2>&1
echo "DELETING OLD LOGS"
sudo rm -f /var/tmp/* >/dev/null 2>&1
sudo rm -f /var/log/*.gz >/dev/null 2>&1
sudo rm -f /var/log/kern* >/dev/null 2>&1
sudo rm -f /var/log/messages* >/dev/null 2>&1
echo "DELETING CHROMIUM CACHE"
rm -rf /home/pi/.cache/chromium/Default/Cache/* >/dev/null 2>&1
echo "====================================================================="
echo "      BEGINNING RSYNC from PAV root to PRIME5:/mnt/full/pav"
echo "====================================================================="
time sudo rsync -aAXv \
          / \
          --bwlimit=500 \
          --delete \
          --delete-excluded \
          --ignore-errors \
          --exclude="/dev/*" \
          --exclude="/proc/*" \
          --exclude="/sys/*" \
          --exclude="/tmp/*" \
          --exclude="/run/*" \
          --exclude="/mnt/*" \
          --exclude="/media/*" \
          --exclude="/lost+found" \
          abc@prime5:/mnt/full/pav
echo "====================================================================="
df -h

请注意-的排除情况/mnt,即每个Ubuntu系统都安装了一个全时备份驱动器,用于rsync每天进行4次基于cron的自我备份。这些驱动器通过条目安装,fstab并且始终存在。将它们包括在另一个系统的备份中将是重复的。

同样,/media也就是安装USB驱动器的位置。它们分别备份。

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.