笑看云卷云舒,淡观潮起潮落!
Friday Dec 29, 2006
ZFS文件系统 - (4) zpool inport/export
周一公司放一天假,Merry Christmas!周二一来事情比较杂乱,早上开部门会,匆匆吃过午饭,回来积累的邮件还没有回完,又急急忙忙的去BJS07为年会排演小品。周四,节目筹备委员会对节目进行检查。还有一个组,他们演《武林外传》中的一个片段,他们演的还真不错。对整个剧情把握的还挺到位,而且每一个人的台词都很熟悉。我们的小品是原创的,又都是一群没有演艺任何经验的人,也没有可以比照的表演,所以难免有很多不完善之处。不过,我们的优势也是明显的,我们的小品对大家更具神秘感,未知性和可发挥性更强。还有一个月可以用来排练,相信大家会演的越来越好的。让我们大家一起加油吧!
罗罗嗦嗦半天,说点正题吧。前面讲了ZFS文件系统的池的建立,池的扩展,hot spare设备的增加和删减。现在我们说说池的import和export。首先说说,为什么要有池的import和export?例如,当我们要升级系统的时候,老的系统已经无法再扩展,内存条槽没有了,CPU也没办法在提速了。那么只好换一套新的硬件,但是我们有着庞大的数据存在硬盘上,如果把这些数据全部转移到新的机器上那时间是不容许的,怎么办呢?又如果我们一个不小心的操作将池删掉了,怎么办?所有的在其上的文件系统都已经不可见了,那么能否将数据重新找回来呢?
对了,zpool import/export就可以解决以上所有问题。
zpool export [-f] pool
zpool import [-d dir] [-D]
zpool import [-d dir] [-D] [-f] [-o opts] [-R root] pool|id [newpool]
zpool import [-d dir] [-D] [-f] [-a]没有参数的zpool import将列出当前机器上可以import的所有池,加参数-D将列出所有已经被destroy但是可以找回来的。/dev/dsk目录是import命令的默认操作目录,ZFS会自动搜寻并检测/dev/dsk目录下的所有设备。当然,因为ZFS可以建立在文件之上(这是不被推荐的),也可以建立在volume之上,所以还可以指定要检测的文件夹。这就是-d目录。
还有一点就是,ZFS文件系统可以在x86平台和sparc平台上平滑迁移。什么意思呢,就是说我们把一个x86系统上的池export出来,然后在sparc系统上在import进来,所有数据文件不需要做任何额外操作立马可用。反之亦然。让我们看几个关于zpool import/export的例子。
例如,将一个文件系统export出去,再import进来,以/zfsroot为目录前缀。
zpool import显示了当前系统有一个可以import进来的池。# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 1.00G 65.9G 25.5K /mypool
mypool/fs 24.5K 65.9G 24.5K /mypool/fs
mypool/fs@snap 0 - 24.5K -
mypool/vol 22.5K 66.9G 22.5K -
mypool/vol@snap 0 - 22.5K -
# zpool export mypool
# zfs list
no datasets available
# zpool import
pool: mypool
id: 17890752848509439119
state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
mypool ONLINE
c1t3d0 ONLINE
# zfs list
no datasets available
# zpool import -R /zfsroot mypool
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 1.00G 65.9G 25.5K /zfsroot/mypool
mypool/fs 24.5K 65.9G 24.5K /zfsroot/mypool/fs
mypool/fs@snap 0 - 24.5K -
mypool/vol 22.5K 66.9G 22.5K -
mypool/vol@snap 0 - 22.5K -
如果要import的池的名字当前系统已经有了,该怎么办?再如果有两个相同名字的池存在,zpool import怎么import进来呢?这就是我们上面看到的参数id和newpool,id是池唯一性的标识符。还有,就是ZFS还可以import进来已经被destroy掉的pool。我们可以看看下面的例子:
zpool import只能看到export出去的池,而pool1是的destroy掉的,所以只有加参数-D才可以显示。# zpool create pool1 c1t3d0
# zfs create pool1/fs1
# zfs create pool1/fs2
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool1 146K 33.5G 27.5K /pool1
pool1/fs1 24.5K 33.5G 24.5K /pool1/fs1
pool1/fs2 24.5K 33.5G 24.5K /pool1/fs2
# zpool destroy pool1
# zpool import
no pools available to import
pool1虽然被删除掉了,但是如果在c1t3d0没有建立过新的池,关于已有pool1的所有数据其实还完整的保存与硬盘之上,所以再通过参数-D还是可以在找回来,并且所有数据都完整。由于又有一个pool1存在于当前系统中,所以再import进第一个pool1时只有改名,否则该操作失败。
# zpool import -D
pool: pool1
id: 17168252477589329464
state: ONLINE (DESTROYED)
action: The pool can be imported using its name or numeric identifier.
The pool was destroyed, but can be imported using the '-Df' flags.
config:
pool1 ONLINE
c1t3d0 ONLINE
# zpool create pool1 c1t4d0
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool1 85K 33.5G 24.5K /pool1
# zpool import -Df pool1 pool2
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool1 85K 33.5G 24.5K /pool1
pool2 146K 33.5G 27.5K /pool2
pool2/fs1 24.5K 33.5G 24.5K /pool2/fs1
pool2/fs2 24.5K 33.5G 24.5K /pool2/fs2
Posted at 04:29PM Dec 29, 2006 by forrest in ZFS | Comments[4]


Posted by aling on January 10, 2007 at 03:14 PM CST #
如何查看一个现有的pool的id呢?
Posted by 121.15.117.231 on October 30, 2007 at 09:05 PM CST #
可以用zdb.
# zdb pool | grep pool_guid
pool_guid=7683868443880455272
Posted by Forrest on October 31, 2007 at 09:57 AM CST #
cool
Posted by wow gold on November 03, 2008 at 09:18 AM CST #