Oracle Solaris ZFS 管理指南

第 5 章 安装和引导 Oracle Solaris ZFS 根文件系统

本章介绍如何安装和引导 Oracle Solaris ZFS 文件系统。同时还对使用 Oracle Solaris Live Upgrade 将 UFS 根文件系统迁移到 ZFS 文件系统进行了介绍。

本章包含以下各节:

有关此发行版的已知问题列表,请参见《Oracle Solaris 10 9/10 发行说明》

有关最新的故障排除信息,请访问以下站点:

http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

安装和引导 Oracle Solaris ZFS 根文件系统(概述)

从 Solaris 10 10/08 发行版开始,您可以通过以下方式安装 ZFS 根文件系统并从中进行引导:

基于 SPARC 或基于 x86 的系统安装了 ZFS 根文件系统或迁移到 ZFS 根文件系统后,系统将从 ZFS 根文件系统自动引导。有关引导方面的变化的更多信息,请参见从 ZFS 根文件系统引导

ZFS 安装功能

此 Solaris 发行版中提供了以下 ZFS 安装功能:

此发行版中不提供以下安装功能:

ZFS 支持对于 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 的要求

尝试安装具有 ZFS 根文件系统的系统或将 UFS 根文件系统迁移到 ZFS 根文件系统之前,请确保满足以下要求。

Oracle Solaris 发行版要求

您可以通过以下方式安装和引导 ZFS 根文件系统或迁移到 ZFS 根文件系统:

一般 ZFS 存储池要求

以下部分介绍 ZFS 根池空间和配置要求。

ZFS 存储池的磁盘空间要求

ZFS 根文件系统所需的最小可用池空间量大于 UFS 根文件系统所需的最小可用池空间量,因为交换设备和转储设备在 ZFS 根环境中必须是单独的设备。缺省情况下,交换和转储设备在 UFS 根文件系统中为同一设备。

系统中安装了 ZFS 根文件系统或升级为 ZFS 根文件系统时,交换区域和转储设备的大小取决于物理内存量。可引导的 ZFS 根文件系统的最小可用池空间量取决于物理内存量、可用的磁盘空间以及要创建的引导环境 (boot environment, BE) 数量。

检查 ZFS 存储池的以下磁盘空间要求:

ZFS 存储池配置要求

请查看以下 ZFS 存储池配置要求:

安装 ZFS 根文件系统(初始安装)

在此 Solaris 发行版中,您可以使用 Solaris 交互式文本安装程序创建包含可引导的 ZFS 根文件系统的 ZFS 存储池来执行初始安装。如果您具有要用于 ZFS 根文件系统的现有 ZFS 存储池,则必须使用 Oracle Solaris Live Upgrade 将现有 UFS 根文件系统迁移到现有 ZFS 存储池中的 ZFS 根文件系统。有关更多信息,请参见将 UFS 根文件系统迁移到 ZFS 根文件系统 (Oracle Solaris Live Upgrade)

如果要在完成 ZFS 根文件系统的初始安装后配置区域,并且计划修补或升级系统,请参见使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统 (Solaris 10 10/08)使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统(最低Solaris 10 5/09)

如果系统上已经具有 ZFS 存储池,则会通过以下消息确认。然而,这些池保持不动,除非您选择现有池中的磁盘来创建新存储池。


There are existing ZFS pools available on this system.  However, they can only be upgraded 
using the Live Upgrade tools.  The following screens will only allow you to install a ZFS root system, 
not upgrade one.

注意 – 注意 –

如果为新池选择现有池的任何磁盘,则现有池将被销毁。


在开始初始安装以创建 ZFS 存储池之前,请参见ZFS 支持对于 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 的要求


示例 5–1 可引导的 ZFS 根文件系统的初始安装

Solaris 交互式文本安装过程与先前的 Solaris 发行版安装过程基本相同,区别在于系统会提示您创建 UFS 还是 ZFS 根文件系统。在此发行版中,UFS 仍为缺省文件系统。如果选择 ZFS 根文件系统,系统会提示您创建 ZFS 存储池。安装 ZFS 根文件系统的步骤如下:

  1. 选择 Solaris 交互式安装方法,因为 Solaris Flash 安装不可用于创建可引导的 ZFS 根文件系统。但是,您可以创建在 JumpStart 安装期间要使用的 ZFS Flash 归档文件。有关更多信息,请参见安装 ZFS 根文件系统(Oracle Solaris Flash 归档文件安装)

    从 Solaris 10 10/08 发行版开始,只要已安装最低 Solaris 10 10/08 发行版,就可以将 UFS 根文件系统迁移到 ZFS 根文件系统。有关迁移到 ZFS 根文件系统的更多信息,请参见将 UFS 根文件系统迁移到 ZFS 根文件系统 (Oracle Solaris Live Upgrade)

  2. 要创建 ZFS 根文件系统,请选择 ZFS 选项。例如:


    Choose Filesystem Type
    
      Select the filesystem to use for your Solaris installation
    
    
                [ ] UFS
                [X] ZFS
  3. 在选择要安装的软件之后,系统将提示您选择用来创建 ZFS 存储池的磁盘。该屏幕与先前的 Solaris 发行版的屏幕类似。


    Select Disks
    
      On this screen you must select the disks for installing Solaris software.
      Start by looking at the Suggested Minimum field; this value is the
      approximate space needed to install the software you've selected. For ZFS,
      multiple disks will be configured as mirrors, so the disk you choose, or the
      slice within the disk must exceed the Suggested Minimum value.
      NOTE: ** denotes current boot disk
    
      Disk Device                                              Available Space
      =============================================================================
      [X]    c1t0d0                                           69994 MB  (F4 to edit)
      [ ]    c1t1d0                                           69994 MB
      [-]    c1t2d0                                               0 MB
      [-]    c1t3d0                                               0 MB
    
                                      Maximum Root Size:  69994 MB
                                      Suggested Minimum:   8279 MB

    您可以选择一个或多个用于 ZFS 根池的磁盘。如果选择两个磁盘,则会为根池设置镜像双磁盘配置。双磁盘或三磁盘镜像池为最佳。如果您有八个磁盘并选择了所有磁盘,则这八个磁盘将作为一个大的镜像用于根池。此配置并非最佳。还可以选择在完成初始安装后创建镜像根池。不支持对根池的 RAID-Z 池配置。有关配置 ZFS 存储池的更多信息,请参见ZFS 存储池的复制功能

  4. 要选择两个磁盘来创建镜像的根池,请使用光标控制键选择第二个磁盘。在以下示例中,选择了 c1t1d0c1t2d0 用作根池磁盘。这两个磁盘都必须具有 SMI 标签和分片 0。如果磁盘没有 SMI 标签或不包含分片,则必须退出安装程序,使用 format 实用程序对磁盘重新进行标记和分区,然后重新启动安装程序。


    Select Disks
    
      On this screen you must select the disks for installing Solaris software.
      Start by looking at the Suggested Minimum field; this value is the
      approximate space needed to install the software you've selected. For ZFS,
      multiple disks will be configured as mirrors, so the disk you choose, or the
      slice within the disk must exceed the Suggested Minimum value.
      NOTE: ** denotes current boot disk
    
      Disk Device                                              Available Space
      =============================================================================
      [X]    c1t0d0                                           69994 MB  
      [X]    c1t1d0                                           69994 MB  (F4 to edit)
      [-]    c1t2d0                                               0 MB
      [-]    c1t3d0                                               0 MB
    
                                      Maximum Root Size:  69994 MB
                                      Suggested Minimum:   8279 MB

    如果可用空间栏显示 0 MB,则该磁盘很有可能具有 EFI 标签。如果您想使用带 EFI 标签的磁盘,则需要退出安装程序,使用 format -e 命令用 SMI 标签重新标记该磁盘,然后重新启动安装程序。

    如果在安装期间没有创建镜像根池,您可以在安装之后轻松创建。有关信息,请参见如何创建镜像根池(安装后)

  5. 为 ZFS 存储池选择了一个或多个磁盘后,将出现一个屏幕,显示类似如下的内容:


    Configure ZFS Settings
    
      Specify the name of the pool to be created from the disk(s) you have chosen.
      Also specify the name of the dataset to be created within the pool that is
      to be used as the root directory for the filesystem.
    
                  ZFS Pool Name: rpool                                   
          ZFS Root Dataset Name: s10s_u9wos_08
          ZFS Pool Size (in MB): 69995
      Size of Swap Area (in MB): 2048
      Size of Dump Area (in MB): 1536
            (Pool size must be between 6231 MB and 69995 MB)
    
                             [X] Keep / and /var combined
                             [ ] Put /var on a separate dataset

    在此屏幕中,您可以通过在各项之间移动光标控制键,然后使用新值替换缺省值来更改 ZFS 池名称、数据集名称、池大小以及交换和转储设备大小。或者,您可以接受缺省值。另外,您可以修改创建和挂载 /var 文件系统的方式。

    在此示例中,根数据集名称更改为 zfsBE


                  ZFS Pool Name: rpool
          ZFS Root Dataset Name: zfsBE                                   
          ZFS Pool Size (in MB): 69995
      Size of Swap Area (in MB): 2048
      Size of Dump Area (in MB): 1536
            (Pool size must be between 6231 MB and 69995 MB)
    
                             [X] Keep / and /var combined
                             [ ] Put /var on a separate dataset
  6. 您可以在此最后的安装屏幕中更改安装配置文件。例如:


    Profile
    
      The information shown below is your profile for installing Solaris software.
      It reflects the choices you've made on previous screens.
    
      ============================================================================
    
                    Installation Option: Initial
                            Boot Device: c1t0d0
                  Root File System Type: ZFS
                        Client Services: None
    
                                Regions: North America
                          System Locale: C ( C )
    
                               Software: Solaris 10, Entire Distribution
                              Pool Name: rpool
                  Boot Environment Name: zfsBE
                              Pool Size: 69995 MB
                        Devices in Pool: c1t0d0
                                         c1t1d0
  7. 安装完成后,查看生成的 ZFS 存储池和文件系统信息。例如:


    # zpool status
      pool: rpool
     state: ONLINE
     scrub: none requested
    config:
    
            NAME          STATE     READ WRITE CKSUM
            rpool         ONLINE       0     0     0
              mirror-0    ONLINE       0     0     0
                c1t0d0s0  ONLINE       0     0     0
                c1t1d0s0  ONLINE       0     0     0
    
    errors: No known data errors
    # zfs list
    NAME                USED  AVAIL  REFER  MOUNTPOINT
    rpool              8.03G  58.9G    96K  /rpool
    rpool/ROOT         4.47G  58.9G    21K  legacy
    rpool/ROOT/zfsBE   4.47G  58.9G  4.47G  /
    rpool/dump         1.50G  58.9G  1.50G  -
    rpool/export         44K  58.9G    23K  /export
    rpool/export/home    21K  58.9G    21K  /export/home
    rpool/swap         2.06G  61.0G    16K  -

    zfs list 输出样例标识了根池组件,例如 rpool/ROOT 目录,该目录在缺省情况下不可访问。

  8. 要在同一存储池中创建其他 ZFS 引导环境 (boot environment, BE),可以使用 lucreate 命令。在以下示例中,创建了名为 zfs2BE 的新 BE。当前 BE 命名为 zfsBE,如 zfs list 输出所示。但是,lustatus 输出不会确认当前 BE,直到新 BE 创建完成。


    # lustatus
    ERROR: No boot environments are configured on this system
    ERROR: cannot determine list of all boot environment names

    如果在同一池中创建新 ZFS BE,请使用类似如下的语法:


    # lucreate -n zfs2BE
    INFORMATION: The current boot environment is not named - assigning name <zfsBE>.
    Current boot environment is named <zfsBE>.
    Creating initial configuration for primary boot environment <zfsBE>.
    The device </dev/dsk/c1t0d0s0> is not a root device for any boot environment; cannot get BE ID.
    PBE configuration successful: PBE name <zfsBE> PBE Boot Device </dev/dsk/c1t0d0s0>.
    Comparing source boot environment <zfsBE> file systems with the file 
    system(s) you specified for the new boot environment. Determining which 
    file systems should be in the new boot environment.
    Updating boot environment description database on all BEs.
    Updating system configuration files.
    Creating configuration for boot environment <zfs2BE>.
    Source boot environment is <zfsBE>.
    Creating boot environment <zfs2BE>.
    Cloning file systems from boot environment <zfsBE> to create boot environment <zfs2BE>.
    Creating snapshot for <rpool/ROOT/zfsBE> on <rpool/ROOT/zfsBE@zfs2BE>.
    Creating clone for <rpool/ROOT/zfsBE@zfs2BE> on <rpool/ROOT/zfs2BE>.
    Setting canmount=noauto for </> in zone <global> on <rpool/ROOT/zfs2BE>.
    Population of boot environment <zfs2BE> successful.
    Creation of boot environment <zfs2BE> successful.

    在同一池内创建 ZFS BE 时,使用 ZFS 克隆和快照功能可立即创建 BE。有关使用 Oracle Solaris Live Upgrade 进行 ZFS 根迁移的更多详细信息,请参见将 UFS 根文件系统迁移到 ZFS 根文件系统 (Oracle Solaris Live Upgrade)

  9. 接下来,验证新引导环境。例如:


    # lustatus
    Boot Environment           Is       Active Active    Can    Copy      
    Name                       Complete Now    On Reboot Delete Status    
    -------------------------- -------- ------ --------- ------ ----------
    zfsBE                      yes      yes    yes       no     -         
    zfs2BE                     yes      no     no        yes    -        
    # zfs list
    NAME                      USED  AVAIL  REFER  MOUNTPOINT
    rpool                    8.03G  58.9G    97K  /rpool
    rpool/ROOT               4.47G  58.9G    21K  legacy
    rpool/ROOT/zfs2BE         116K  58.9G  4.47G  /
    rpool/ROOT/zfsBE         4.47G  58.9G  4.47G  /
    rpool/ROOT/zfsBE@zfs2BE  75.5K      -  4.47G  -
    rpool/dump               1.50G  58.9G  1.50G  -
    rpool/export               44K  58.9G    23K  /export
    rpool/export/home          21K  58.9G    21K  /export/home
    rpool/swap               2.06G  61.0G    16K  -
  10. 要从备用 BE 引导,请使用 luactivate 命令。在基于 SPARC 的系统上激活 BE 后,如果引导设备包含 ZFS 存储池,请使用 boot - L 命令确定可用 BE。从基于 x86 的系统引导时,请从 GRUB 菜单中确定要引导的 BE。

    例如,在基于 SPARC 的系统上,可使用 boot - L 命令显示可用的 BE 列表。要从新 BE zfs2BE 引导,请选择选项 2。然后,键入显示的 boot -Z 命令。


    ok boot -L
    Executing last command: boot -L                                       
    Boot device: /pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0  File and args: -L
    1 zfsBE
    2 zfs2BE
    Select environment to boot: [ 1 - 2 ]: 2
    
    To boot the selected entry, invoke:
    boot [<root-device>] -Z rpool/ROOT/zfs2BE
    ok boot -Z rpool/ROOT/zfs2BE
    

