Linux系统备份与还原

本文主要介绍centos系统的备份和还原。

我们在使用Windows时,可以使用ghost工具对系统进行备份,那么Linux系统是如何备份的呢

1. 备份系统

在linux系统中,有一句话叫做一切都是文件,既然是文件,我们就可以通过打包的方式来备份。

使用root身份登录系统,进行打包操作。

1
2
3
4
5
6
7
8
# tar cvpzf /backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude=/mnt –exclude=/sys –exclude=/sys  /
参数说明:
c 按照man手册,直译创建一个新的存档,意思是打包文件backup.tgz不存在,需要创建
v 显示打包过程和细节
p 保留文件的权限
z gzip格式压缩,和windows上的rar格式或zip格式差不多
f 文件,cf一起的意思是创建文件
exclude 是排除那些文件不打包进去

上面的命令将/下的所有东西打成一个包,有些系统上动态的文件可以不用打包,排除出去,比如:/proc,/sys。也可以把不用备份的文件排除出去。

2. 系统还原

在进行恢复系统的操作时一定要小心!如果你不清楚自己在做什么,那么你有可能把重要的数据弄丢,请务必小心!

切换到root用户,并把文件“backup.tgz”拷贝到分区的根目录下。

1
# tar xvpfz /backup.tgz -C /

恢复命令结束时,你的工作还没完成,别忘了重新创建那些在备份时被排除在外的目录:

1
2
3
4
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys

保险起见,最好是执行一下如下命令:

1
# restorecon -Rv /

restorecon命令是用来恢复文件的SELinux配置信息的。

最后重启服务器,重新启动时观察一下,有没有服务没有起来。

3. 还原到其他的Linux中

有时候会出现这种情况,备份的Linux系统已经损坏,比如硬盘坏了,上面的备份文件还有,那么是否可以恢复呢,答案是肯定的。

重新准备一台服务器,最好是分区、系统版本和损坏的服务器是一致的,安装好相同版本的Linux系统。将备份文件backup.tgz拷贝到新的服务器中。

1
2
# mkdir /mnt/backup/
# awk 'BEGIN { cmd="cp -ari /mnt/backup/* /"; print "n" |cmd; }'

上面的命令是”cp -ari /mnt/backup/* /“,意思是拷贝所有的备份文件,将/下的目录进行覆盖。print “n”的意思是同名文件不覆盖。这样做就是将老系统中的文件复制到新系统,不覆盖已经存在的文件。

那么为什么不能覆盖呢?每个Linux系统中有一些唯一的信息不能覆盖,否则系统会坏掉。比如:

1
2
3
4
5
6
7
# blkid
/dev/sda5: UUID="5d938847-6503-40cf-845d-a85777d4d1e1" TYPE="ext4"
/dev/sda1: UUID="86215e74-789c-4a32-ad2a-7d2a1a06a587" TYPE="ext4"
/dev/sda2: UUID="1031afbe-2bf8-474c-9d3f-93a77d5751df" TYPE="ext4"
/dev/sda3: UUID="83898300-4d9d-41de-951a-62896cde5025" TYPE="ext4"
/dev/sda6: UUID="381b6c24-de6a-4d01-8382-9b3bb3a9ecc3" TYPE="ext4"
/dev/sda7: UUID="c0793320-2302-4018-8482-130fbc4dca06" TYPE="swap"

每个系统的分区都有一个UUID,这个是唯一的,覆盖之后就会出问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# cat /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Dec 22 15:16:37 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=5d938847-6503-40cf-845d-a85777d4d1e1 / ext4 defaults 1 1
UUID=1031afbe-2bf8-474c-9d3f-93a77d5751df /appslog ext4 defaults 1 2
UUID=86215e74-789c-4a32-ad2a-7d2a1a06a587 /boot ext4 defaults 1 2
UUID=83898300-4d9d-41de-951a-62896cde5025 /opt ext4 defaults 1 2
UUID=381b6c24-de6a-4d01-8382-9b3bb3a9ecc3 /usr ext4 defaults 1 2
UUID=c0793320-2302-4018-8482-130fbc4dca06 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0

系统中的fstab中用到了UUID,覆盖了文件会导致系统启动不了。

然后执行:

1
# restorecon -Rv /

这一步是必须的,否则重启系统会报错。

最后就是观察重启系统时,是否有服务没启动,需要手动将其启动。

---------------- The End ----------------