?Linux 系统上有很多安全的防范策略(例如用户管理、权限管理等),但安全永远是相对的,而不是绝对的。系统硬件的损坏,黑客的无孔不入,都是系统安全的大敌。在这种情况下,如果我们要保证系统安全和应用安全,备份是必不可少的一个步骤。
LINUX中常需要备份的文件有:
重要服务的配置文件
系统和程序保留的日志
用户重要的应用程序数据
必要时,备份整个操作系统
常用的备份策略有完全备份和增量备份,而增量备份有可细分为累计增量备份和差异增量备份。
完全备份:完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录
增量备份:每次备份都跟上一次备份相比较;
差异备份:每次备份都跟初始的完全备份来比较,只备份新增数据
备份工具Tar是以前备份文件的可靠方法,几乎可以工作于任何环境中,Linux老用户一般都信赖它。 Linux中以.tar结尾的文件都是用tar创建的。它的使用超出了单纯的备份,可用来把许多不同文件放到一起组成一个易于分开的文件。tar是从Tape ARchiver备份工具起步的。包含在Linux中的GNU tar工具简便易用,包含了一个用来压缩的选项,且支持不断增加的备份。
$tar -cvf /tmp/backup.tar /home
在/tmp目录中创建一个backup.tar的文件,/home目录中所有内容都包含在其中。
? 00 02 * * * tar -cvf /tmp/backup.tar /home
结合crontab的使用,可实现每天定时的备份作业任务。
dump 命令使用“备份级别”来实现增量备份,它支持 0~9 共 10 个备份级别。其中,0 级别指的就是完全备份,1~9 级别都是增量备份级别。
当我们备份一份数据时,第一次备份应该使用 0 级别,会把所有数据完全备份一次;第二次备份就可以使用 1 级别了,它会和 0 级别进行比较,把 0 级别备份之后变化的数据进行备份;第三次备份使用 ?2 级别,2 级别会和 1 级别进行比较,把 1 级别备份之后变化的数据进行备份,以此类推。
dump 命令的基本格式如下:dump [选项] 备份之后的文件名 原文件或目录
选项:
-level:就是我们说的 0~9 共 10 个备份级别;
-f ?文件名:指定备份之后的文件名;
-u:备份成功之后,把备份时间、备份级别以及实施备份的文件系统等信息,都记录在 /etc/dumpdates 文件中;
-v:显示备份过程中更多的输出信息;
-j:调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,默认压缩等级是 2;
-W:显示允许被 dump 的分区的备份等级及备份时间;
示例:
1、备份分区
[rootSlocalhost ~]# dump -0uj -f /root/boot.bak.bz2 /boot/
#备份命令。先执行一次完全备份,并压缩和更新备份时间
如果 /boot 分区的内容发生了变化,则可以使用 1 级别进行增量备份。当然,如果数据会继续发生变化,则可以继续使用 2~9 级别增量备份。命令如下:
dump -1uj -f /root/boot.bak1.bz2 /boot/
2、备份文件或目录
dump 命令也可以文件或目录,不过,只要不是备份分区,就只能使用 0 级别进行完全备份,而不再支持增量备份。
[root@localhost ~]# dump -0j -f /root/etc.dump.bz2 /etc/
#完全备份/etc/目录
restore命令恢复数据:
restore 命令是 dump 命令的配套命令,dump 命令是用来备份分区和数据的,而 restore 命令是用来恢复数据的。
命令的基本格式如下:
[root@localhost ~]# restore [模式选项] [-f]
此命令中,
-f 选项用于指定备份文件的文件名;restore 命令常用的模式有以下 4 种,这 4 种模式不能混用:
-C:比较备份数据和实际数据的变化。如果实际数据中的现有数据发生了变化,那么这个选项能够检测到这个变化。但是如果实际数据中新增了数据,那么这个选项是不能检测到变化的。举个例子:别人给我了 100 万元投资(实际数据),但是他有一个投资的账本(备份数据),他要时不时地比对账本和实际的 100 万元投资,如果 100 万元减少则马上就能发现改变;但是如果投资增加,则不会报警;
-i:进入交互模式,手工选择需要恢复的文件;
-t:查看模式,用于查看备份文件中拥有哪些数据;
-r:还原模式,用于数据还原;
?
dd 命令主要用来进行数据备份,并且可以在备份的过程中进行格式转换。其实 dd 命令可以把源数据复制成目标数据,而且不管源数据是文件、分区、磁盘还是光盘,都可以进行数据备份。
dd 命令的基本格式如下:
[root@localhost ~]# dd if="输入文件" of="输出文件" bs="数据块" count="数量"
主要参数:
if:定义输入数据的文件,也可以是输入设备;
of:定义输出数据的文件,也可以是输出设备;
bs:指定数据块的大小,也就是定义一次性读取或写入多少字节。模式数据块大小是 512 字节;
count:指定 bs 的数量;
示例:
备份文件:dd if=/etc/httpd/conf/httpd.conf of=/tmp/httpd.bak
备份分区:dd if=/dev/sda1 of=/tmp/boot.bak
整盘备份:dd if=/dev/sda of=/dev/sdb
rsync 可以理解为 remote sync(远程同步),但它不仅可以远程同步数据(类似于 scp 命令),还可以本地同步数据(类似于 cp 命令)。不同于 cp 或 scp 的一点是,使用 rsync 命令备份数据时,不会直接覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
rsync 有 5 种不同的工作模式:
第一种用于仅在本地备份数据;
第二种用于将本地数据备份到远程机器上;
第三种用于将远程机器上的数据备份到本地机器上;
第四种和第三种是相对的,同样第五种和第二种是相对的,它们各自之间的区别在于登陆认证时使用的验证方式不同。
示例:
同步本地数据:rsync -av /etc/passwd /tmp/1.txt
同步远程数据:rsync -av /etc/passwd 192.168.188.128:/tmp/1.txt
?
1、备份sdb磁盘的数据并做一次恢复验证。
2、配置一个rsync同步作业,把tmp目录文件定时同步到/home/bak目录下
?