有关引导 ZFS 文件系统的更多信息,请参见从 ZFS 根文件系统引导


Procedure如何创建镜像根池(安装后)

如果在安装期间没有创建 ZFS 镜像根池,您可以在安装之后轻松创建。

有关替换根池中的磁盘的信息,请参见如何替换 ZFS 根池中的磁盘

  1. 显示当前根池的状态。


    # zpool status rpool
      pool: rpool
     state: ONLINE
     scrub: none requested
    config:
    
            NAME        STATE     READ WRITE CKSUM
            rpool       ONLINE       0     0     0
              c1t0d0s0  ONLINE       0     0     0
    
    errors: No known data errors
  2. 附加第二个磁盘,以配置镜像根池。


    # zpool attach rpool c1t0d0s0 c1t1d0s0
    Please be sure to invoke installboot(1M) to make 'c1t1d0s0' bootable.
    Make sure to wait until resilver is done before rebooting.
  3. 查看根池状态,确认重新同步已完成。


    # zpool status rpool
      pool: rpool
     state: ONLINE
    status: One or more devices is currently being resilvered.  The pool will
            continue to function, possibly in a degraded state.
    action: Wait for the resilver to complete.
     scrub: resilver in progress for 0h1m, 24.26% done, 0h3m to go
    config:
    
            NAME          STATE     READ WRITE CKSUM
            rpool         ONLINE       0     0     0
              mirror-0    ONLINE       0     0     0
                c1t0d0s0  ONLINE       0     0     0
                c1t1d0s0  ONLINE       0     0     0  3.18G resilvered
    
    errors: No known data errors

    在上面的输出中,重新同步过程未完成。当您看到类似如下的消息时,说明重新同步已完成。


    scrub: resilver completed after 0h10m with 0 errors on Thu Mar 11 11:27:22 2010
  4. 重新同步完成后,对第二个磁盘应用根块。


    sparc# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0
    

    x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0
    
  5. 验证您是否可以从第二个磁盘成功引导。

  6. 通过使用 SPARC 引导 PROM 中的 eeprom 命令和 setenv 命令,将系统设置为从新磁盘自动引导,或者重新配置 PC BIOS。

安装 ZFS 根文件系统(Oracle Solaris Flash 归档文件安装)

从 Solaris 10 10/09 发行版开始,可以在运行 UFS 根文件系统或 ZFS 根文件系统的系统中创建 Flash 归档文件。ZFS 根池的 Flash 归档文件包含整个池分层结构,但交换卷和转储卷以及任何已排除的数据集除外。交换卷和转储卷是在安装 Flash 归档文件时创建的。您可以按如下方式使用 Flash 归档文件安装方法:

在考虑使用 ZFS Flash 归档文件安装系统之前,请先查看以下限制:

在主系统上安装或升级到最低 Solaris 10 10/09 发行版后,您可以创建用于安装目标系统的 ZFS Flash 归档文件。基本过程如下:

使用 Flash 归档文件安装 ZFS 根池时,支持以下归档选项:

安装完 ZFS Flash 归档文件后,将按如下方式配置系统:


示例 5–2 使用 ZFS Flash 归档文件安装系统

在主系统上安装或升级到最低 Solaris 10 10/09 发行版后,创建 ZFS 根池的 Flash 归档文件。例如:


# flarcreate -n zfsBE zfs10upflar
Full Flash
Checking integrity...
Integrity OK.
Running precreation scripts...
Precreation scripts done.
Determining the size of the archive...
The archive will be approximately 4.94GB.
Creating the archive...
Archive creation complete.
Running postcreation scripts...
Postcreation scripts done.

Running pre-exit scripts...
Pre-exit scripts done.

在要用作安装服务器的系统上,创建用于安装任何系统的 JumpStart 配置文件。例如,以下配置文件用于安装 zfs10upflar 归档文件。


install_type flash_install
archive_location nfs system:/export/jump/zfs10upflar
partitioning explicit
pool rpool auto auto auto mirror c0t1d0s0 c0t0d0s0

安装 ZFS 根文件系统(Oracle Solaris JumpStart 安装)

可以创建 JumpStart 配置文件以安装 ZFS 根文件系?或 UFS 根文件系统。

ZFS 特定配置文件必须包含新的 pool 关键字。pool 关键字可安装一个新的根池,并在缺省情况下创建一个新的引导环境。您可以使用 bootenv installbe 关键字以及 benamedataset 选项提供引导环境的名称并创建单独的 /var 数据集。

有关使用 JumpStart 功能的一般信息,请参见《Oracle Solaris 10 9/10 安装指南:自定义 JumpStart 和高级安装》

如果要在完成 ZFS 根文件系统的 JumpStart 安装后配置区域,并且计划修补或升级系统,请参见使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统 (Solaris 10 10/08)使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统(最低Solaris 10 5/09)

ZFS 的 JumpStart 关键字

ZFS 特定配置文件中允许使用以下关键字:

auto

自动指定池、交换卷或转储卷的片大小。将会检查磁盘的大小以验证是否可以容纳最小大小。在给定约束条件下(如磁盘大小、保留的片大小等),如果可以容纳最小大小,则会分配可能的最大池大小。

例如,如果指定了 c0t0d0s0,则在指定 allauto 关键字时会创建尽可能大的根池片。或者,可以指定特定大小的片、交换卷或转储卷。

用于 ZFS 根池时,auto 关键字的工作方式与 all 关键字类似,因为池没有未使用的磁盘空间。

