一、概述

前几天我通过SSH正在调戏汤姆猫(tomcat)的时候,服务器上CentOS突然挂了。开机grub,使用光盘linux rescue修复提示找不到linux分区,然后想mount硬盘备份系统的时候提示硬盘无法挂载。没有办法只能重装系统。吃一堑长一智,决定定期备份下系统。

何时进行备份?

每天晚上12:00

备份到哪?

显然备份到系统所在磁盘不是明智之举,用户应该备份到外接硬盘或者磁带上面。
为了让文章看上去更简单,本文所做的例子并没有备份到外接设备上,而是在/backup目录下。

要备份什么?

备份整个系统需要占用大量的磁盘空间,所以我决定只有星期天的时候对系统进行全部备份,其他时间备份重要的数据。

备份整个系统,因此这里需要考虑的是不必备份的目录:
/backup
/proc
/lost+found
/sys
/mnt
/media
/dev
/tmp

备份的数据:
/home (你懂的)
/work (我的工作目录)
/opt (软件安装目录)
/var/lib/mysql (mysql数据文件目录)
另外还需要保持一些重要的配置文件:
/etc/profile (各种环境变量)
/etc/bashrc (各种环境变量)
/etc/crontab (设置定时备份)
/etc/fstab (存放文件系统信息,其实我备份文件是存放在其他磁盘的,磁盘的挂载在这里设置)

备份方式

tar支持三种方式进行备份:
1.完整备份:备份指定的所有目标文件或文件夹
2.增量备份:仅备份atime与上次备份不同的文件或文件夹
3.差异备份:与增量备份差不多,只是增加了对Windows文件系统的支持
我这里选择完整备份

何时删除?

系统备份数据保存两周,数据备份保存一周

二、基础知识

atime,ctime,mtime

UNIX系統將时间分为三种:
atime(Access time):文件上次被访问时间。ls -lu查看
ctime(status Change time):文件的属性或内容上次被修改的时间。ls -lc查看
mtime(Modified time):文件的內容上次被修改的时间。ls -l查看
需要说明的是Linux 文件系统从来不存储文件创建时间。

为了方便查看各种时间,这里提供一个脚本

