跳到主要内容

28、Linux 教程:备份

备份

CentOS7以前的备份dump和restore

要把重要文件备份,如/root/目录、/home/目录、/var/spool/mail/目录、/etc/目录、其他目录(如日志目录),对于特别重要的数据,还需要异地备份。

常用服务也有一些需要备份的文件,如日志文件、数据文件、配置文件等。

备份有几种:

1、 完全备份,也就是需要的数据整体备份;

2、 增量备份,先进行一个完全备份,然后将新产生的数据依次备份,如第4天将新产生的数据备份,第5天将新产生的数据备份;

3、 差异备份,先进行一个完全备份,然后将总体差异的数据依次备份,如第4天将数据与备份数据对比,将差异数据备份,第5天将数据与备份数据对比,将差异数据备份它不一定优于增量备份;

备份可以用dump命令,但是这个命令默认是没有安装的。

执行模式:dump [选项] 备份之后的文件名 原文件或目录

-数字: 就是我们说的0-9十个备份级别,0代表完全备份,1代表增量备份。
-f文件名: 指定备份之后的文件名
-u: 备份成功之后,把备份时间记录在/etc/dumpdates文件
-v: 显示备份过程中更多的输出信息
-j: 调用bzlib库压缩备份文件,其实就是把备份文件压缩 为.bz2格式,默认压缩等级是2
-W: 显示允许被dump的分区的备份等级及备份时间

注意dump命令只有备份分区时可以采用增量备份,备份目录时只能采用完全备份。

对分区备份:dump -0uj -f /root/boot.bak.bz2 /boot/

再执行增量备份:dump -1uj -f /root/boot.bak1.bz2 /boot/

恢复备份可以用restore命令:restore [模式选项] [选项]

restore命令常用的模式有以下四种,这四个模式不能混用:
-C:比较备份数据和实际数据的变化
-i: 进入交互模式,手工选择需要恢复的文件。
-t: 查看模式,用于查看备份文件中拥有哪些数据。
-r: 还原模式,用于数据还原。
选项有:
-f: 指定备份文件的文件名

比较备份与实际的区别时要指定备份文件名,根据error数来判断。

增量备份恢复时要根据多个备份文件名恢复多次。恢复时最好新建目录然后进入,这样恢复的文件都在该目录下。

XFS文件系统备份命令xfsdump

xfsdump命令可以进行文件系统的完整备份(full backup),还可以进行累积备份(incremental backup),在使用该命令备份文件系统时要注意,该命令只能root执行,且只能备份已挂载的文件系统,且必须是XFS文件系统。

将/boot挂载点处的文件系统备份到/srv/boot.dump:

xfsdump -l 0 -L boot_all -M boot_all -f /srv/boot.dump /boot

其中-l后数字是指定等级,0代表完整备份;-L后跟该文件系统的简单说明;-M后填写媒体的简单说明;-f后接备份产生的备份文件名。

查看备份文件系统的信息:xfsdump -I,如果之前用过xfsdump会产生备份文件系统的信息,其中有个关键信息是备份资料的level,如果是完整备份则level为0。

如果经过一段时间后/boot文件系统发生了改变,此时就可以进行差异备份:

xfsdump -l 1 -L boot_2 -M boot_2 -f /srv/boot.dump1 /boot

注意生成的备份文件名要改变。

XFS文件系统还原命令xfsrestore

查看备份文件资料:xfsrestore -I,该命令可以找出所有用xfsdump备份的数据,这个命令的作用和xfsdump -I相同。

要复原文件系统首先要指定该文件,要用上述命令查看文件的session label name,如果要复原/boot文件系统,备份文件名是/srv/boot.dump,session label name是boot_all,那么还原命令就是:

xfsrestore -f /srv/boot.dump -L boot_all /boot

如果boot文件下还有别的文件,此时复员后同名的文件会被覆盖,其他的文件会被保留,如果想解压出来完全是该文件系统,那么就直接指定一个新目录即可。

如果要复原累积备份的资料,那么就在level0还原的基础上再还原level1:

xfsrestore -f /srv/boot.dump1 /root

用该命令还可以仅还原部分文件,如果备份文件是/srv/boot.dump,预计还原到/tmp/root3中,那么就可以执行命令:xfsrestore -f /srv/boot.dump -i /tmp/root3,在该命令状态下执行ls命令查看可以复原哪些文件,这些文件都是备份文件中的,然后使用add 文件名来一个个还原即可。

备份命令dd

之前用过dd命令来生成大文件:dd if=/dev/zero of=/sev/loopdev bs=1M count=512

if是输入文件,意思是一个一直输出0的装置;of是输出文件,也就是即将生成的大文件路径;bs是block的大小;count是block的数量。

执行完毕后就生成了一个512M的大文件。

将一个文件备份到另一个位置:dd if=要备份的文件 of=新文件位置,这类似于cp。

dd命令来备份是一个一个扇区去读写的,它会将没有用到的扇区也备份,故新备份文件和原来占用的磁盘空间完全相同,它不会因为文件系统的差异出现不同的响应,因此这个if和of可以跟文件系统,也可以跟设备名等等,这个命令也可以用来创造一个完全相同的磁盘分区,无需格式化,因为扇区内的MBR等都会被完整的复制。

备份命令cpio

cpio可以备份任何内容,包括装置设备文件,但是它必须配合find等命令来找到文件,将/boot下所有文件备份到/tmp/boot.cpio:

find boot | cpio -ocvB > /tmp/boot.cpio,这里一般要进入根目录,然后指定boot文件时用相对路径,这样在以后还原时就不会覆盖boot中的内容了。

还原:cpio -idvc < /tmp/boot.cpio