bootenv

标识引导环境特征。

使用以下 bootenv 关键字语法可创建可引导的 ZFS 根环境:

bootenv installbe bename BE-name [ dataset mount-point]

installbe

创建一个由 bename 选项和 BE-name 项标识的新 BE,然后安装该 BE。

bename BE-name

标识要安装的 BE-name

如果 bename 没有与 pool 关键字一起使用,则会创建缺省 BE。

dataset mount-point

使用可选的 dataset 关键字可标识与根数据集分离的 /var 数据集。mount-point 值当前仅限于 /var。例如,单独的 /var 数据集的 bootenv 语法行将类似如下:


bootenv installbe bename zfsroot dataset /var
pool

定义要创建的新根池。必须提供以下关键字语法:


pool poolname poolsize swapsize dumpsize vdevlist
poolname

标识要创建的池的名称。将会使用指定的池 size 和指定的物理设备 (vdev) 创建池。poolname 值不应标识现有池的名称,否则将会覆写现有池。

poolsize

指定要创建的池的大小。该值可以为 autoexisting。在给定的约束条件(如磁盘大小、保留的片大小等)下,auto 值分配尽可能大的池大小。existing 值表示基于该名称的现有片的边界已被保留且未被覆写。除非通过 g(表示 GB)指定,否则大小采用 MB 为单位。

swapsize

指定要创建的交换卷的大小。auto值表示使用缺省的交换大小。您可以使用 size 值指定大小。除非通过 g(表示 GB)指定,否则大小以 MB 为单位。

dumpsize

指定要创建的转储卷的大小。auto值表示使用缺省的交换大小。您可以使用 size 值指定大小。除非通过 g(表示 GB)指定,否则大小采用 MB 为单位。

vdevlist

指定要用于创建池的一个或多个设备。vdevlist 的格式与 zpool create 命令的格式相同。此时,在指定多个设备时仅支持镜像配置。对于根池,vdevlist 中的设备必须是片。any 值表示安装软件会选择一个合适的设备。

您可以镜像任意多个磁盘,但创建的池大小由指定磁盘中最小的一个确定。有关创建镜像存储池的更多信息,请参见镜像存储池配置

ZFS 的 JumpStart 配置文件示例

本节提供了 ZFS 特定的 JumpStart 配置文件示例。

以下配置文件在标识为 pool newpool 的新池(其大小由 auto 关键字自动确定为指定磁盘的大小)中,通过 install_type initial_install 执行指定的初始安装。在磁盘镜像配置中(使用 mirror 关键字,磁盘指定为 c0t0d0s0c0t1d0s0),交换区域和转储设备的大小通过 auto 关键字自动确定。使用 bootenv 关键字将引导环境特征设置为通过关键字 installbe 安装新 BE,并创建名为 s10-xxbename


install_type initial_install
pool newpool auto auto auto mirror c0t0d0s0 c0t1d0s0
bootenv installbe bename s10-xx

以下配置文件在称为 newpool(大小为 80 GB)的新池中,通过 SUNWCall 元簇的关键字 install_type initial_install 执行初始安装。该池是在由任意两个可用设备(足够大,可创建 80 GB 的池)组成的镜像配置中使用 2 GB 的交换卷和 2 GB 的转储卷创建的。如果两个这样的设备不可用,则安装会失败。使用 bootenv 关键字将引导环境特征设置为通过关键字 installbe 安装新 BE,并创建名为 s10–xxbename


install_type initial_install
cluster SUNWCall
pool newpool 80g 2g 2g mirror any any
bootenv installbe bename s10-xx

JumpStart 安装语法确保您能在同样包括 ZFS 根池的磁盘上保留或创建 UFS 文件系统。对于生产系统,不推荐使用该配置,但是该配置可以用于小型系统(例如膝上型电脑)上的转换或迁移。

ZFS 的 JumpStart 问题

开始可引导的 ZFS 根文件系统的 JumpStart 安装之前,请考虑以下问题:

将 UFS 根文件系统迁移到 ZFS 根文件系统 (Oracle Solaris Live Upgrade)

与 UFS 组件相关的 Oracle Solaris Live Upgrade 功能仍然可用,并且其工作方式与在先前的 Solaris 发行版中一样。

另外还提供了下列功能:

有关 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 功能的详细信息,请参见《Oracle Solaris 10 9/10 安装指南:Solaris Live 升级和升级规划》

将 UFS 根文件系统迁移到 ZFS 根文件系统的基本过程如下:

有关 ZFS 和 Oracle Solaris Live Upgrade 要求的信息,请参见ZFS 支持对于 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 的要求

Oracle Solaris Live Upgrade 的 ZFS 迁移问题

使用 Oracle Solaris Live Upgrade 将 UFS 根文件系统迁移到 ZFS 根文件系统之前,请查看以下问题:

使用 Oracle Solaris Live Upgrade 迁移到 ZFS 根文件系统(没有区域)

以下示例说明如何将 UFS 根文件系统迁移到 ZFS 根文件系统。

如果要迁移或更新具有区域的系统,请参见以下各节:


示例 5–3 使用 Oracle Solaris Live Upgrade 将 UFS 根文件系统迁移到 ZFS 根文件系统

以下示例说明如何从 UFS 根文件系统创建 ZFS 根文件系统的 BE。包含 UFS 根文件系统的当前 BE ufsBE-c 选项标识。如果不包括可选的 -c 选项,则当前 BE 名称将缺省为设备名称。新 BE zfsBE-n 选项标识。在执行 lucreate 操作之前,ZFS 存储池必须存在。

必须使用片而不是整个磁盘创建 ZFS 存储池,才能使 ZFS 存储池可升级和可引导。创建新池之前,请确保要用于池中的磁盘具有 SMI (VTOC) 标签而不是 EFI 标签。如果使用 SMI 标签重新标记磁盘,请确保标记过程未更改分区方案。在大多数情况下,所有磁盘容量应位于打算用于根池的片中。


# zpool create rpool mirror c1t2d0s0 c2t1d0s0
# lucreate -c ufsBE -n zfsBE -p rpool
Analyzing system configuration.
No name for current boot environment.
Current boot environment is named <ufsBE>.
Creating initial configuration for primary boot environment <ufsBE>.
The device </dev/dsk/c1t0d0s0> is not a root device for any boot environment; cannot get BE ID.
PBE configuration successful: PBE name <ufsBE> PBE Boot Device </dev/dsk/c1t0d0s0>.
Comparing source boot environment <ufsBE> file systems with the file 
system(s) you specified for the new boot environment. Determining which 
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Updating system configuration files.
The device </dev/dsk/c1t2d0s0> is not a root device for any boot environment; cannot get BE ID.
Creating configuration for boot environment <zfsBE>.
Source boot environment is <ufsBE>.
Creating boot environment <zfsBE>.
Creating file systems on boot environment <zfsBE>.
Creating <zfs> file system for </> in zone <global> on <rpool/ROOT/zfsBE>.
Populating file systems on boot environment <zfsBE>.
Checking selection integrity.
Integrity check OK.
Populating contents of mount point </>.
Copying.
Creating shared file system mount points.
Creating compare databases for boot environment <zfsBE>.
Creating compare database for file system </rpool/ROOT>.
Creating compare database for file system </>.
Updating compare databases on boot environment <zfsBE>.
Making boot environment <zfsBE> bootable.
Creating boot_archive for /.alt.tmp.b-qD.mnt
updating /.alt.tmp.b-qD.mnt/platform/sun4u/boot_archive
Population of boot environment <zfsBE> successful.
Creation of boot environment <zfsBE> successful.

lucreate 操作完成后,使用 lustatus 命令查看 BE 状态。例如:


# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
ufsBE                      yes      yes    yes       no     -         
zfsBE                      yes      no     no        yes    -         

然后,查看 ZFS 组件列表。例如:


# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
rpool                 7.17G  59.8G  95.5K  /rpool
rpool/ROOT            4.66G  59.8G    21K  /rpool/ROOT
rpool/ROOT/zfsBE      4.66G  59.8G  4.66G  /
rpool/dump               2G  61.8G    16K  -
rpool/swap             517M  60.3G    16K  -

接下来,使用 luactivate 命令激活新 ZFS BE。例如:


# luactivate zfsBE
A Live Upgrade Sync operation will be performed on startup of boot environment <zfsBE>.

**********************************************************************

The target boot environment has been activated. It will be used when you 
reboot. NOTE: You MUST NOT USE the reboot, halt, or uadmin commands. You 
MUST USE either the init or the shutdown command when you reboot. If you 
do not use either init or shutdown, the system will not boot using the 
target BE.

**********************************************************************
.
.
.
Modifying boot archive service
Activation of boot environment <zfsBE> successful.

接下来,将系统重新引导至 ZFS BE。


# init 6

确认 ZFS BE 是否处于活动状态。


# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
ufsBE                      yes      no     no        yes    -         
zfsBE                      yes      yes    yes       no     -      

如果切换回 UFS BE,必须重新导入在引导 ZFS BE 时创建的所有 ZFS 存储池,因为它们在 UFS BE 中不会自动可用。

如果不再需要 UFS BE,可以使用 ludelete 命令将其删除。



示例 5–4 使用 Oracle Solaris Live Upgrade 从 ZFS BE 中创建 ZFS BE

在同一池中从 ZFS BE 创建 ZFS BE 非常快捷,因为该操作使用 ZFS 快照和克隆功能。如果当前 BE 驻留在同一 ZFS 池上,则可以省略 -p 选项。

如果有多个 ZFS BE,请执行以下操作来选择从哪个 BE 引导:

有关更多信息,请参见示例 5–9


# lucreate -n zfs2BE
Analyzing system configuration.
No name for current boot environment.
INFORMATION: The current boot environment is not named - assigning name <zfsBE>.
Current boot environment is named <zfsBE>.
Creating initial configuration for primary boot environment <zfsBE>.
The device </dev/dsk/c1t0d0s0> is not a root device for any boot environment; cannot get BE ID.
PBE configuration successful: PBE name <zfsBE> PBE Boot Device </dev/dsk/c1t0d0s0>.
Comparing source boot environment <zfsBE> file systems with the file 
system(s) you specified for the new boot environment. Determining which 
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Updating system configuration files.
Creating configuration for boot environment <zfs2BE>.
Source boot environment is <zfsBE>.
Creating boot environment <zfs2BE>.
Cloning file systems from boot environment <zfsBE> to create boot environment <zfs2BE>.
Creating snapshot for <rpool/ROOT/zfsBE> on <rpool/ROOT/zfsBE@zfs2BE>.
Creating clone for <rpool/ROOT/zfsBE@zfs2BE> on <rpool/ROOT/zfs2BE>.
Setting canmount=noauto for </> in zone <global> on <rpool/ROOT/zfs2BE>.
Population of boot environment <zfs2BE> successful.
Creation of boot environment <zfs2BE> successful.


示例 5–5 升级 ZFS BE (luupgrade)

您可以使用其他软件包或修补程序升级 ZFS BE。

基本过程如下:


# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
zfsBE                      yes      no     no        yes    -         
zfs2BE                     yes      yes    yes       no     -   
# luupgrade -p -n zfsBE -s /net/system/export/s10up/Solaris_10/Product SUNWchxge
Validating the contents of the media </net/install/export/s10up/Solaris_10/Product>.
Mounting the BE <zfsBE>.
Adding packages to the BE <zfsBE>.

Processing package instance <SUNWchxge> from </net/install/export/s10up/Solaris_10/Product>

Chelsio N110 10GE NIC Driver(sparc) 11.10.0,REV=2006.02.15.20.41
Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.

This appears to be an attempt to install the same architecture and
version of a package which is already installed.  This installation
will attempt to overwrite this package.

Using </a> as the package base directory.
## Processing package information.
## Processing system information.
   4 package pathnames are already properly installed.
## Verifying package dependencies.
## Verifying disk space requirements.
## Checking for conflicts with packages already installed.
## Checking for setuid/setgid programs.

This package contains scripts which will be executed with super-user
permission during the process of installing this package.

Do you want to continue with the installation of <SUNWchxge> [y,n,?] y
Installing Chelsio N110 10GE NIC Driver as <SUNWchxge>

## Installing part 1 of 1.
## Executing postinstall script.

Installation of <SUNWchxge> was successful.
Unmounting the BE <zfsBE>.
The package add to the BE <zfsBE> completed.

使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统 (Solaris 10 10/08)

可以使用 Oracle Solaris Live Upgrade 迁移具有区域的系统,但在 Solaris 10 10/08 发行版中支持的配置有限。如果安装或升级到最低 Solaris 10 5/09 发行版,可支持更多区域配置。有关更多信息,请参见使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统(最低Solaris 10 5/09)

本节介绍如何配置和安装具有区域的系统,以便使用 Oracle Solaris Live Upgrade 升级和修补该系统。如果要迁移到没有区域的 ZFS 根文件系统,请参见使用 Oracle Solaris Live Upgrade 迁移到 ZFS 根文件系统(没有区域)

如果要在 Solaris 10 10/08 发行版中迁移具有区域的系统或配置具有区域的系统,请查看以下过程:

按照建议的过程在具有 ZFS 根文件系统的系统上设置区域,以确保可以在该系统上使用 Oracle Solaris Live Upgrade。

Procedure如何将 UFS 上具有区域根的 UFS 根文件系统迁移到 ZFS 根文件系统 (Solaris 10 10/08)

此过程解释如何将安装了区域的 UFS 根文件系统迁移到 ZFS 根文件系统,以及如何升级或修补的 ZFS 区域根配置。

在后面的步骤中,示例池名称为 rpool,活动引导环境的示例名称为 s10BE*

  1. 如果系统正在运行先前的 Solaris 10 发行版,请将其升级到 Solaris 10 10/08 发行版。

    有关对运行 Solaris 10 发行版的系统进行升级的更多信息,请参见《Oracle Solaris 10 9/10 安装指南:Solaris Live 升级和升级规划》

  2. 创建根池。


    # zpool create rpool mirror c0t1d0 c1t1d0
    

    有关根池要求的信息,请参见ZFS 支持对于 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 的要求

  3. 确认已引导 UFS 环境中的区域。

  4. 创建新 ZFS 引导环境。


    # lucreate -n s10BE2 -p rpool
    

    此命令将为新引导环境在根池中建立数据集并将当前引导环境(包括区域)复制到这些数据集。

  5. 激活新 ZFS 引导环境。


    # luactivate s10BE2
    

    现在,系统正在运行 ZFS 根文件系统,但 UFS 上的区域根仍在 UFS 根文件系统中。需要执行后续步骤将 UFS 区域完全迁移到支持的 ZFS 配置。

  6. 重新引导系统。


    # init 6
    
  7. 将区域迁移到 ZFS BE。

    1. 引导区域。

    2. 在池中创建另一个 ZFS BE。


      # lucreate s10BE3
      
    3. 激活新引导环境。


      # luactivate s10BE3
      
    4. 重新引导系统。


      # init 6
      

      此步骤用于验证是否已引导 ZFS BE 和区域。

  8. 解决任何潜在的挂载点问题。

    由于 Oracle Solaris Live Upgrade 中的错误,非活动引导环境可能无法引导,因为引导环境中的 ZFS 数据集或区域的 ZFS 数据集有无效的挂载点。

    1. 查看 zfs list 输出。

      查找不正确的临时挂载点。例如:


      # zfs list -r -o name,mountpoint rpool/ROOT/s10u6
      
      NAME                               MOUNTPOINT
      rpool/ROOT/s10u6                   /.alt.tmp.b-VP.mnt/
      rpool/ROOT/s10u6/zones             /.alt.tmp.b-VP.mnt//zones
      rpool/ROOT/s10u6/zones/zonerootA   /.alt.tmp.b-VP.mnt/zones/zonerootA

      根 ZFS BE (rpool/ROOT/s10u6) 的挂载点应为 /

    2. 重置 ZFS BE 及其数据集的挂载点。

      例如:


      # zfs inherit -r mountpoint rpool/ROOT/s10u6
      # zfs set mountpoint=/ rpool/ROOT/s10u6
      
    3. 重新引导系统。

      当提供选项来引导特定的引导环境时(在 GRUB 菜单中或 OpenBoot PROM 提示符下),请选择刚刚更正其挂载点的引导环境。

Procedure如何配置 ZFS 上具有区域根的 ZFS 根文件系统 (Solaris 10 10/08)

此过程解释如何设置 ZFS 根文件系统和可以进行升级或修补的 ZFS 区域根配置。在此配置中,ZFS 区域根创建为 ZFS 数据集。

在后面的步骤中,示例池名称为 rpool,活动引导环境的示例名称为 s10BE。区域数据集的名称可以为任何合法的数据集名称。在以下示例中,区域数据集名称为 zones

  1. 使用 Solaris 交互式文本安装程序或 Solaris JumpStart 安装方法安装具有 ZFS 根的系统。

    有关使用初始安装方法或 Solaris JumpStart 方法安装 ZFS 根文件系统的信息,请参见安装 ZFS 根文件系统(初始安装)安装 ZFS 根文件系统(Oracle Solaris JumpStart 安装)

  2. 从新创建的根池引导系统。

  3. 创建数据集以用于对区域根进行分组。

    例如:


    # zfs create -o canmount=noauto rpool/ROOT/s10BE/zones
    

    canmount 属性的值设置为 noauto 可防止通过 Oracle Solaris Live Upgrade 显式操作和系统启动代码以外的其他方式挂载数据集。

  4. 挂载新创建的区域数据集。


    # zfs mount rpool/ROOT/s10BE/zones
    

    数据集挂载在 /zones

  5. 为每个区域根创建并挂载数据集。


    # zfs create -o canmount=noauto rpool/ROOT/s10BE/zones/zonerootA
    # zfs mount rpool/ROOT/s10BE/zones/zonerootA
    
  6. 在区域根目录上设置适当的权限。


    # chmod 700 /zones/zonerootA
    
  7. 配置区域,如下所示设置区域路径:


    # zonecfg -z zoneA
        zoneA: No such zone configured
        Use 'create' to begin configuring a new zone.
        zonecfg:zoneA> create
        zonecfg:zoneA> set zonepath=/zones/zonerootA
    

    可通过使用以下语法在引导系统时自动引导区域:


    zonecfg:zoneA> set autoboot=true
    
  8. 安装区域。


    # zoneadm -z zoneA install
    
  9. 引导区域。


    # zoneadm -z zoneA boot
    

Procedure如何升级或修补 ZFS 上具有区域根的 ZFS 根文件系统 (Solaris 10 10/08)

当您需要升级或修补 ZFS 上具有区域根的 ZFS 根文件系统时,请使用此过程。这些更新可以是对系统进行升级,也可以是应用一些修补程序。

在后面的步骤中,newBE 为升级或修补的引导环境的示例名称。

  1. 创建引导环境以进行升级或修补。


    # lucreate -n newBE
    

    将克隆现有引导环境,包括所有区域。将为原始引导环境中的每个数据集创建一个数据集。将在与当前根池相同的池中创建新数据集。

  2. 选择以下操作之一来升级系统或将修补程序应用到新引导环境:

    • 升级系统。


      # luupgrade -u -n newBE -s /net/install/export/s10u7/latest
      

      其中 -s 选项指定 Solaris 安装介质的位置。

    • 将修补程序应用到新引导环境。


       # luupgrade -t -n newBE -t -s /patchdir 139147-02 157347-14
      
  3. 激活新引导环境。


    # luactivate newBE
    
  4. 从新激活的引导环境引导。


    # init 6
    
  5. 解决任何潜在的挂载点问题。

    由于 Oracle Solaris Live Upgrade 功能中的错误,非活动引导环境可能无法引导,因为引导环境中的 ZFS 数据集或区域的 ZFS 数据集有无效的挂载点。

    1. 查看 zfs list 输出。

      查找不正确的临时挂载点。例如:


      # zfs list -r -o name,mountpoint rpool/ROOT/newBE
      
      NAME                               MOUNTPOINT
      rpool/ROOT/newBE                   /.alt.tmp.b-VP.mnt/
      rpool/ROOT/newBE/zones             /.alt.tmp.b-VP.mnt/zones
      rpool/ROOT/newBE/zones/zonerootA   /.alt.tmp.b-VP.mnt/zones/zonerootA

      根 ZFS BE (rpool/ROOT/newBE) 的挂载点应为 /

    2. 重置 ZFS BE 及其数据集的挂载点。

      例如:


      # zfs inherit -r mountpoint rpool/ROOT/newBE
      # zfs set mountpoint=/ rpool/ROOT/newBE
      
    3. 重新引导系统。

      当提供选项来引导特定的引导环境时(在 GRUB 菜单中或 OpenBoot PROM 提示符下),请选择刚刚更正其挂载点的引导环境。