#!/bin/bash
#用法:脚本名 文件
if [ $# != 1 ];then
echo "输入参数不正确,需要输入一个文件"
exit 1
fi
file=$1
if [ ! -f "$file" ]; then
echo "$file 文件不存在"
else
echo "ctime(status Change time): $(ls -lc $file | awk '{print $6, $7, $8}')"
echo "atime(Access time): $(ls -lu $file | awk '{print $6, $7, $8}')"
echo "mtime(Modified time): $(ls -l $file | awk '{print $6, $7, $8}')"
fi

利用cron定时备份

新建cron计划任务非常简单,以下方法都可以完成:
方法一:
$ crontab -e
方法二:
# vim /etc/crontab
方法一只能以当前用户的权限运行计划的任务;方法二可以指定程序以哪个用户执行,但是必须以root身份编辑该文件。
在此,因为要对整个文件系统进行备份,因此仅以/etc/crontab为例进行介绍:
# m h dom mon dow user command
0 0 * * * root /work/mybin/backup.sh

这行配置表明,在每天0:00分执行/work/mybin/backup.sh这个脚本
这样设置后如果无效,需要service crond reload以及service crond restart命令重读配置文件以及重启服务来生效。

三、脚本

#!/bin/bash
#
#星期天进行系统全部备份,其他时间进行部分数据备份。
DATA="/work /home /opt /var/lib/mysql /etc/profile /etc/bashrc /etc/crontab /etc/fstab "
DATA_VALI=7 #数据文件有效期
SYS_VALI=14 #系统文件有效期 set $(date)
if test "$1" = "Sun" ; then
tar -czvpf "/backup/system_backup_$6-$2-$3.tar.gz" --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev --exclude=/tmp /
else
tar -czpvf "/backup/data_backup_$6-$2-$3.tar.gz" $DATA
fi find /backup -type f -name "data*" -mtime +$DATA_VALI -exec rm -rf {} \;
find /backup -type f -name "system*" -mtime +$SYS_VALI -exec rm -rf {} \;

这里说明两点

data时间格式问题:

我的linux环境是中文的,shell终端或shell脚本中执行date命令,得出的结果都是这样的:
2013年 05月 21日 星期二 10:13:56 CST
但是在crontab定期执行shell脚本中,得出的结果却是这样的:
Tue May 21 10:13:56 CST 2013
所以判断是否是星期天的是才用”if test “$1″ = “Sun” ; then”

find与mtime

find可以根据时间进行查找。atime,ctime和mtime上面已经讲过了,这里说明下-mtime后面加的数字。
1.直接上数字
表示距离当前时间第几天的文件。需要注意是这个时间不是按照日期的,是根据从当前时间(2013年5月21日13:19:10)向前推24小时表示0.也就是0表示24小时内修改过的文件,1表示24-48小时内修改过的文件,2表示48-72小时修改过的文件。
2.+数字
表示几天以外的修改过的文件,+1表示1天以修改过的文件(距离现在>48小时),+2表示2天以外修改过的文件(距离现在>72小时)
3.-数字
表示几天以内的修改过的文件,-1表示1天以修改过的文件(距离现在<24小时),-2表示2天以内修改过的文件(距离现在<48小时)

tar备份系统的更多相关文章

  1. tar备份系统的方法

    下面是备份系统的方法: 然后打开终端,输入以下命令: 1.成为根用户:   sudo su 2.转到根目录:   cd / 然後,下面就是我用来备份我的系统的完整的命令:tar -cvpzf /med ...

  2. Linux 中我该如何备份系统

    系统备份概述 在前面的一些文章中,我反复提到经常会把系统搞崩溃,所以备份系统就是一件不容忽视的事情.由于 Linux 系统本身的优越性,系统的备份和还原还是比较容易的.主要表现在以下方面: Linux ...

  3. Ubuntu 备份系统为ISO镜像 & 解决ISO限制4GB大小 & Clone当前系统到其他电脑

    看标题,标题涵盖了3个部分,Ubuntu 备份系统为ISO镜像,  解决ISO限制4GB大小 ,  Clone当前系统到其他电脑  我们就从三个部分说起. Ubuntu 备份系统为ISO镜像 在Win ...

  4. buntu下备份系统的方法

    今天不小心强行结束了一不知道用处的进程,结果造成进不了x界面,gdm启动不了,使用apt-get进行修复,结果几乎要把整个x界面有关的软件包删除,所以只好重装系统,为了防止下次出现类似的问题,所以把系 ...

  5. ghoest32 不重启电脑手动备份系统为.gho

    备份系统我们一般使用DOS之家的ghoest备份工具,但备份必须是重启电脑在DOS命令行下,其实,可以不重启电脑备份系统,也就是手动备份系统.DOS之家用的ghoest本质也是赛门铁克公司出的ghoe ...

  6. AWIT DBackup 0.0.20 发布,备份系统

    AWIT DBackup 0.0.20 修复了几个小 bug. AllWorldIT DBackup 是一个备份系统,为每个目录创建一个独立的压缩包,这更便于搜索. 特点: 使用 xz, bzip2, ...

  7. 通过rsync搭建一个远程备份系统(一)

    前言 我公司是电子商务公司,全部是linux系统,每天的网站数都在增加,为了保证安全,需要建立一个远程容灾系统,将网站数据每天凌晨1点备份到远程服务器上,由于数据量大,每天进行进行增量备份,仅仅备份当 ...

  8. VHD进阶:差分VHD备份系统

    VHD进阶:差分VHD备份系统 一.创建虚拟磁盘 方法1:图形界面创建 1.打开磁盘管理器(运行diskmgmt.msc),在“磁盘管理”上点击右键,“创建VHD”,类型选择VHD,动态扩展或者固定大 ...

  9. 基于HBase的手机数据备份系统 .

    基于HBase实现的手机数据备份系统,实现了手机关键信息的备份,如短信.联系人等. 包括服务器端(Server)和客户端(Client) Server运行环境:Hadoop+HBase+Tomcat ...

随机推荐

  1. Java [Leetcode 104]Maximum Depth of Binary Tree

    题目描述: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along th ...

  2. SqlSugar轻量ORM

      蓝灯软件数据股份有限公司项目,代码开源. SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法. 学习列表 0.功能更新 1.SqlSuga ...

  3. UVA 11183 Teen Girl Squad 最小树形图

    最小树形图模板题 #include <iostream> #include <algorithm> #include <cstdio> #include <c ...

  4. python引用在函数传参时的体现以及可变与不可变对象的对比

    今天偶然看到 vamei 老师的博客 http://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html 讲的是python动态类型以及引用的事儿 ...

  5. 远程调试树莓PI

    非官方 参考  http://linuxtortures.blogspot.jp/2012/06/cross-compiling-and-cross-debugging-c.html 注意: 建立 / ...

  6. 配置OpenGL及第一个实例

    Windows环境下安装GLUT的步骤:1.将下载的压缩包解开,将得到5个文件2.在“我的电脑”中搜索“gl.h”,并找到其所在文件夹(如果是VS,则应该是其安装目录下面的“VC\PlatformSD ...

  7. 设计模式_Observer_观察者模式

    形象例子: 想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦.观察者 ...

  8. 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇04:如何实现触控操作》

    4.如何实现触控操作 触控操作概述: 随着APPLE.Samsung.SONY等众多公司,将掌机.电脑和手机等产品在触控领域的不断探索,以触控为操作的机型越来越多的被投放到市场当中.触控游戏.触控软件 ...

  9. CI支持各种文件上传-文件类型(Linux + window)

    $mimes = array( 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'c ...

  10. HW6.30

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...