Linux系统中这么方便的备份方法,你get了么?
数据备份之手动备份
Linux系统拥有强大的命令集,每一个命令都有很多不同的用法。我们在手动备份中主要用的两个命令是tar 和 dd。
tar命令作为最经常使用的备份工具,相信大多数人的已经用得很娴熟了,tar可以帮助我们将需要备份的文件压缩成指定的格式存储起来,也可以将压缩文件减压还原。在此就不多做赘述了。
dd是一个功能强大的UNIX工具,由Linux内核的makefile进行引导镜像,它也可以用来复制数据。下面我们讲一讲dd备份的经典用法:
1、备份整个硬盘
使用dd命令备份整个硬盘。在这个例子中,源硬盘的设备名为/dev/sda的,目标硬盘的设备名是/dev/sdb。执行dd命令,备份整个硬盘/dev/sda到同一系统的另一个硬盘/dev/sdb。如下所示:
[wangguyuan@stp1:~$]# dd if=/dev/sda of=/dev/sdb - "if"后跟输入文件,"of"后跟输出文件。 - 上述命令在执行过程中如有任何错误都会失败。但若加入参数“CONV= NOERROR”,则即使执行过程中有错误,它也会继续复制。 - 输入文件和输出文件在执行前必须检查再三,如果两者顺序颠倒,你可能会损失所有数据。
在备份整个硬盘时,我们也可以加入sync参数来同步I/O。 如下所示:
[wangguyuan@stp1:~$]# dd if=/dev/sda of=/dev/sdb conv=noerror,sync
2、创建硬盘的镜像
使用dd命令为硬盘创建一个图像文件并将其保存在其他存储设备。这种备份方式有很多好处:一是易于使用,二是这种备份方法的速度快于其他方法的备份,也能让你更快速的恢复数据。
创建一个硬盘/dev/sdc的image命令:
[wangguyuan@stp1:~$]# dd if=/dev/sdc of=~/sdcdisk.img
3、恢复硬盘镜像文件
使用dd命令将硬盘的镜像文件恢复数据到另一个硬盘。如下所示:
[wangguyuan@stp1:~$]# dd if=sdcdisk.img of=/dev/sdb
sdcdisk.img文件是/dev/sdc的镜像,所以上面的命令将恢复/dev/sdc的镜像到/dev/sdb
4、备份分区
使用dd命令备份硬盘分区。输入文件填写分区的设备名称,输出文件填写你指定的目标路径或映像文件。 dd命令示例所示如下:
[wangguyuan@stp1:~$]# dd if=/dev/sdd of=~/partision1.img
本文只介绍dd命令相关备份功能,当然dd还有很多其他的用法,如销毁磁盘数据、测试硬盘的读写速度、确定硬盘的最佳块大小等,在此就不做一一列举了。
数据备份之自动备份
使用上述命令,我们可以手工备份数据,但是每天定时做这些操作可能比较繁琐,其实,Linux还为我们提供强大的工具进行自动备份,这就是cron。cron可以使我们在Linux系统中在约定的时间执行已经计划好的工作。
Linux系统中,我们可以把cron设置为开机时自动启动,也可以在需要时手动启动。cron启动后,它会读取它的所有配置文件(全局性配置文件/etc/crontab,以及每个用户的计划任务配置文件),然后cron会根据命令和执行时间来按时来调用度工作任务。
对于cron,我们可以用crontab来编辑自己的计划。命令行下输入crontab -e即可。
crontab配置说明:
m(Minutes):一小时中某分钟计划开始,可出现", - * /"四个字符,有效范围为0-59的整数
h(Hours):一天中某小时计划开始,可出现", - * /"四个字符,有效范围为0-23的整数
dom(DayofMonth):一个月某自然天计划开始,可出现", - * / ? L W C"八个字符,有效范围为0-31的整数
mon(Month):一年中的某自然月计划开始,可出现", - * /"四个字符,有效范围为1-12的整数
dow(DayofWeek):一周中的某天计划开始,可出现", - * / ? L C #"八个字符,有效范围为1-7的整数
详细说明:
每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:
(1)*:表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。
(2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
(3)-:表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次
(4)/:表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.
(5),:表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。
(6)L:表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。
(7)W: 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。