LInux 备份策略
使用RAID1,RAID5等磁盘阵列进行备份,万一RAID的控制芯片坏掉了,也会很麻烦的
主机角色不同,备份任务也不同
1 个人桌面计算机
使用Norton的【Ghost】应该是一套不错的备份大师,他可以像Windows系统那样备份整个partition,将备份后的数据刻录到光盘中
2 网络服务计算机
由于这些数据每天都有相当多的变化,所以备份的策略(频率,媒体,方法等)是相当的重要的
3 考虑的因素
备份那些档案,
选择什么备份的设备,包括可擦写光盘,一颗硬盘,同一颗硬盘的不同分区,网络备份系统,
考虑备份的方式 使用完整备份或是差异备份
备份的频率
备份使用的工具为何,包括tar,cpio,dd还是dump等等的备份工具
操作系统本身需要备份的档案
/etc/整个目录,/home 整个目录,/var/spool/mail,/boot,/root,如果自行安装过其他的套件,那么/usr/local/或/opt也最好备份一下
每种服务提供的数据都不同,例如www服务器总是需要有人提供网页档案,讨论区的内容总是要写入数据库,所以,使用者主动提供的档案
以及服务运作过程会产生的数据,都需要被考虑来备份,假设我们提供的服务软件都是使用原厂RPM安装,所以备份的数据文件有:
软件本身的配置文件例如:/etc/ 整个目录,/usr/local/ 整个目录
软件服务提供的数据 以www与mysql为例:
www资料 : /var/www/整个目录或/srv/www/整个目录,以及系统的用户家目录
mysql:/var/lib/mysql/整个目录
其他在Linux主机上面提供的服务之数据库档案
通常 推荐需要备份的目录
/boot/ /etc/ /home/ /root/ /usr/local或者是/opt及/srv等 /var这个目录当中有些暂存目录则可以不备份
不需要备份的目录:
有些数据不需要备份
/dev/ 这个随便 /proc 这个不需要备份 /mnt与/media如果没有在这个目录放置你自己系统的东西,也不需要备份
/tmp 暂存档,不需要备份
储存媒体的考虑
远程异地备份,速度较快的硬盘来备份(硬盘最好是热插拔才行,适合Linux24全年无休的状态),DVD-RW,磁带(tape,容量较大),利用主机上的第二颗硬盘来备份
linux中设备的装置代号
光驱: /dev/cdrom 其实应该是/dev/sdX或/dev/hdX
磁带机:/dev/st0 (SCSI 界面), /dev/ht0 (IDE 界面)
软盘驱动器: /dev/fd0 , /dev/fd1
硬盘机: /dev/hd[a-d][1-16] (IDE), /dev/sd[a-p][1-16] (SCSI/SATA)
外接式USB硬盘机:/dev/sd[a-p][1-16] (与 SCSI 相同)
打印机 : /dev/lp[0-2]
备份考虑的频率:
完整备份,差异备份,增量备份
还原的考虑
如果是完整备份的话,若系统出现问题导致系统损毁,只要将完整备份的数据拿出来,整个给还原回去硬盘,就可以搞定了
有些时候(例如使用dd指令)甚至连系统都不需要重新安装,完装备份就是将根目录(/)整个系统通通备份下来,在某些场合底下,完整备份也可以
备份一个文件系统,例如 /dev/sda1或 /dev/md0 戒 /dev/myvg/mylv 之类的文件系统
累计备份
完整备份在还原方面有相当良好的表现,但是系统用的越久,数据就会越大,完整备份所需要花费的时间与储存媒体的使用相当的麻烦
完整备份不太可以每天都进行,你想要每天都备份数据,可以使用差异备份
所谓的累积备份,指的就是进行完第一次完整备份后,经过一段时间的运作,比较系统与备份文件之间的差异,仅备份有差异的档案而已
而第二次累计备份则与第一次累计备份的数据比较,也是仅备份有差异的数据而已,由于仅备份有差异的数据,因此备份的数据量小而快速
由于每次都仅与前一次的备份数据比较而已,因此备份的数据量会少很多,还原的时候,首先,先还原星期一的完整备份,然后再还原星期二
的累计备份,再依次还原星期三,星期四的累计备份才算还原,
累积备份使用的备份软件
完整备份常用的工具有dd,cpio,dump/restore等等,因为这些工具都能备份装置与特殊档案,dd可以直接读取磁盘的扇区而不理会文件系统
缺点是慢,cpio能够备份所有档案,不过要配合find或其他查找文件名的指令才能够处理妥当,以上两个都是进行完整备份的,但累计备份就要额外
使用脚本程序来处理,可以直接进行累计备份的就是dump这个指令
用 dd 来将 /dev/sda 备份到完全一模一样的 /dev/sdb 硬盘上:
dd if=/dev/sda of=/dev/sdb
由于dd是读取扇区,所以/dev/sdb这颗磁盘可以不必格式化,非常的方便,dd的速度比较慢
使用cpio来备份与还原整个系统,假设储存媒体为SATA磁带机
find / -print | cpio -covB > /dev/st0 <==备份到磁带机
cpio -iduv < /dev/st0 <==还原
假设/home为一个独立的文件系统,而/backupdate也是一个独立的用来备份的文件系统,那如何使用dump将/home完整的备份到
/backupdate上
dump -0u -f /backupdata/home.dump /home
接着进行第一次的累计备份
dump -1u -f /backupdata/home.dump.1 /home
其实tar也可以用来作为完整备份,举例来说, /backupdate是一个独立的文件系统,想要将整个系统通通备份起来,将不必要
的/proc, /mnt/, /tmp等目录不备份 ,其他的数据则予以备份:
tar --exclude /proc --exclude /mnt --exclude /tmp --exclude /backupdata -jcvp -f /backupdata/system.tar.bz2 /
完整备份之差异备份
差异备份与累计备份有点类似,也是需要进行第一次的完整备份才能够进行,只是差异备份指的是:每次的备份都是与原始的完整备份比较的结果
所以系统运作的越久,离完整备份时间越长,那么该次的差异备份数据可能就会越大,差异备份常用的工具与累计备份差不多
因为都需要完整备份,如果使用dump来备份的话,那么每次备份的等级就都会是level 1的意思,你也可以透过tar 的 -N 选项类备份
tar -N '2009-06-01' -jpcv -f /backupdata/home.tar.bz2 /home 只有在比2009-06-01 还要新的档案,在/home底下的档案才会被打包进
home.bz2中,目录会被记录下来,只是目录内的旧档案就不会备份
你也可以透过 rsync 来进行镜像备份
这个rsync可以对两个目录进行镜像(mirror),就算一个非常快速的备份工具
rsync -av 来源目录 目标目录
# 1. 将 /home/ 镜像到 /backupdata/home/ 去
rsync -av /home /backupdata/
此时会在 /backupdata 底下产生 home 这个目录来!
rsync -av /home /backupdata/
再次进行会快很多!如果数据没有更动,几乎不会进行任何动作!
根据分析差异备份所使用的磁盘容量会比累计备份来的大,但是差异备份的还原较快,因为只需要还原完整备份与最近一次的差异备份即可
所谓的累计备份就是永远与上一个备份数据进行差异备份,例如第一天的完整备份,第二天的累计备份则是与第一天的完整备份的差异备份,而第三天的累计备份则是
与第一天和第二天的累计备份来做一个差异备份,而第四天的累计备份,则是第一天的完整备份与第二和第三天的累计备份做一个差异的备份,备份的数据永远都和之前的有关
而差异备份则是指永远与第一个完整备份进行差异比较的备份
配合date指令是非常好用的工具,例如底下的案例是依据日期来备份mysql的数据库
tar -jpcvf mysql.`date +%Y-%m-%d`.tar.bz2 /var/lib/mysql
备份是非常重要的工作,你可不希望想到才进行,交给系统自动处理就对了,请自己撰写script,配合crontab去执行把
这里将要备份/home 与网页数据,不能天天备份,因为这两个部分会占去很大的硬盘空间,所以将备份分为两大部分,一个是
每日备份经常性变动的重要数据,一个则是每周备份就不常变动的信息,这个时候需要写两个简单scripts,分别来储存这些数据
1. 主机硬件:使用一个独立的filesystem 来储存备份数据,此 filesystem 挂载到 /backup 当中;
2. 每日进行:目前仅备份 MySQL 数据库;
3. 每周进行:包括 /home, /var, /etc, /boot, /usr/local 等目录与特殊服务的目录;
4. 自动处理:这方面利用 /etc/crontab 来自动提供备份的进行;
5. 异地备援:每月定期的将数据分别 (a)刻录到光盘上面 (b)使用网络传输到另一部机器上面。
每周系统备份的脚本
vi /backup/backupwk.sh http://linux.vbird.org/linux_basic/0580backup/backupwk-0.1.sh
每日备份资料的脚本
vi /backup/backupday.sh http://linux.vbird.org/linux_basic/0580backup/backupday.sh
接着使用/etc/crontab来设置自动运行
vi /etc/crontab
30 3 * * 0 root /backup/backupwk.sh
30 2 * * * root /backup/backupday.sh
这样系统就会自动的在每天的 2:30 进行 MySQL 的备份,而在每个星期日的 3:30 进行重要档案的备份
接着最好每隔大约一个月到两个月之间,会将backup目录内的数据使用DVD复制一下,然后将DVD放置
在家中保存
远程备援的script
使用两部主机如何保存,假设一部主机已经提供了FTP与sshd这两个网络服务,同时你已经做好了FTP的
帐号,sshd帐号的免密码登录功能
使用FTP上传备份数据
假设你要上传的数据是将 /backup/weekly/ 目录内的档案统整为一个 /backup/weekly.tar.bz2 , 并且上传到服务器端的 /home/backup/ 底下,账号 dmtsai ,密码dmtsai.pass
vi /backup/ftp.sh
#!/bin/bash
# 先输入系统所需要的数据
host="192.168.1.100" # 进程主机
id="dmtsai" # 进程主机的 FTP 账号
pw='dmtsai.pass' # 该账号的密码
basedir="/backup/weekly" # 本地端的欲被备份的目录
remotedir="/home/backup" # 备份到远程的何处?
backupfile=weekly.tar.bz2
cd $basedir/..
tar -jpc -f $backupfile $(basename $basedir)
ftp -n "$host" > ${basedir}/../ftp.log 2>&1 <
user $id $pw
binary
cd $remotedir
put $backupfile
bye
EOF
使用 rsync 上传备份数据
首先必须要取得服务器上面的某个帐号的使用权后,并将该帐号可以不用密码即可登录远程服务器,
而同样的你要让 /backup/weekly/ 整个备份到 /home/backup/weekly 底下时
简单这样做:
[root@www ~]# vi /backup/rsync.sh
#!/bin/bash
remotedir=/home/backup/
basedir=/backup/weekly
host=127.0.0.1
id=dmtsai
底下为程序阶段!不需要修改喔!
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}
由于rsync可以透过ssh来进行镜像备份,所以没有变更的档案将不需要上传的
灾难复原的考虑
硬件损毁,且具有完整备份的数据
如果是使用差异备份,那么将完整备份复原后,将最后一次的差异备份复原回去,你的系统就恢复了
由亍软件的问题产生的被攻破资安事件
由于系统的损毁是因为被工具,此时即使恢复到正常的系统,也会被再此攻破,此时使用完整备份的复原不是个好方式,最好是需要这样进行
1. 先拔除网络线,最好将系统进行完整备份到其他媒体上,以备未来查验
2. 开始查阅登录档,尝试找出各种可能的问题
3. 开始安装新系统 (最好找最新的 distribution)
4. 进行系统的升级,与防火墙相关机制的制订
5. 根据 2的错误,在安装完成新系统后,将那些 bug 修复
6. 进行各项朋务与相关数据的恢复
7. 正式上线提供服务,并且开始测试
标准流程建议你将出问题的系统备份下来,可以佐证你是被攻击者,然后,记得一定要找出问题点并客服,不然,你的系统还是会被攻击的