免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2505 | 回复: 0
打印 上一主题 下一主题

OpenSolaris下的snapshot及基于zfs的系统恢复 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-27 16:14 |只看该作者 |倒序浏览
搞IT开发,圆满完成自己的任务永远是一件非常惬意的事情。而当你即将马到成功,系统突然不能正常启动并且无法恢复或数据由于某种原因而丢失,无疑不让你的心情来个180度的大转弯,“曾经是那么的接近成功”。所以,我们在考虑完成自己任务的同时,还有一个基本职责就是保护好系统及存放在系统中的数据。为使数据丢失的风险降到最低,我们有必要制定一个系统的备份计划。本文的主题围绕Solaris系统的备份和恢复方案,并针对zfs文件系统下的snapshot作了详细的介绍。
在基于ufs的Solaris 系统中,可以使用ufsdump和ufsrestore命令来备份和恢复文件系统(必须先卸载文件系统),使用fssnap来创建文件系统的在线快照从而实现在线文件系统的备份。两种方法相比,使用snapshot的优点是:snapshot是一种在线文件系统备份方案,不需要先卸载文件系统;同时,snapshot实际使用多少空间就占用多少,而不是占用和整个文件系统同样大小的空间。
什么是snapshot呢?它就是在线文件系统的一个快照,它把文件系统的数据存储在一个备份恢复文件里。快照文件是一个bit-mapped文件,会一直占用磁盘直到删除快照,其大小会随着被拍照的文件系统的活动次数而改变,主要取决于一上次拍照以来该文件系统有多少数据发生改变。一旦创建snapshot后,就可以像对待其他设备一样对其进行备份操作。如果我们强行卸载一个活跃的文件系统,就会自动删除其快照(在快照存在的情况下)。
在基于ufs的Solaris系统里,创建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。如在安装完OpenOffice、Netbeans及Sun Studio等基本软件后,可以作一个rpool/ROOT/opensolaris@basic的snapshot,这样当系统崩溃时我们可以选择这个快照进行系统恢复。当然,定期做一个snapshot也是一个很好的习惯,就像Windows下设置还原点一样,当系统破坏时,我们可以选择系统运行最稳定时做的snapshot进行恢复。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21041/showart_1882062.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP