ZFS管理手册:第五章ZPool的导入和导出

ZFS管理手册:第五章ZPool的导入和导出

在这里,我们将继续讨论ZFS存储池、如何通过导出和导入池跨系统迁移它们、从损坏的池中恢复以及如何将存储池升级到最新版本。

动机

作为GNU/Linux存储管理员,您可能需将存储从一台服务器移动到另一台服务器。这可以通过将磁盘从一个存储箱物理移动到另一个存储箱,或者通过将数据从旧的实时运行的系统复制到新的系统来实现。我将在本系列中介绍这两种情况。后者涉及发送和接收ZFS快照,这个方法后面再进行详细介绍。这个帖子将处理前者;即物理移动驱动器。

ZFS的一个巧妙功能是能够导出您的存储池,这样您就可以拆卸驱动器,拔下它们的电缆,并将驱动器移动到另一个系统。在新系统上之后,ZFS使您能够导入存储池,而不考虑驱动器的顺序。这方面的一个很好的演示是抓起一些U盘,插入它们,然后创建一个ZFS存储池。然后导出存储池,拔下U盘,把它们放进帽子里,然后把它们混合在一起。然后,以任意顺序将其重新插入,并将池重新导入到新的机器上。事实上,ZFS足够智能,可以检测字符顺序。换句话说,您可以从一个大端的系统中导出存储池,然后在一个小端的系统上导入该池,而不会出现问题。

导出存储池

当准备好要进行数据迁移,在拔下电源之前,您需要导出存储池。在磁盘确认已完成导出之前,它会通知内核将所有挂起的数据刷新到磁盘,并删除系统存储池的所有信息。这时就可以安全地关闭计算机并移除驱动器。
如果在移除驱动器之前没有导出存储池,则将无法在新系统上导入驱动器,并且可能无法将缓存钟的数据写入到磁盘。尽管由于文件系统的性质,数据将保持一致,但在导入时,将在旧系统中已经被移走的池会显示为故障池。此外,目标系统将拒绝导入尚未显式导出的池。这可以避免使用网络存储创建的池会被多个机器同时使用。
要导出存储池,请使用以下命令:

# zpool export tank

此命令将尝试取消挂载所有的ZFS数据集以及池。默认情况下,在创建ZFS存储池和文件系统时,它们会自动挂载到系统中。不需要像使用ext3或ext4那样显式卸载文件系统。export命令可以处理这问题。此外,无论出于何种原因,一些资金池可能会拒绝导出。如果需要强制导出,您可以使用“-f”参数。

导入存储池

将驱动器安装到新服务器后,即可导入池。此外,新系统可能安装了多个池,您需要确定要向其中导入哪个池,或者将它们全部导入。如果新服务器上尚不存在存储池“TANK”,并且这是您希望导入的池,则可以运行以下命令:

# zpool import tank
# zpool status tank
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdg     ONLINE       0     0     0
            sdh     ONLINE       0     0     0
          mirror-2  ONLINE       0     0     0
            sdi     ONLINE       0     0     0
            sdj     ONLINE       0     0     0

errors: No known data errors

您的存储池状态可能不是“ONLINE”,这意味着一切正常。如果系统无法识别池中的磁盘,则您可能会处于“DEGRADED”状态。如果一个或多个驱动器对系统显示为出现故障,则您的池中可能会出现故障状态。您需要诊断导致问题的驱动器,并进行相应的修复。
您可以同时导入多个池,方法是将池作为参数传进去,或使用参数“-a”导入所有发现的。要导入两个池“tank1”和“tank2”,可以使用以下命令

# zpool import tank1 tank2

如果导入所有的池,可以使用:

# zpool import -a

恢复被破坏的池

如果ZFS存储池之前已销毁,则仍可将该池导入系统。销毁池不会擦除磁盘上的数据,因此元数据仍然有效,并且池仍然可以被发现。让我们取一个名为“TANK”的干净池,销毁它,将磁盘移动到一个新系统,然后尝试导入该池。您需要传递“-D”参数来告诉ZFS导入已销毁的池。但此时与普通导入不同,不需要将池的名字作为参数提供:

