在上一篇 redhat labs之dump备份与restore恢复 了解了dump工具的备份与恢复,本篇继续redhat labs提到的其他备份与恢复工具tar cpio与dd。这些都是常见的工具,用法也比较简单,这里只简单的列下使用方法,不再做详细的介绍,具体可以找台主机测试。

一、tar和cpio备份恢复

常用备份指令

1# tar --exclude=/proc,/mnt,/tmp,/backupdata -cvpjf /backupdata/system.tar.bz2 /
2# tar --exclude=/proc,/mnt,/sys,/backup.tar.gz -cvpzf backup.tar.gz /
3# tar --exclude=/proc,/sys,/dev -cvpzf /dev/st0 /  备份/到一个SCSI设备文件/dev/st0
4# tar -cvpzf backup.tar.gz --exclude={/proc,/mnt,/sys,/backup.tar.gz} /
5# find /boot | cpio -ocvB > /tmp/boot.cpio

常用恢复指令

1# tar -xvpjf /backupdata/system.tar.bz2 /
2# cpio -iduv < /dev/st0     从设备恢复
3# cpio -idvc < /tmp/boot.cpio  从备份文件恢复

tar增量备份

1# tar -jpcv -f /backupdata/home.tar.bz2.00 /home    //全备
2# tar -N '2017-06-02' -jpcv -f /backupdata/home.tar.bz2.01 /home  //找出比指定日期新的文件进行增量打包

这里的-N也可以写为–newer=DATE-OR-FILE, –after-date=DATE-OR-FILE,意思是:only store files newer than DATE-OR-FILE,只备份比指定的日期新的文件。比如全备是6月2号,下次增量就只备份比6月2号新的文件。

所以使用的tar也可以通过crontab定时任备实现一周备份计划,如下:

1# echo '#!/bin/bash' > complete_backup.sh
2# echo 'tar -jpcv -f /backupdata/home.tar.bz2.00 /home' >> complete_backup.sh
3# echo '#!/bin/bash' > incremental_backup.sh
4# echo 'index=$(date +%u)' >> incremental_backup.sh
5# echo 'tar -N $(date +%Y-%m-%d) -jpcv -f /backupdata/home.tar.bz2.$index /home\n' >> incremental_backup.sh
6# chmod a+x complete_backup.sh
7# chmod a+x incremental_backup.sh 

crontab增加任务如下:

1* 0 * * 0   root /path/complete_backup.sh
2* 0 * * 1-6 root /path/incremental_backup.sh

使用如下命令进行恢复

1# for FILE in /backupdata/home.tar.bz2.{0..6}; do [ -f $FILE ] && tar -xjpvf $FILE; done

注:我在使用touch -d 给文件创建一个特定时期并进行tar的这种增量备份时,发现并未达到redhat labs里宣传的效果,每次仍是全量备份。所以对该功能持保留意见,在备份上还是dump、dd、 rsync更专业一些

二、dd备份与恢复

dd备份有两种,一种是直接硬盘对拷,一种是备份成文件(可压缩),具体如下:

1硬盘对拷
2# dd if=/dev/sda of=/dev/sdc
3备份到文件
4# mkdir /mnt/external
5# mount /dev/sdb1 /mnt/external
6# dd if=/dev/sda | gzip -9 > /mnt/external/filename.img.gz

对拷这种恢复的时候,两个磁盘对调下就好了。基于文件的恢复指令如下:

1# zcat /mnt/external/filename.img.gz | dd of=/dev/sda