IT开发,圆满完成自己的任务永远是一件非常惬意的事情。而当你即将马到成功,系统突然不能正常启动并且无法恢复或数据由于某种原因而丢失,无疑不让你的心情来个180度的大转弯,“曾经是那么的接近成功”。所以,我们在考虑完成自己任务的同时,还有一个基本职责就是保护好系统及存放在系统中的数据。为使数据丢失的风险降到最低,我们有必要制定一个系统的备份计划。本文的主题围绕Solaris系统的备份和恢复方案,并针对zfs文件系统下的snapshot作了详细的介绍。

在基于ufsSolaris 系统中,可以使用ufsdumpufsrestore命令来备份和恢复文件系统(必须先卸载文件系统),使用fssnap来创建文件系统的在线快照从而实现在线文件系统的备份。两种方法相比,使用snapshot的优点是:snapshot是一种在线文件系统备份方案,不需要先卸载文件系统;同时,snapshot实际使用多少空间就占用多少,而不是占用和整个文件系统同样大小的空间。

什么是snapshot呢?它就是在线文件系统的一个快照,它把文件系统的数据存储在一个备份恢复文件里。快照文件是一个bit-mapped文件,会一直占用磁盘直到删除快照,其大小会随着被拍照的文件系统的活动次数而改变,主要取决于一上次拍照以来该文件系统有多少数据发生改变。一旦创建snapshot后,就可以像对待其他设备一样对其进行备份操作。如果我们强行卸载一个活跃的文件系统,就会自动删除其快照(在快照存在的情况下)。

在基于ufsSolaris系统里,创建ufs快照是通过以下命令实现的:

fssnap –F ufs –o bs=snapshot_path /snapshot_filesystem

OpenSolaris里,由于默认采用zfs文件系统,基于存储池的概念,故创建snapshot的操作也与ufs条件下有所不同。以下是创建zfs快照的实例:

zfs snapshot rpool/ROOT/opensolaris@basic

当你为文件系统(/export/home)创建一个新的snapshot时,你会发现这个snapshot的文件大小可能为0KB。在创建快照后,你对系统所做的操作都将被记录在这个snapshot里,如创建或删除一个文件等操作,所以快照文件也会逐渐增大。当然,如果一个快照文件用完了磁盘空间,系统会自动删除snapshot,不会影响源文件系统。一旦rollback到某一个快照状态,在该快照之后的所有操作将会被还原。接下来将通过一个实例来说明snapshot的原理:

haiou@opensolaris:~$ zfs list  

NAME                                 USED  AVAIL  REFER  MOUNTPOINT

rpool                               3.05G  2.86G    57K  /rpool

rpool@install                         17K      -    55K  -

rpool/ROOT                          3.00G  2.86G    18K  /rpool/ROOT

rpool/ROOT@install                    15K      -    18K  -

rpool/ROOT/opensolaris              3.00G  2.86G  2.42G  legacy

rpool/ROOT/opensolaris@install      60.0M      -  2.22G  -

rpool/ROOT/opensolaris/opt           529M  2.86G   529M  /opt

rpool/ROOT/opensolaris/opt@install    72K      -  3.61M  -

rpool/export                        53.2M  2.86G    19K  /export

rpool/export@install                  15K      -    19K  -

rpool/export/home                   53.1M  2.86G  46.2M  /export/home

rpool/export/home@install             18K      -    21K  -

//查看目前zfs文件系统和快照的情况

haiou@opensolaris:~$ pfexec zfs snapshot rpool/export/home@a

//为文件系统/export/home创建一个snapshot, pfexec用来在普通用户下执行特权命令,与Linux下的sudo功能相似。

haiou@opensolaris:~$ pwd

/export/home/haiou

haiou@opensolaris:~$ ls

Desktop

haiou@opensolaris:~$ touch a        //在当前目录下新建一个文件a

haiou@opensolaris:~$ gedit a         //编辑文件a

haiou@opensolaris:~$ mkdir b        //在当前目录下新建文件夹b

haiou@opensolaris:~$ ls

a  b  Desktop

haiou@opensolaris:~$ pfexec zfs rollback rpool/export/home@a

//使用之前创建的snapshot将系统恢复到没有新建文件a的状态

//we can use ‘-r’ after ‘rollback’ to force deletion of the recent snapshots, for example:

// pfexec zfs rollback –r rpool/export/home@a

haiou@opensolaris:~$ ls

Desktop

// There is no file name “a” and no directory name “b” in the current directory, the system has been rollbacked successfully

在刚创建快照时使用zfs list命令会发现rpool/export/home@a文件的大小为0,恢复快照后再次调用会发现其大小发生了变化,是因为在snapshot里记住了我们在创建快照后对系统的操作。

OpenSolaris在系统不正当操作或升级一些系统包后可能无法正常启动,这时候很多朋友可能束手无策。由于系统在默认安装后自动制作了一些snapshot,我们可以通过以下操作将破坏的系统恢复到安装时的状态:

1. opensolaris Live CD放入光驱并启动

2. 使用su切换到root用户,密码是opensolaris

3. 把硬盘上已破坏的opensolaris系统挂载上来

zpool import -f rpool

4. 使用安装时制作的快照恢复

zfs rollback rpool/ROOT/opensolaris@install

5. 重启 init 6

这样系统就恢复到安装时的状态并能正常启动了,但你会发现原先系统中安装的软件都不复存在了,这是件大家都不愿意遇到的非常苦恼的事情。所以在使用IPS安装升级包或其它应用软件时,最好先做一个snapshot。如在安装完OpenOfficeNetbeansSun Studio等基本软件后,可以作一个rpool/ROOT/opensolaris@basicsnapshot,这样当系统崩溃时我们可以选择这个快照进行系统恢复。当然,定期做一个snapshot也是一个很好的习惯,就像Windows下设置还原点一样,当系统破坏时,我们可以选择系统运行最稳定时做的snapshot进行恢复。

 

参考:

1.       http://blog.chinaunix.net/u2/75247/showart_1120583.html(http://gdp.cublog.cn)

2.       http://blog.ixpub.net/html/89/10821989-251134.html



Post a comment
Name: 
Email: 
URL: 
Comments: