笑看云卷云舒,淡观潮起潮落!

pageicon 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为目录前缀。

# 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


zpool import显示了当前系统有一个可以import进来的池。

# 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 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


zpool import只能看到export出去的池,而pool1是的destroy掉的,所以只有加参数-D才可以显示。

# 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


pool1虽然被删除掉了,但是如果在c1t3d0没有建立过新的池,关于已有pool1的所有数据其实还完整的保存与硬盘之上,所以再通过参数-D还是可以在找回来,并且所有数据都完整。由于又有一个pool1存在于当前系统中,所以再import进第一个pool1时只有改名,否则该操作失败。

# 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

Comments:

看到我的头像,就想笑,真是好可爱啊!

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 #

Post a Comment:
  • HTML Syntax: NOT allowed