使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统(最低Solaris 10 5/09)

从 Solaris 10 10/08 发行版开始,您可以使用 Oracle Solaris Live Upgrade 功能迁移或升级具有区域的系统。从 Solaris 10 5/09 发行版开始,Live Upgrade 支持更多稀疏根和完全根区域配置。

本节介绍从 Solaris 10 5/09 发行版开始,如何配置具有区域的系统,以便使用 Oracle Solaris Live Upgrade 升级和修补该系统。如果要迁移到没有区域的 ZFS 根文件系统,请参见使用 Oracle Solaris Live Upgrade 迁移到 ZFS 根文件系统(没有区域)

从 Solaris 10 5/09 发行版开始,对 ZFS 和区域使用 Oracle Solaris Live Upgrade 时,请考虑以下几点:

从 Solaris 10 5/09 发行版开始,如果您要迁移或配置具有区域的系统,请查看以下信息:

支持的 ZFS 和区域根配置信息(最低 Solaris 10 5/09)

在使用 Oracle Solaris Live Upgrade 迁移或升级具有区域的系统之前,需要先查看支持的区域配置。

Procedure如何创建具有 ZFS 根文件系统和区域根的 ZFS BE(最低 Solaris 10 5/09)

执行最低 Solaris 10 5/09 发行版的初始安装之后,使用此过程创建 ZFS 根文件系统。使用 luupgrade 功能将 ZFS 根文件系统升级到最低 Solaris 10 5/09 发行版之后,也可以使用此过程。然后,可以升级或修补使用此过程创建的 ZFS BE。

在后面的步骤中,Oracle Solaris 10 9/10 示例系统在 /rpool/zones 中具有 ZFS 根文件系统和区域根数据集。将创建名为 zfs2BE 的 ZFS BE,然后可以对其进行升级或修补。

  1. 查看现有的 ZFS 文件系统。


    # zfs list
    NAME                   USED  AVAIL  REFER  MOUNTPOINT
    rpool                 7.26G  59.7G    98K  /rpool
    rpool/ROOT            4.64G  59.7G    21K  legacy
    rpool/ROOT/zfsBE      4.64G  59.7G  4.64G  /
    rpool/dump            1.00G  59.7G  1.00G  -
    rpool/export            44K  59.7G    23K  /export
    rpool/export/home       21K  59.7G    21K  /export/home
    rpool/swap               1G  60.7G    16K  -
    rpool/zones            633M  59.7G   633M  /rpool/zones
  2. 确保安装和引导了区域。


    # zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP    
       0 global           running    /                              native   shared
       2 zfszone          running    /rpool/zones                   native   shared
  3. 创建 ZFS BE。


    # lucreate -n zfs2BE
    Analyzing system configuration.
    No name for current boot environment.
    INFORMATION: The current boot environment is not named - assigning name <zfsBE>.
    Current boot environment is named <zfsBE>.
    Creating initial configuration for primary boot environment <zfsBE>.
    The device </dev/dsk/c1t0d0s0> is not a root device for any boot environment; cannot get BE ID.
    PBE configuration successful: PBE name <zfsBE> PBE Boot Device </dev/dsk/c1t0d0s0>.
    Comparing source boot environment <zfsBE> file systems with the file 
    system(s) you specified for the new boot environment. Determining which 
    file systems should be in the new boot environment.
    Updating boot environment description database on all BEs.
    Updating system configuration files.
    Creating configuration for boot environment <zfs2BE>.
    Source boot environment is <zfsBE>.
    Creating boot environment <zfs2BE>.
    Cloning file systems from boot environment <zfsBE> to create boot environment <zfs2BE>.
    Creating snapshot for <rpool/ROOT/zfsBE> on <rpool/ROOT/zfsBE@zfs2BE>.
    Creating clone for <rpool/ROOT/zfsBE@zfs2BE> on <rpool/ROOT/zfs2BE>.
    Setting canmount=noauto for </> in zone <global> on <rpool/ROOT/zfs2BE>.
    Population of boot environment <zfs2BE> successful.
    Creation of boot environment <zfs2BE> successful.
  4. 激活 ZFS BE。


    # lustatus
    Boot Environment           Is       Active Active    Can    Copy      
    Name                       Complete Now    On Reboot Delete Status    
    -------------------------- -------- ------ --------- ------ ----------
    zfsBE                      yes      yes    yes       no     -         
    zfs2BE                     yes      no     no        yes    -         
    # luactivate zfs2BE
    A Live Upgrade Sync operation will be performed on startup of boot environment <zfs2BE>.
    .
    .
    .
    # init 6
    
  5. 确认在新 BE 中创建了 ZFS 文件系统和区域。


    # zfs list
    NAME                               USED  AVAIL  REFER  MOUNTPOINT
    rpool                             7.38G  59.6G    98K  /rpool
    rpool/ROOT                        4.72G  59.6G    21K  legacy
    rpool/ROOT/zfs2BE                 4.72G  59.6G  4.64G  /
    rpool/ROOT/zfs2BE@zfs2BE          74.0M      -  4.64G  -
    rpool/ROOT/zfsBE                  5.45M  59.6G  4.64G  /.alt.zfsBE
    rpool/dump                        1.00G  59.6G  1.00G  -
    rpool/export                        44K  59.6G    23K  /export
    rpool/export/home                   21K  59.6G    21K  /export/home
    rpool/swap                           1G  60.6G    16K  -
    rpool/zones                       17.2M  59.6G   633M  /rpool/zones
    rpool/zones-zfsBE                  653M  59.6G   633M  /rpool/zones-zfsBE
    rpool/zones-zfsBE@zfs2BE          19.9M      -   633M  -
    # zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP    
       0 global           running    /                              native   shared
       - zfszone          installed  /rpool/zones                   native   shared

Procedure如何升级或修补具有区域根的 ZFS 根文件系统(最低 Solaris 10 5/09)

在 Solaris 10 5/09 或以上的发行版中,当您需要升级或修补具有区域根的 ZFS 根文件系统时,请使用此过程。这些更新可以是对系统进行升级,也可以是应用一些修补程序。

在后面的步骤中,zfs2BE 为升级或修补的引导环境的示例名称。

  1. 查看现有的 ZFS 文件系统。


    # zfs list
    NAME                               USED  AVAIL  REFER  MOUNTPOINT
    rpool                             7.38G  59.6G   100K  /rpool
    rpool/ROOT                        4.72G  59.6G    21K  legacy
    rpool/ROOT/zfs2BE                 4.72G  59.6G  4.64G  /
    rpool/ROOT/zfs2BE@zfs2BE          75.0M      -  4.64G  -
    rpool/ROOT/zfsBE                  5.46M  59.6G  4.64G  /
    rpool/dump                        1.00G  59.6G  1.00G  -
    rpool/export                        44K  59.6G    23K  /export
    rpool/export/home                   21K  59.6G    21K  /export/home
    rpool/swap                           1G  60.6G    16K  -
    rpool/zones                       22.9M  59.6G   637M  /rpool/zones
    rpool/zones-zfsBE                  653M  59.6G   633M  /rpool/zones-zfsBE
    rpool/zones-zfsBE@zfs2BE          20.0M      -   633M  -
  2. 确保安装和引导了区域。


    # zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP    
       0 global           running    /                              native   shared
       5 zfszone          running    /rpool/zones                   native   shared
  3. 创建 ZFS BE 以进行升级或修补。


    # lucreate -n zfs2BE
    Analyzing system configuration.
    Comparing source boot environment <zfsBE> file systems with the file 
    system(s) you specified for the new boot environment. Determining which 
    file systems should be in the new boot environment.
    Updating boot environment description database on all BEs.
    Updating system configuration files.
    Creating configuration for boot environment <zfs2BE>.
    Source boot environment is <zfsBE>.
    Creating boot environment <zfs2BE>.
    Cloning file systems from boot environment <zfsBE> to create boot environment <zfs2BE>.
    Creating snapshot for <rpool/ROOT/zfsBE> on <rpool/ROOT/zfsBE@zfs2BE>.
    Creating clone for <rpool/ROOT/zfsBE@zfs2BE> on <rpool/ROOT/zfs2BE>.
    Setting canmount=noauto for </> in zone <global> on <rpool/ROOT/zfs2BE>.
    Creating snapshot for <rpool/zones> on <rpool/zones@zfs10092BE>.
    Creating clone for <rpool/zones@zfs2BE> on <rpool/zones-zfs2BE>.
    Population of boot environment <zfs2BE> successful.
    Creation of boot environment <zfs2BE> successful.
  4. 选择以下操作之一来升级系统或将修补程序应用到新引导环境:

    • 升级系统。


      # luupgrade -u -n zfs2BE -s /net/install/export/s10up/latest
      

      其中 -s 选项指定 Solaris 安装介质的位置。

      此过程要花费很长时间。

      有关 luupgrade 过程的完整示例,请参见示例 5–6

    • 将修补程序应用到新引导环境。


      # luupgrade -t -n zfs2BE -t -s /patchdir patch-id-02 patch-id-04
      
  5. 激活新引导环境。


    # lustatus
    Boot Environment           Is       Active Active    Can    Copy      
    Name                       Complete Now    On Reboot Delete Status    
    -------------------------- -------- ------ --------- ------ ----------
    zfsBE                      yes      yes    yes       no     -         
    zfs2BE                     yes      no     no        yes    -    
    # luactivate zfs2BE
    A Live Upgrade Sync operation will be performed on startup of boot environment <zfs2BE>.
    .
    .
    .
  6. 从新激活的引导环境引导。


    # init 6
    

示例 5–6 将具有区域根的 ZFS 根文件系统升级到 Oracle Solaris 10 9/10 ZFS 根文件系统

在此示例中,将在具有 ZFS 根文件系统和非根池的区域根的 Solaris 10 10/09 系统上创建的 ZFS BE (zfsBE) 升级到 Oracle Solaris 10 9/10 发行版。此过程要花费较长时间。然后,激活升级的 BE (zfs2BE)。请确保在尝试升级之前,安装并引导了区域。

