分类:
2010-01-20 10:23:57
ZFS snapshot是OpenSolaris的一个非常强大的技术,它就像Windows的还原点一样,能让你的系统还原到你想要的状态。在《》一文中,我对snapshot的使用及恢复做了较详细的介绍,本文将介绍如果对snapshot快照进行备份(包括增量备份),从而来保证数据的完整性。
首先通过一个简单的demo来重温一下snapshot的原理:
1. 在rpool存储池中创建一个test文件系统:
haiou@opensolaris:~# zfs create rpool/test
haiou@opensolaris:~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 4.52G 1.01G 79.5K /rpool
rpool/ROOT 3.84G 1.01G 19K legacy
rpool/ROOT/opensolaris 3.84G 1.01G 3.58G /
rpool/cifsdemo 99K 1.01G 19K /rpool/cifsdemo
rpool/export 698M 1.01G 21K /export
rpool/export/home 698M 1.01G 23K /export/home
rpool/export/home/haiou 697M 1.01G 391M /export/home/haiou
rpool/test 19K 1.01G 19K /rpool/test
2. 在test文件系统下创建几个新文件:
haiou@opensolaris:/rpool/test# cd /rpool/test
haiou@opensolaris:/rpool/test# echo “How are you?” > f1
//创建一个f1文件,内容为How are you?
haiou@opensolaris:/rpool/test# echo “I am fine” > f2 //创建一个f2文件
3. 接下来为rpool/test文件系统创建一个快照:
haiou@opensolaris:/rpool/test# zfs snapshot rpool/test@1
//为rpool/test文件系统创建一个快照
haiou@opensolaris:/rpool/test# echo “ok” > f3 //创建一个f3文件
haiou@opensolaris:/rpool/test# ls
f1 f2 f3
4. 使用创建的快照对rpool/test 文件系统进行恢复:
haiou@opensolaris:/rpool/test# zfs rollback rpool/test@1
haiou@opensolaris:/rpool/test# ls
f1 f2
这样系统就成功恢复到了创建快照rpool/test@1之前的状态。
在创建快照以后,为了保证数据的完整性,我们也可以对快照进行备份。可以备份在同一个存储池的另一个文件系统,也可以备份到不同的存储池里;同时,我们还可以通过iSCSI、ssh等技术将其备份到远程的物理机器上。
我们可以使用以下的命令来备份rpool/test@1这个快照:
# zfs send rpool/test@1 | zfs receive rpool/rtest
使用zfs list命令可以发现在rpool存储池里创建了一个新的文件系统rtest,且文件系统的内容和test一模一样。同时,在创建rtest的同时,还创建了一个rpool/rtest@1的快照。
在对一个文件系统创建了多个快照以后,我们可以采用增量备份的方式。假设我们又对rpool/test文件系统创建了一个新的快照rpool/test@2,采用增量备份的方式就会只将两个快照之间的差别传送到rtest文件系统里。得注意一点,就是在增量备份之前需要将rtest文件系统设为只读,命令如下:
# zfs set readonly=on rpool/rtest
# zfs send -i rpool/test@1 rpool/test@2 | zfs receive -F rpool/rtest
当然,当我们为一个文件系统创建了多个快照之后,可以将各个快照分别备份到不同的文件系统,命令如下:
# zfs send rpool/test@1 | zfs receive rpool/rtest1
# zfs send rpool/test@1 | zfs receive rpool/rtest2
# zfs send rpool/test@1 | zfs receive rpool/rtest3
如果能将它们都备份到远程的服务器上,就更好地保证了数据的完整性。