(server A)# zpool destroy tank
(server B)# zpool import -D
   pool: tank
     id: 17105118590326096187
  state: ONLINE (DESTROYED)
 action: The pool can be imported using its name or numeric identifier.
 config:

        tank        ONLINE
          mirror-0  ONLINE
            sde     ONLINE
            sdf     ONLINE
          mirror-1  ONLINE
            sdg     ONLINE
            sdh     ONLINE
          mirror-2  ONLINE
            sdi     ONLINE
            sdj     ONLINE

   pool: tank
     id: 2911384395464928396
  state: UNAVAIL (DESTROYED)
 status: One or more devices are missing from the system.
 action: The pool cannot be imported. Attach the missing
        devices and try again.
   see: http://zfsonlinux.org/msg/ZFS-8000-6X
 config:

        tank          UNAVAIL  missing device
          sdk         ONLINE
          sdr         ONLINE

        Additional devices are known to be part of this pool, though their
        exact configuration cannot be determined.

请注意,池的状态为“Online(DESTROYED)”。尽管该池是“在线”的,但它只有部分在线。基本上,它只可以被发现,但还不能使用。如果您运行“df”命令,您会发现存储池未挂载。这意味着ZFS文件系统数据集不可用,并且您当前无法将数据存储到池中。但是,ZFS已找到该池,您可以通过再次运行导入命令将其完全ONLINE状态以供标准使用,这一次将池名称指定为要导入的参数:

(server B)# zpool import -D tank
cannot import 'tank': more than one matching pool
import by numeric ID instead
(server B)# zpool import -D 17105118590326096187
(server B)# zpool status tank
  pool: tank
 state: ONLINE
 scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdg     ONLINE       0     0     0
            sdh     ONLINE       0     0     0
          mirror-2  ONLINE       0     0     0
            sdi     ONLINE       0     0     0
            sdj     ONLINE       0     0     0

errors: No known data errors

请注意,ZFS警告我,它在存储上找到了多个与名称“TANK”匹配的池,要导入池,我必须使用其唯一的标识符。所以,我把它作为我上一次导入的一个参数。这是因为在我前面的输出中,我们可以看到有两个已知池,池名称为“TANK”。但是,在指定其ID之后,我能够成功地将存储池设置为完全“在线”状态。您可以通过检查其状态来识别它:

# zpool status tank
  pool: tank
 state: ONLINE
status: The pool is formatted using an older on-disk format.  The pool can
        still be used, but some features are unavailable.
action: Upgrade the pool using 'zpool upgrade'.  Once this is done, the
        pool will no longer be accessible on older software versions.
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sde     ONLINE       0     0     0
            sdf     ONLINE       0     0     0
          mirror-1  ONLINE       0     0     0
            sdg     ONLINE       0     0     0
            sdh     ONLINE       0     0     0
          mirror-2  ONLINE       0     0     0
            sdi     ONLINE       0     0     0
            sdj     ONLINE       0     0     0

升级存储池

迁移磁盘时可能会遇到的一件事是,软件的池和文件系统版本可能不同。例如,您可能已将池从20版本的系统上导入,同时导入到28版本的系统中。因此,您可以升级您的池版本以使用该版本的最新软件。从前面的示例可以明显看出,新服务器似乎具有软件的更新版本。我要升级了。
警告:将池升级到较新版本的ZFS后,较旧版本将无法使用该存储池。因此,请确保在升级前,您知道没有必要迁移回到旧系统上。此外,升级后无法降级回到旧版本。
首先,我们可以看到池可用功能的简要说明:

# zpool upgrade -v
This system is currently running ZFS pool version 28.

The following versions are supported:

VER  DESCRIPTION
---  --------------------------------------------------------
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  Snapshot user holds
 19  Log device removal
 20  Compression using zle (zero-length encoding)
 21  Deduplication
 22  Received properties
 23  Slim ZIL
 24  System attributes
 25  Improved scrub stats
 26  Improved snapshot deletion performance
 27  Improved snapshot creation performance
 28  Multiple vdev replacements

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.

因此,让我们执行升级,使池的版本升级到28:

# zpool upgrade -a

另外,当在Linux上使用ZFS时,RPM和Debian包将包含一个/etc/init.d/ZFS init脚本,用于在引导时设置池和数据集。这是通过在引导时导入它们来完成的。但是,在关闭时,init脚本不会导出池。相反,它只是把它们卸了下来。因此,如果您仅在关闭后将磁盘迁移到另一台计算机,您将无法在新计算机上导入存储池。

结论

在很多情况下,您可能需要将磁盘从一台存储服务器移动到另一台存储服务器。值得庆幸的是,ZFS通过导出和导入池使这一点变得很容易。此外,“zpool”命令有足够的子命令和开关来处理池不能导出或导入的最常见情况。在本系列的最后,我将讨论“zdb”命令,以及它在这里的用处。但在这一点上,避开使用zdb,只专注于池,并根据需要适当地导出和导入它们。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值