在此示例中,zonepool 池、/zonepool/zones 数据集和 zfszone 区域是按如下方式创建的:


# zpool create zonepool mirror c2t1d0 c2t5d0
# zfs create zonepool/zones
# chmod 700 zonepool/zones
# zonecfg -z zfszone
zfszone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:zfszone> create
zonecfg:zfszone> set zonepath=/zonepool/zones
zonecfg:zfszone> verify
zonecfg:zfszone> exit
# zoneadm -z zfszone install
cannot create ZFS dataset zonepool/zones: dataset already exists
Preparing to install zone <zfszone>.
Creating list of files to copy from the global zone.
Copying <8960> files to the zone.
.
.
.

# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              native   shared
   2 zfszone          running    /zonepool/zones                native   shared

# lucreate -n zfsBE
.
.
.
# luupgrade -u -n zfsBE -s /net/install/export/s10up/latest
40410 blocks
miniroot filesystem is <lofs>
Mounting miniroot at </net/system/export/s10up/latest/Solaris_10/Tools/Boot>
Validating the contents of the media </net/system/export/s10up/latest>.
The media is a standard Solaris media.
The media contains an operating system upgrade image.
The media contains <Solaris> version <10>.
Constructing upgrade profile to use.
Locating the operating system upgrade program.
Checking for existence of previously scheduled Live Upgrade requests.
Creating upgrade profile for BE <zfsBE>.
Determining packages to install or upgrade for BE <zfsBE>.
Performing the operating system upgrade of the BE <zfsBE>.
CAUTION: Interrupting this process may leave the boot environment unstable 
or unbootable.
Upgrading Solaris: 100% completed
Installation of the packages from this media is complete.
Updating package information on boot environment <zfsBE>.
Package information successfully updated on boot environment <zfsBE>.
Adding operating system patches to the BE <zfsBE>.
The operating system patch installation is complete.
INFORMATION: The file </var/sadm/system/logs/upgrade_log> on boot 
environment <zfsBE> contains a log of the upgrade operation.
INFORMATION: The file </var/sadm/system/data/upgrade_cleanup> on boot 
environment <zfsBE> contains a log of cleanup operations required.
INFORMATION: Review the files listed above. Remember that all of the files 
are located on boot environment <zfsBE>. Before you activate boot 
environment <zfsBE>, determine if any additional system maintenance is 
required or if additional media of the software distribution must be 
installed.
The Solaris upgrade of the boot environment <zfsBE> is complete.
Installing failsafe
Failsafe install is complete.
# luactivate zfsBE
# init 6
# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
zfsBE                      yes      no     no        yes    -         
zfs2BE                     yes      yes    yes       no     -         
# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              native   shared
   - zfszone          installed  /zonepool/zones                native   shared

Procedure如何将具有区域根的 UFS 根文件系统迁移到 ZFS 根文件系统(最低 Solaris 10 5/09)

使用此过程将具有 UFS 根文件系统和区域根的系统迁移到 Solaris 10 5/09 或以上的发行版。然后,使用 Oracle Solaris Live Upgrade 创建 ZFS BE。

在后面的步骤中,示例 UFS BE 名称为 c0t1d0s0,UFS 区域根为 zonepool/zfszone,ZFS 根 BE 为 zfsBE

  1. 如果系统正在运行先前的 Solaris 10 发行版,请将其升级到最低 Solaris 10 5/09 发行版。

    有关对运行 Solaris 10 发行版的系统进行升级的信息,请参见《Oracle Solaris 10 9/10 安装指南:Solaris Live 升级和升级规划》

  2. 创建根池。

    有关根池要求的信息,请参见ZFS 支持对于 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 的要求

  3. 确认已引导 UFS 环境中的区域。


    # zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP    
       0 global           running    /                              native   shared
       2 zfszone          running    /zonepool/zones                native   shared
  4. 创建新 ZFS 引导环境。


    # lucreate -c c1t1d0s0 -n zfsBE -p rpool
    

    此命令将为新引导环境在根池中建立数据集并将当前引导环境(包括区域)复制到这些数据集。

  5. 激活新 ZFS 引导环境。


    # lustatus
    Boot Environment           Is       Active Active    Can    Copy      
    Name                       Complete Now    On Reboot Delete Status    
    -------------------------- -------- ------ --------- ------ ----------
    c1t1d0s0                   yes      no     no        yes    -         
    zfsBE                      yes      yes    yes       no     -         #
    luactivate zfsBE       
    A Live Upgrade Sync operation will be performed on startup of boot environment <zfsBE>.
    .
    .
    .
  6. 重新引导系统。


    # init 6
    
  7. 确认在新 BE 中创建了 ZFS 文件系统和区域。


    # zfs list
    NAME                                USED  AVAIL  REFER  MOUNTPOINT
    rpool                              6.17G  60.8G    98K  /rpool
    rpool/ROOT                         4.67G  60.8G    21K  /rpool/ROOT
    rpool/ROOT/zfsBE                   4.67G  60.8G  4.67G  /
    rpool/dump                         1.00G  60.8G  1.00G  -
    rpool/swap                          517M  61.3G    16K  -
    zonepool                            634M  7.62G    24K  /zonepool
    zonepool/zones                      270K  7.62G   633M  /zonepool/zones
    zonepool/zones-c1t1d0s0             634M  7.62G   633M  /zonepool/zones-c1t1d0s0
    zonepool/zones-c1t1d0s0@zfsBE       262K      -   633M  -
    # zoneadm list -cv
      ID NAME             STATUS     PATH                           BRAND    IP    
       0 global           running    /                              native   shared
       - zfszone          installed  /zonepool/zones                native   shared

示例 5–7 将具有区域根的 UFS 根文件系统迁移到 ZFS 根文件系统

在此示例中,将具有 UFS 根文件系统和区域根 (/uzone/ufszone)、ZFS 非根池 (pool) 以及区域根 (/pool/zfszone) 的 Oracle Solaris 10 9/10 系统迁移到 ZFS 根文件系统。在尝试迁移之前,请确保创建了 ZFS 根池并且安装和引导了区域。


# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              native   shared
   2 ufszone          running    /uzone/ufszone                 native   shared
   3 zfszone          running    /pool/zones/zfszone            native   shared

# lucreate -c ufsBE -n zfsBE -p rpool
Analyzing system configuration.
No name for current boot environment.
Current boot environment is named <zfsBE>.
Creating initial configuration for primary boot environment <zfsBE>.
The device </dev/dsk/c1t0d0s0> is not a root device for any boot environment; cannot get BE ID.
PBE configuration successful: PBE name <ufsBE> PBE Boot Device </dev/dsk/c1t0d0s0>.
Comparing source boot environment <ufsBE> file systems with the file 
system(s) you specified for the new boot environment. Determining which 
file systems should be in the new boot environment.
Updating boot environment description database on all BEs.
Updating system configuration files.
The device </dev/dsk/c1t1d0s0> is not a root device for any boot environment; cannot get BE ID.
Creating configuration for boot environment <zfsBE>.
Source boot environment is <ufsBE>.
Creating boot environment <zfsBE>.
Creating file systems on boot environment <zfsBE>.
Creating <zfs> file system for </> in zone <global> on <rpool/ROOT/zfsBE>.
Populating file systems on boot environment <zfsBE>.
Checking selection integrity.
Integrity check OK.
Populating contents of mount point </>.
Copying.
Creating shared file system mount points.
Copying root of zone <ufszone> to </.alt.tmp.b-EYd.mnt/uzone/ufszone>.
Creating snapshot for <pool/zones/zfszone> on <pool/zones/zfszone@zfsBE>.
Creating clone for <pool/zones/zfszone@zfsBE> on <pool/zones/zfszone-zfsBE>.
Creating compare databases for boot environment <zfsBE>.
Creating compare database for file system </rpool/ROOT>.
Creating compare database for file system </>.
Updating compare databases on boot environment <zfsBE>.
Making boot environment <zfsBE> bootable.
Creating boot_archive for /.alt.tmp.b-DLd.mnt
updating /.alt.tmp.b-DLd.mnt/platform/sun4u/boot_archive
Population of boot environment <zfsBE> successful.
Creation of boot environment <zfsBE> successful.
# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
ufsBE                      yes      yes    yes       no     -         
zfsBE                      yes      no     no        yes    -         
# luactivate zfsBE    
.
.
.
# init 6
.
.
.
# zfs list
NAME                                    USED  AVAIL  REFER  MOUNTPOINT
pool                                    628M  66.3G    19K  /pool
pool/zones                              628M  66.3G    20K  /pool/zones
pool/zones/zfszone                     75.5K  66.3G   627M  /pool/zones/zfszone
pool/zones/zfszone-ufsBE                628M  66.3G   627M  /pool/zones/zfszone-ufsBE
pool/zones/zfszone-ufsBE@zfsBE           98K      -   627M  -
rpool                                  7.76G  59.2G    95K  /rpool
rpool/ROOT                             5.25G  59.2G    18K  /rpool/ROOT
rpool/ROOT/zfsBE                       5.25G  59.2G  5.25G  /
rpool/dump                             2.00G  59.2G  2.00G  -
rpool/swap                              517M  59.7G    16K  -
# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              native   shared
   - ufszone          installed  /uzone/ufszone                 native   shared
   - zfszone          installed  /pool/zones/zfszone            native   shared

对于交换和转储设备的 ZFS 支持

Solaris OS 初始安装期间,或者使用 Oracle Solaris Live Upgrade 从 UFS 文件系统迁移之后,会在 ZFS 根池中的 ZFS 卷上创建交换区域。例如:


# swap -l
swapfile                  dev  swaplo  blocks   free
/dev/zvol/dsk/rpool/swap 256,1      16 4194288 4194288

Solaris OS 初始安装或者使用 Oracle Solaris Live Upgrade 从 UFS 文件系统升级期间,会在 ZFS 根池中的 ZFS 卷上创建转储设备。一般而言,转储设备不需要管理,因为它是在安装时自动设置的。例如:


# dumpadm
      Dump content: kernel pages
       Dump device: /dev/zvol/dsk/rpool/dump (dedicated)
Savecore directory: /var/crash/t2000
  Savecore enabled: yes
   Save compressed: on

