Oracle Solaris ZFS 管理指南

使用 ZFS 备用根池

创建池时,该池将固定绑定到主机系统。主机系统一直掌握着池的状况信息,以便可以检测到池何时不可用。此信息虽然对于正常操作很有用,但在从备用介质引导或在可移除介质上创建池时则会成为障碍。为解决此问题,ZFS 提供了备用根池功能。系统重新引导之后备用根池不会保留,并且所有挂载点都会被修改以与该池的根相关。

创建 ZFS 备用根池

创建备用根池的最常见目的是为了与可移除介质结合使用。在这些情况下,用户通常需要一个单独的文件系统,并且希望在目标系统中选择的任意位置挂载该系统。使用 zpool create -R 选项创建备用根池时,根文件系统的挂载点将自动设置为 /,这与备用根值等效。

在以下示例中,名为 morpheus 的池是通过将 /mnt 作为备用根路径来创建的:


# zpool create -R /mnt morpheus c0t0d0
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt

请注意单个文件系统 morpheus,其挂载点是池 /mnt 的备用根。存储在磁盘上的挂载点是 //mnt 的全路径仅在池创建的初始上下文中才会进行解释。然后可以使用 -R 备用根值语法在不同系统的任意备用根池下导出和导入该文件系统。


# zpool export morpheus
# zpool import morpheus
cannot mount '/': directory is not empty
# zpool export morpheus
# zpool import -R /mnt morpheus
# zfs list morpheus
NAME                   USED  AVAIL  REFER  MOUNTPOINT
morpheus              32.5K  33.5G     8K  /mnt

导入备用根池

也可以使用备用根来导入池。如果挂载点不是在当前根的上下文中而是在可以执行修复的某个临时目录下解释的,则可以使用此功能进行恢复。在挂载可移除介质时,也可以使用此功能,如上一节所述。

在以下示例中,名为 morpheus 的池是通过将 /mnt 作为备用根路径来导入的。本示例假定之前已导出了 morpheus


# zpool import -R /a pool
# zpool list morpheus
NAME   SIZE   ALLOC  FREE    CAP  HEALTH  ALTROOT
pool  44.8G    78K  44.7G     0%  ONLINE  /a
# zfs list pool
NAME   USED  AVAIL  REFER  MOUNTPOINT
pool  73.5K  44.1G    21K  /a/pool