如果禁用并移除转储设备,则在重新创建转储设备之后,需要使用 dumpadm 命令予以启用。大多数情况下,只需要使用 zfs 命令调整转储设备的大小。

有关安装程序创建的交换卷和转储卷大小的信息,请参见ZFS 支持对于 Oracle Solaris 安装和 Oracle Solaris Live Upgrade 的要求

在安装期间和安装后,可以对交换卷的大小和转储卷的大小进行调整。有关更多信息,请参见调整 ZFS 交换设备和转储设备的大小

使用 ZFS 交换和转储设备时,请考虑以下问题:

有关更多信息,请参见以下各章节:

调整 ZFS 交换设备和转储设备的大小

由于 ZFS 根安装在确定交换和转储设备大小的方式上存在差异,所以您可能需要在安装之前、安装期间或安装之后调整交换和转储设备的大小。

ZFS 转储设备故障排除

有关捕捉系统崩溃转储或者调整转储设备大小的问题,请查看以下各项:

从 ZFS 根文件系统引导

基于 SPARC 和基于 x86 的系统都使用新型的引导方式,即通过引导归档文件进行引导,引导归档文件是一个文件系统映像,该映像中包含进行引导时所需的文件。从 ZFS 根文件系统引导系统时,将会在选择用来进行引导的根文件系统中解析引导归档文件和内核文件的路径名。

引导系统进行安装时,在整个安装过程中,RAM 磁盘用于根文件系统。

从 ZFS 文件系统引导不同于从 UFS 文件系统引导,因为对于 ZFS,引导设备说明符标识存储池,而不是单个根文件系统。存储池可能包含多个可引导的数据集或 ZFS 根文件系统。从 ZFS 引导时,必须指定引导设备和由该引导设备标识的池中的根文件系统。

缺省情况下,选择用来进行引导的数据集是由池的 bootfs 属性标识的。通过在 boot -Z 命令中指定备用可引导数据集可以覆盖此缺省选择。

从镜像 ZFS 根池中的备用磁盘引导

您可以在安装系统时创建镜像 ZFS 根池,也可以在安装后通过附加磁盘来创建镜像 ZFS 根池。有关更多信息,请参见:

请查看以下有关镜像 ZFS 根池的已知问题:

SPARC:从 ZFS 根文件系统引导

在具有多个 ZFS BE 的基于 SPARC 的系统上,可以通过使用 luactivate 命令从任何 BE 引导。

在 Solaris OS 安装和 Oracle Solaris Live Upgrade 过程中,将会通过 bootfs 属性自动指定 ZFS 根文件系统。

一个池中可能存在多个可引导的数据集。缺省情况下,/pool-name/boot/menu.lst 文件中的可引导数据集项由池的 bootfs 属性来标识。但是,menu.lst 项可以包含 bootfs 命令,该命令可指定池中的备用数据集。这样,menu.lst 文件就可以包含池中多个根文件系统的项。

当系统中安装了 ZFS 根文件系统或迁移到 ZFS 根文件系统时,类似如下的项会添加到 menu.lst 文件:


title zfsBE
bootfs rpool/ROOT/zfsBE
title zfs2BE
bootfs rpool/ROOT/zfs2BE

创建新 BE 时,将会自动更新 menu.lst 文件。

在基于 SPARC 的系统上,提供了两个新的引导选项:


示例 5–8 SPARC:从特定的 ZFS 引导环境引导

如果系统的引导设备上的 ZFS 存储池中有多个 ZFS BE,您可以使用 luactivate 命令指定缺省 BE。

例如,以下 ZFS BE 可用,如 lustatus 输出所述:


# lustatus
Boot Environment           Is       Active Active    Can    Copy      
Name                       Complete Now    On Reboot Delete Status    
-------------------------- -------- ------ --------- ------ ----------
zfsBE                      yes      no     no        yes    -         
zfs2BE                     yes      yes    yes       no     -

如果基于 SPARC 的系统上有多个 ZFS BE,您可以使用 boot -L 命令从非缺省 BE 引导。然而,从 boot -L 会话引导的 BE 不会向缺省 BE 一样重置,bootfs 属性也不会进行更新。如果要使从 boot -L 会话引导的 BE 成为缺省 BE,必须使用 luactivate 命令激活它。

例如:


ok boot -L
Rebooting with command: boot -L
Boot device: /pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0  File and args: -L

1 zfsBE
2 zfs2BE
Select environment to boot: [ 1 - 2 ]: 1
To boot the selected entry, invoke:
boot [<root-device>] -Z rpool/ROOT/zfsBE

Program terminated
ok boot -Z rpool/ROOT/zfsBE


示例 5–9 SPARC:在故障安全模式下引导 ZFS 文件系统

在基于 SPARC 的系统上,您可以按如下方式从位于 /platform/`uname -i`/failsafe 的故障安全归档文件引导:


ok boot -F failsafe

要从特定的 ZFS 可引导数据集引导故障安全归档文件,请使用类似如下的语法:


ok boot -Z rpool/ROOT/zfsBE -F failsafe

x86:从 ZFS 根文件系统引导

在 Solaris OS 安装过程中或执行 Oracle Solaris Live Upgrade 操作期间,以下项会添加到 /pool-name/boot/grub/menu.lst 文件以自动引导 ZFS:


title Solaris 10 9/10  X86
findroot (rootfs0,0,a)
kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS
module /platform/i86pc/boot_archive
title Solaris failsafe
findroot (rootfs0,0,a)
kernel /boot/multiboot kernel/unix -s -B console=ttya
module /boot/x86.miniroot-safe

如果由 GRUB 标识为引导设备的设备包含 ZFS 存储池,则 menu.lst 文件用于创建 GRUB 菜单。

在具有多个 ZFS BE 的基于 x86 的系统上,您可以从 GRUB 菜单中选择 BE。如果与该菜单项对应的根文件系统为 ZFS 数据集,则会添加以下选项:


-B $ZFS-BOOTFS

示例 5–10 x86:引导 ZFS 文件系统

从 ZFS 文件系统引导系统时,根设备由 GRUB 菜单项中的 -kernelmodule 行上的 B $ZFS-BOOTFS 引导参数指定。该参数(与由 -B 选项指定的所有参数类似)由 GRUB 传递给内核。例如:



title Solaris 10 9/10  X86
findroot (rootfs0,0,a)
kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS
module /platform/i86pc/boot_archive
title Solaris failsafe
findroot (rootfs0,0,a)
kernel /boot/multiboot kernel/unix -s -B console=ttya
module /boot/x86.miniroot-safe

示例 5–11 x86:在故障安全模式下引导 ZFS 文件系统

x86 故障安全归档文件为 /boot/x86.miniroot-safe,可以通过从 GRUB 菜单选择 Solaris 故障安全项来引导。例如:


title Solaris failsafe
findroot (rootfs0,0,a)
kernel /boot/multiboot kernel/unix -s -B console=ttya
module /boot/x86.miniroot-safe

解决妨碍成功引导的 ZFS 挂载点问题 (Solaris 10 10/08)

更改活动引导环境的最佳方法是使用 luactivate 命令。如果由于错误的修补程序或配置错误而导致引导活动环境失败,则从其他环境引导的唯一方法是在引导时选择该环境。您可以在基于 x86 的系统上从 GRUB 菜单中选择备用 BE,或在基于 SPARC 的系统上从 PROM 中显式引导备用 BE。

由于 Solaris 10 10/08 发行版 Oracle Solaris Live Upgrade 功能中的错误,非活动引导环境可能无法引导,因为引导环境中的 ZFS 数据集或区域的 ZFS 数据集有无效的挂载点。如果 BE 有单独的 /var 数据集,则上述错误还会阻止该 BE 挂载。

如果区域数据集有无效的挂载点,通过下列步骤可以更正该挂载点。

Procedure如何解决 ZFS 挂载点问题

  1. 从故障安全归档文件引导系统。

  2. 导入池。

    例如:


    # zpool import rpool
    
  3. 查找不正确的临时挂载点。

    例如:


    # zfs list -r -o name,mountpoint rpool/ROOT/s10u6
        
        NAME                               MOUNTPOINT
        rpool/ROOT/s10u6                   /.alt.tmp.b-VP.mnt/
        rpool/ROOT/s10u6/zones             /.alt.tmp.b-VP.mnt//zones
        rpool/ROOT/s10u6/zones/zonerootA   /.alt.tmp.b-VP.mnt/zones/zonerootA

    根 BE (rpool/ROOT/s10u6) 的挂载点应为 /

    如果由于 /var 挂载问题而导致引导失败,请为 /var 数据集查找类似不正确的临时挂载点。

  4. 重置 ZFS BE 及其数据集的挂载点。

    例如:


    # zfs inherit -r mountpoint rpool/ROOT/s10u6
    # zfs set mountpoint=/ rpool/ROOT/s10u6
    
  5. 重新引导系统。

    当提供选项来引导特定的引导环境时(在 GRUB 菜单中或 OpenBoot PROM 提示符下),请选择刚刚更正其挂载点的引导环境。

在 ZFS 根环境中进行引导以恢复系统

如果您需要引导系统,以解决根密码丢失或类似问题,请使用以下过程。

需要引导故障安全模式或从备用介质引导,具体取决于错误的严重程度。一般而言,引导故障安全模式可以解决根密码丢失或未知问题。

如果您需要恢复根池或根池快照,请参见恢复 ZFS 根池或根池快照

Procedure如何引导 ZFS 故障安全模式

  1. 引导故障安全模式。

    在 SPARC 系统上:


    ok boot -F failsafe
    

    在 x86 系统上,从 GRUB 提示符下选择故障安全模式。

  2. 提示时,将 ZFS BE 挂载于 /a


    .
    .
    .
    ROOT/zfsBE was found on rpool.
    Do you wish to have it mounted read-write on /a? [y,n,?] y
    mounting rpool on /a
    Starting shell.
  3. 变更到 /a/etc 目录。


    # cd /a/etc
    
  4. 如有必要,设置 TERM 类型。


    # TERM=vt100
    # export TERM
  5. 修正 passwdshadow 文件。


    # vi shadow
    
  6. 重新引导系统。


    # init 6
    

Procedure如何从备用介质引导 ZFS

如果某个问题妨碍系统成功引导,或者发生其它严重问题,您将需要从网络安装服务器或者 Solaris 安装 CD 引导,导入根池,挂载 ZFS BE,并尝试解决问题。

  1. 从安装 CD 或者网络引导。

    • SPARC:


      ok boot cdrom -s 
      ok boot net -s
      

      如果您未使用 -s 选项,则需要退出安装程序。

    • x86:选择网络引导或者从本地 CD 引导选项。

  2. 导入根池并指定备用挂载点。例如:


    # zpool import -R /a rpool
    
  3. 挂载 ZFS BE。例如:


    # zfs mount rpool/ROOT/zfsBE
    
  4. /a 目录访问 ZFS BE 内容。


    # cd /a
    
  5. 重新引导系统。


    # init 6
    

恢复 ZFS 根池或根池快照

以下各节描述了如何执行下列任务:

Procedure如何替换 ZFS 根池中的磁盘

由于以下原因,您可能需要替换根池中的磁盘:

在镜像根池配置中,您可以尝试替换磁盘而不必从备用介质引导。可以使用 zpool replace 命令替换发生故障的磁盘。或者,如果有额外的磁盘,可以使用 zpool attach 命令。有关附加额外磁盘和分离根池磁盘的示例,请参见本节中的过程。

有些硬件要求您在尝试通过 zpool replace 操作替换故障磁盘之前使磁盘脱机并取消其配置。例如:


# zpool offline rpool c1t0d0s0
# cfgadm -c unconfigure c1::dsk/c1t0d0
<Physically remove failed disk c1t0d0>
<Physically insert replacement disk c1t0d0>
# cfgadm -c configure c1::dsk/c1t0d0
# zpool replace rpool c1t0d0s0
# zpool online rpool c1t0d0s0
# zpool status rpool
<Let disk resilver before installing the boot blocks>
SPARC# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t0d0s0
x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0

对于一些硬件,插入替代磁盘后不必使其联机并进行配置。

必须标识当前磁盘和新磁盘的引导设备路径名,以便从替换磁盘测试引导,而且如有必要,在替换磁盘发生故障时也可手动从现有磁盘引导。在以下过程的示例中,当前根池磁盘 (c1t10d0s0) 的路径名为:


/pci@8,700000/pci@3/scsi@5/sd@a,0

替换引导磁盘 c1t9d0s0 的路径名为:


/pci@8,700000/pci@3/scsi@5/sd@9,0
  1. 物理连接替换磁盘或新磁盘。

  2. 确认新磁盘具有 SMI 标签和分片 0。

    有关对要用于根池的磁盘进行重新标记的信息,请参见以下站点:

    http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

  3. 将新磁盘连接到根池。

    例如:


    # zpool attach rpool c1t10d0s0 c1t9d0s0
    
  4. 确认根池状态。

    例如:


    # zpool status rpool
      pool: rpool
     state: ONLINE
    status: One or more devices is currently being resilvered.  The pool will
            continue to function, possibly in a degraded state.
    action: Wait for the resilver to complete.
     scrub: resilver in progress, 25.47% done, 0h4m to go
    config:
    
            NAME           STATE     READ WRITE CKSUM
            rpool          ONLINE       0     0     0
              mirror-0     ONLINE       0     0     0
                c1t10d0s0  ONLINE       0     0     0
                c1t9d0s0   ONLINE       0     0     0
    
    errors: No known data errors
  5. 完成重新同步后,将引导块应用到新磁盘。

    使用类似以下的语法:

    • SPARC:


      # installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t9d0s0
      
    • x86:


      # installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t9d0s0
      
  6. 验证您是否可以从新磁盘引导。

    例如,在基于 SPARC 的系统上,应使用类似以下的语法:


    ok boot /pci@8,700000/pci@3/scsi@5/sd@9,0
    
  7. 如果系统从新磁盘引导,则分离旧磁盘。

    例如:


    # zpool detach rpool c1t10d0s0
    
  8. 通过使用 SPARC 引导 PROM 中的 eeprom 命令和 setenv 命令,将系统设置为从新磁盘自动引导,或重新配置 PC BIOS。

Procedure如何创建根池快照

可以创建根池快照以便进行恢复。创建根池快照的最好方法是对根池执行递归快照。

下面的过程将创建递归根池快照,并将快照以文件的形式存储到远程系统上的池中。如果根池失败,可以使用 NFS 挂载远程数据集,快照文件可以放入重新创建的池中。或者,您也可以将根池快照以实际快照的形式存储到远程系统上的池中。从远程系统发送和接收快照比较复杂,因为在从 Solaris OS miniroot 引导要修复的系统时,您必须配置 ssh 或使用 rsh

有关远程存储和恢复根池快照的信息和有关根池恢复的最新信息,请访问以下站点:

http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

在根池恢复中,以文件或快照形式验证远程存储的快照是一个重要步骤。无论何种方法,都应按照常规重新创建快照,例如在池配置更改或 Solaris OS 升级时。

在以下过程中,系统从 zfsBE 引导环境引导。

  1. 在远程系统上创建池和文件系统以存储快照。

    例如:


    remote# zfs create rpool/snaps
    
  2. 与本地系统共享文件系统。

    例如:


    remote# zfs set sharenfs='rw=local-system,root=local-system' rpool/snaps
    # share
    -@rpool/snaps   /rpool/snaps   sec=sys,rw=local-system,root=local-system   "" 
  3. 创建根池的递归快照。


    local# zfs snapshot -r rpool@0804
    local# zfs list
    NAME                        USED  AVAIL  REFER  MOUNTPOINT
    rpool                      6.17G  60.8G    98K  /rpool
    rpool@0804                     0      -    98K  -
    rpool/ROOT                 4.67G  60.8G    21K  /rpool/ROOT
    rpool/ROOT@0804                0      -    21K  -
    rpool/ROOT/zfsBE           4.67G  60.8G  4.67G  /
    rpool/ROOT/zfsBE@0804       386K      -  4.67G  -
    rpool/dump                 1.00G  60.8G  1.00G  -
    rpool/dump@0804                0      -  1.00G  -
    rpool/swap                  517M  61.3G    16K  -
    rpool/swap@0804                0      -    16K  -
  4. 将根池快照发送到远程系统。

    例如:


    local# zfs send -Rv rpool@0804 > /net/remote-system/rpool/snaps/rpool.0804
    sending from @ to rpool@0804
    sending from @ to rpool/swap@0804
    sending from @ to rpool/ROOT@0804
    sending from @ to rpool/ROOT/zfsBE@0804
    sending from @ to rpool/dump@0804

Procedure如何重新创建 ZFS 根池和恢复根池快照

在此过程中,假设下列条件存在:

在本地系统上执行所有步骤。

  1. 从 CD/DVD 或网络引导。

    • SPARC:选择以下引导方法之一:


      ok boot net -s
      ok boot cdrom -s
      

      如果您未使用 -s 选项,则需要退出安装程序。

    • x86:选择用于从 DVD 或网络进行引导的选项。然后,退出安装程序。

  2. 挂载远程快照数据集。

    例如:


    # mount -F nfs remote-system:/rpool/snaps /mnt
    

    如果您尚未配置网络服务,则可能需要指定 remote-system 的 IP 地址。

  3. 如果根池磁盘被替换,并且不包含 ZFS 可用的磁盘标号,则必须对磁盘重新进行标号。

    有关对磁盘进行重新标号的更多信息,请访问以下站点:

    http://www.solarisinternals.com/wiki/index.php/ZFS_Troubleshooting_Guide

  4. 重新创建根池。

    例如:


    # zpool create -f -o failmode=continue -R /a -m legacy -o cachefile=
    /etc/zfs/zpool.cache rpool c1t1d0s0
    
  5. 恢复根池快照。

    此步骤可能会花费一些时间。例如:


    # cat /mnt/rpool.0804 | zfs receive -Fdu rpool
    

    使用 -u 选项表示 zfs receive 操作完成时不挂载恢复的归档文件。

  6. 验证根池数据集是否已恢复。

    例如:


    # zfs list
    NAME                        USED  AVAIL  REFER  MOUNTPOINT
    rpool                      6.17G  60.8G    98K  /a/rpool
    rpool@0804                     0      -    98K  -
    rpool/ROOT                 4.67G  60.8G    21K  /legacy
    rpool/ROOT@0804                0      -    21K  -
    rpool/ROOT/zfsBE           4.67G  60.8G  4.67G  /a
    rpool/ROOT/zfsBE@0804       398K      -  4.67G  -
    rpool/dump                 1.00G  60.8G  1.00G  -
    rpool/dump@0804                0      -  1.00G  -
    rpool/swap                  517M  61.3G    16K  -
    rpool/swap@0804                0      -    16K  -
  7. 设置根池 BE 上的 bootfs 属性。

    例如:


    # zpool set bootfs=rpool/ROOT/zfsBE rpool
    
  8. 在新磁盘上安装引导块。

    SPARC:


    # installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c1t1d0s0
    

    x86:


    # installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0
    
  9. 重新引导系统。


    # init 6
    

Procedure如何从故障安全引导回滚根池快照

此过程假设现有根池快照可用。在本例中,本地系统提供这些根池快照。


# zfs snapshot -r rpool@0804
# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
rpool                      6.17G  60.8G    98K  /rpool
rpool@0804                     0      -    98K  -
rpool/ROOT                 4.67G  60.8G    21K  /rpool/ROOT
rpool/ROOT@0804                0      -    21K  -
rpool/ROOT/zfsBE           4.67G  60.8G  4.67G  /
rpool/ROOT/zfsBE@0804       398K      -  4.67G  -
rpool/dump                 1.00G  60.8G  1.00G  -
rpool/dump@0804                0      -  1.00G  -
rpool/swap                  517M  61.3G    16K  -
rpool/swap@0804                0      -    16K  -
  1. 关闭系统并引导故障安全模式。


    ok boot -F failsafe
    ROOT/zfsBE was found on rpool.
    Do you wish to have it mounted read-write on /a? [y,n,?] y
    mounting rpool on /a
    
    Starting shell.
  2. 回滚各根池快照。


    # zfs rollback rpool@0804
    # zfs rollback rpool/ROOT@0804
    # zfs rollback rpool/ROOT/zfsBE@0804
    
  3. 重新引导至多用户模式。


    # init 6