JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:ZFS 文件系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris ZFS 文件系统(介绍)

2.  Oracle Solaris ZFS 入门

3.  管理 Oracle Solaris ZFS 存储池

4.  管理 ZFS 根池组件

管理 ZFS 根池组件(概述)

ZFS 根池要求

ZFS 根池空间要求

ZFS 根池配置要求

管理 ZFS 根池

安装 ZFS 根池

如何更新 ZFS 引导环境

如何挂载备用 BE

如何配置镜像根池(SPARC 或 x86/VTOC)

如何配置镜像根池 (x86/EFI (GPT))

如何替换 ZFS 根池中的磁盘(SPARC 或 x86/VTOC)

如何替换 ZFS 根池中的磁盘(SPARC 或 x86/EFI (GPT))

如何在另一个根池中创建 BE(SPARC 或 x86/VTOC)

如何在另一个根池中创建 BE(SPARC 或 x86/EFI (GPT))

管理 ZFS 交换和转储设备

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

ZFS 转储设备故障排除

从 ZFS 根文件系统引导

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

在基于 SPARC 的系统上从 ZFS 根文件系统引导

在基于 x86 的系统上从 ZFS 根文件系统引导

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

如何为进行恢复而引导系统

5.  管理 Oracle Solaris ZFS 文件系统

6.  使用 Oracle Solaris ZFS 快照和克隆

7.  使用 ACL 和属性保护 Oracle Solaris ZFS 文件

8.  Oracle Solaris ZFS 委托管理

9.  Oracle Solaris ZFS 高级主题

10.  Oracle Solaris ZFS 故障排除和池恢复

11.  归档快照和根池恢复

12.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

管理 ZFS 根池

以下各节提供了关于安装和更新 ZFS 根池以及配置镜像根池的信息。

安装 ZFS 根池

Oracle Solaris 11 Live CD 安装方法在一个磁盘上安装缺省 ZFS 根池。使用 Oracle Solaris 11 自动化安装 (automated installation, AI) 方法时,可以创建 AI 清单来标识用于 ZFS 根池的磁盘或镜像磁盘。

AI 安装程序提供了一定的灵活性:可以在缺省引导磁盘上安装 ZFS 根池,也可以在标识的目标磁盘上安装 ZFS 根池。您可以指定逻辑设备(如 c1t0d0)或物理设备路径。此外,可以使用 MPxIO 标识符或设备 ID 来表示要用于安装的设备。

安装后,可查看 ZFS 存储池和文件系统信息,具体内容会因安装类型和定制选项而有所不同。例如:

# zpool status rpool
  pool: rpool
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c8t0d0  ONLINE       0     0     0
            c8t1d0  ONLINE       0     0     0
# zfs list
NAME                      USED  AVAIL  REFER  MOUNTPOINT
rpool                    11.8G  55.1G  4.58M  /rpool
rpool/ROOT               3.57G  55.1G    31K  legacy
rpool/ROOT/solaris       3.57G  55.1G  3.40G  /
rpool/ROOT/solaris/var    165M  55.1G   163M  /var
rpool/VARSHARE           42.5K  55.1G  42.5K  /var/share
rpool/dump               6.19G  55.3G  6.00G  -
rpool/export               63K  55.1G    32K  /export
rpool/export/home          31K  55.1G    31K  /export/home
rpool/swap               2.06G  55.2G  2.00G  -

查看 ZFS BE 信息。例如:

# beadm list
BE      Active Mountpoint Space Policy Created          
--      ------ ---------- ----- ------ -------          
solaris NR     /          3.75G static 2012-07-20 12:10 

在上面的输出中,Active 字段指示 BE 当前是否处于活动状态。N 表示当前处于活动状态;R 表示重新引导时处于活动状态;NR 表示在当前以及重新引导时均处于活动状态。

如何更新 ZFS 引导环境

缺省 ZFS 引导环境 (boot environment, BE) 的缺省名称为 solaris。可以使用 beadm list 命令来标识 BE。例如:

# beadm list
BE      Active Mountpoint Space Policy Created          
--      ------ ---------- ----- ------ -------          
solaris NR     /          3.82G static 2012-07-19 13:44

在上面的输出中,NR 表示 BE 当前处于活动状态,且在重新引导时也将是活动 BE。

可以使用 pkg update 命令来更新 ZFS 引导环境。如果使用 pkg update 命令更新 ZFS BE,将自动创建并激活一个新 BE(除非对现有 BE 所作的更新极少)。

  1. 更新 ZFS BE。
    # pkg update
                                           
    
    DOWNLOAD                                  PKGS       FILES    XFER (MB)
    Completed                              707/707 10529/10529  194.9/194.9 
    .
    .
    .

    将自动创建并激活一个新 BE solaris-1

    还可以在更新流程之外创建并激活备份 BE。

    # beadm create solaris-1
    # beadm activate solaris-1
  2. 重新引导系统来完成 BE 激活。然后确认 BE 状态。
    # init 6
    .
    .
    .
    # beadm list
    BE        Active Mountpoint Space  Policy Created          
    --        ------ ---------- -----  ------ -------          
    solaris   -      -          46.95M static 2012-07-20 10:25 
    solaris-1 NR     /          3.82G  static 2012-07-19 14:45 
  3. 如果在引导新的 BE 时出现错误,请激活并引导回以前的 BE。
    # beadm activate solaris
    # init 6

如何挂载备用 BE

为实现恢复,可能需要从其他 BE 复制或访问文件。

  1. 成为管理员。
  2. 挂载备用 BE。
    # beadm mount solaris-1 /mnt
  3. 访问该 BE。
    # ls /mnt
    bin        export     media      pkg        rpool      tmp
    boot       home       mine       platform   sbin       usr
    dev        import     mnt        proc       scde       var
    devices    java       net        project    shared     
    doe        kernel     nfs4       re         src        
    etc        lib        opt        root       system     
  4. 在使用完备用 BE 后将其卸载。
    # beadm umount solaris-1

如何配置镜像根池(SPARC 或 x86/VTOC)

如果在自动安装期间未配置镜像根池,在安装之后也可以轻松地配置镜像根池。

有关替换根池中磁盘的信息,请参见如何替换 ZFS 根池中的磁盘(SPARC 或 x86/VTOC)

  1. 显示当前根池的状态。
    # zpool status rpool
      pool: rpool
     state: ONLINE
     scrub: none requested
    config:
    
            NAME        STATE     READ WRITE CKSUM
            rpool       ONLINE       0     0     0
              c2t0d0s0  ONLINE       0     0     0
    
    errors: No known data errors
  2. 如有必要,准备另一个要附加到根池的磁盘。
  3. 附加另一个磁盘,以配置镜像根池。
    # zpool attach rpool c2t0d0s0 c2t1d0s0
    Make sure to wait until resilver is done before rebooting.

    正确的磁盘标签和引导块将被自动应用。

  4. 查看根池状态,确认重新同步已完成。
    # zpool status rpool
    # zpool status rpool
      pool: rpool
     state: DEGRADED
    status: One or more devices is currently being resilvered.  The pool will
            continue to function in a degraded state.
    action: Wait for the resilver to complete.
            Run 'zpool status -v' to see device specific details.
      scan: resilver in progress since Fri Jul 20 13:39:53 2012
        938M scanned out of 11.7G at 46.9M/s, 0h3m to go
        938M resilvered, 7.86% done
    config:
    
            NAME          STATE     READ WRITE CKSUM
            rpool         DEGRADED     0     0     0
              mirror-0    DEGRADED     0     0     0
                c2t0d0s0  ONLINE       0     0     0
                c2t1d0s0  DEGRADED     0     0     0  (resilvering)

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

    resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2012
  5. 如果要附加较大的磁盘,请设置池的 autoexpand 属性,以扩展池的大小。

    确定当前的 rpool 池大小:

    # zpool list rpool
    NAME   SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
    rpool  29.8G   152K  29.7G   0%  1.00x  ONLINE  -
    # zpool set autoexpand=on rpool

    查看扩展后的 rpool 池大小:

    # zpool list rpool
    NAME   SIZE  ALLOC  FREE  CAP  DEDUP  HEALTH  ALTROOT
    rpool  279G   146K  279G   0%  1.00x  ONLINE  -
  6. 验证您是否可以从新磁盘成功引导。

如何配置镜像根池 (x86/EFI (GPT))

在大多数情况下,Oracle Solaris 11.1 发行版将缺省在基于 x86 的系统上安装 EFI (GPT) 标签。

如果在自动安装期间未配置镜像根池,在安装之后也可以轻松地配置镜像根池。

有关替换根池中磁盘的信息,请参见如何替换 ZFS 根池中的磁盘(SPARC 或 x86/VTOC)

  1. 显示当前根池的状态。
    # zpool status rpool
     pool:  rpool
     state: ONLINE
      scan: none requested
    config:
    
            NAME      STATE     READ WRITE CKSUM
            rpool     ONLINE       0     0     0
              c2t0d0  ONLINE       0     0     0
    
    errors: No known data errors
  2. 附加另一个磁盘,以配置镜像根池。
    # zpool attach rpool c2t0d0 c2t1d0
    Make sure to wait until resilver is done before rebooting.

    正确的磁盘标签和引导块将被自动应用。

    如果在根池磁盘上有定制的分区,则可能需要使用类似于以下的语法:

    # zpool attach rpool c2t0d0s0 c2t1d0
  3. 查看根池状态,确认重新同步已完成。
    # zpool status rpool
      pool: rpool
     state: DEGRADED
    status: One or more devices is currently being resilvered.  The pool will
            continue to function in a degraded state.
    action: Wait for the resilver to complete.
            Run 'zpool status -v' to see device specific details.
      scan: resilver in progress since Fri Jul 20 13:52:05 2012
        809M scanned out of 11.6G at 44.9M/s, 0h4m to go
        776M resilvered, 6.82% done
    config:
    
            NAME        STATE     READ WRITE CKSUM
            rpool       DEGRADED     0     0     0
              mirror-0  DEGRADED     0     0     0
                c8t0d0  ONLINE       0     0     0
                c8t1d0  DEGRADED     0     0     0  (resilvering)
    
    errors: No known data errors

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

    resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 13:57:25 2012
  4. 如果要附加较大的磁盘,请设置池的 autoexpand 属性,以扩展池的大小。

    确定当前的 rpool 池大小:

    # zpool list rpool
    NAME   SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
    rpool  29.8G   152K  29.7G   0%  1.00x  ONLINE  -
    # zpool set autoexpand=on rpool

    查看扩展后的 rpool 池大小:

    # zpool list rpool
    NAME   SIZE  ALLOC  FREE  CAP  DEDUP  HEALTH  ALTROOT
    rpool  279G   146K  279G   0%  1.00x  ONLINE  -
  5. 验证您是否可以从新磁盘成功引导。

如何替换 ZFS 根池中的磁盘(SPARC 或 x86/VTOC)

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

在镜像根池配置下,可以尝试替换磁盘,而不一定要从备用介质引导。可以使用 zpool replace 命令替换故障磁盘,如果有额外的磁盘,则可使用 zpool attach 命令。有关附加额外磁盘和分离根池磁盘的示例,请参见以下步骤。

具有 SATA 磁盘的系统要求您在尝试通过 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
<Confirm that the new disk has an SMI label and a slice 0>
# zpool online rpool c1t0d0s0
# zpool replace rpool c1t0d0s0
# zpool status rpool
<Let disk resilver before installing the boot blocks>
# bootadm install-bootloader

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

  1. 物理连接替换磁盘。
  2. 如有必要,准备另一个要附加到根池的磁盘。
  3. 将新磁盘连接到根池。

    例如:

    # zpool attach rpool c2t0d0s0 c2t1d0s0
    Make sure to wait until resilver is done before rebooting.

    正确的磁盘标签和引导块将被自动应用。

  4. 确认根池状态。

    例如:

    # zpool status rpool
      pool: rpool
     state: ONLINE
     scan: resilvered 11.7G in 0h5m with 0 errors on Fri Jul 20 13:45:37 2012
    config:
    
            NAME          STATE     READ WRITE CKSUM
            rpool         ONLINE       0     0     0
              mirror-0    ONLINE       0     0     0
                c2t0d0s0  ONLINE       0     0     0
                c2t1d0s0  ONLINE       0     0     0
    
    errors: No known data errors
  5. 重新同步完成后,验证是否可以从新磁盘引导。

    例如,在基于 SPARC 的系统上:

    ok boot /pci@1f,700000/scsi@2/disk@1,0

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

    /pci@1f,700000/scsi@2/disk@0,0

    在以下示例中,替换引导磁盘为 (c2t1d0s0):

    boot /pci@1f,700000/scsi@2/disk@1,0
  6. 如果系统从新磁盘引导,则分离旧磁盘。

    例如:

    # zpool detach rpool c2t0d0s0
  7. 如果要附加较大的磁盘,请设置池的 autoexpand 属性,以扩展池的大小。
    # zpool set autoexpand=on rpool

    或者,扩展设备:

    # zpool online -e c2t1d0s0
  8. 将系统设置为自动从新磁盘引导。
    • SPARC:通过使用引导 PROM 中的 eeprom 命令或 setenv 命令,将系统设置为自动从新磁盘引导。

    • x86:重新配置系统 BIOS。

如何替换 ZFS 根池中的磁盘(SPARC 或 x86/EFI (GPT))

在大多数情况下,Oracle Solaris 11.1 发行版将缺省在基于 x86 的系统上安装 EFI (GPT) 标签。

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

在镜像根池配置下,可以尝试替换磁盘,而不一定要从备用介质引导。可以使用 zpool replace 命令替换故障磁盘,如果有额外的磁盘,则可使用 zpool attach 命令。有关附加额外磁盘和分离根池磁盘的示例,请参见以下步骤。

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

# zpool offline rpool c1t0d0
# cfgadm -c unconfigure c1::dsk/c1t0d0
<Physically remove failed disk c1t0d0>
<Physically insert replacement disk c1t0d0>
# cfgadm -c configure c1::dsk/c1t0d0
# zpool online rpool c1t0d0
# zpool replace rpool c1t0d0
# zpool status rpool
<Let disk resilver before installing the boot blocks>
x86# bootadm install-bootloader

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

  1. 物理连接替换磁盘。
  2. 将新磁盘连接到根池。

    例如:

    # zpool attach rpool c2t0d0 c2t1d0
    Make sure to wait until resilver is done before rebooting.

    正确的磁盘标签和引导块将被自动应用。

  3. 确认根池状态。

    例如:

    # zpool status rpool
      pool: rpool
     state: ONLINE
      scan: resilvered 11.6G in 0h5m with 0 errors on Fri Jul 20 12:06:07 2012
    config:
    
            NAME        STATE     READ WRITE CKSUM
            rpool       ONLINE       0     0     0
              mirror-0  ONLINE       0     0     0
                c2t0d0  ONLINE       0     0     0
                c2t1d0  ONLINE       0     0     0
    
    errors: No known data errors
  4. 重新同步完成后,验证是否可以从新磁盘引导。
  5. 如果系统从新磁盘引导,则分离旧磁盘。

    例如:

    # zpool detach rpool c2t0d0
  6. 如果要附加较大的磁盘,请设置池的 autoexpand 属性,以扩展池的大小。
    # zpool set autoexpand=on rpool

    或者,扩展设备:

    # zpool online -e c2t1d0
  7. 将系统设置为自动从新磁盘引导。

    重新配置系统 BIOS。

如何在另一个根池中创建 BE(SPARC 或 x86/VTOC)

如果要在另一个根池中重新创建现有的 BE,请按照下面的步骤操作。您可以修改这些步骤,具体取决于您是希望获得具有独立的交换和转储设备的两个类似 BE,还是仅希望在另一个根池中获得共享交换和转储设备的一个 BE。

从第二个根池中的新 BE 激活和引导后,关于第一个根池中以前 BE 的信息将不再存在。如果要引导回原始 BE,将需要从原始根池的引导磁盘手动引导系统。

  1. 使用带 SMI (VTOC) 标签的磁盘创建另一个根池。例如:
    # zpool create rpool2 c4t2d0s0
  2. 在第二个根池中创建新 BE。例如:
    # beadm create -p rpool2 solaris2
  3. 设置第二个根池的 bootfs 属性。例如:
    # zpool set bootfs=rpool2/ROOT/solaris2 rpool2
  4. 激活新 BE。例如:
    # beadm activate solaris2
  5. 从新 BE 引导,但是必须专门从第二个根池的引导设备引导。
    ok boot disk2

    系统应该在新 BE 之下运行。

  6. 重新创建交换卷。例如:
    # zfs create -V 4g rpool2/swap
  7. 为新交换设备更新 /etc/vfstab 项。例如:
    /dev/zvol/dsk/rpool2/swap       -               -               swap -     no      -
  8. 重新创建转储卷。例如:
    # zfs create -V 4g rpool2/dump
  9. 重置转储设备。例如:
    # dumpadm -d /dev/zvol/dsk/rpool2/dump
  10. 重置缺省的引导设备,以便从第二个根池的引导磁盘引导。
    • SPARC-通过使用引导 PROM 中的 eeprom 命令和 setenv 命令,将系统设置为自动从新磁盘引导。

    • x86-重新配置系统 BIOS。

  11. 重新引导以清除原始根池的交换和转储设备。
    # init 6

如何在另一个根池中创建 BE(SPARC 或 x86/EFI (GPT))

在大多数情况下,Oracle Solaris 11.1 发行版将缺省在基于 x86 的系统上安装 EFI (GPT) 标签。

如果要在另一个根池中重新创建现有的 BE,请按照下面的步骤操作。您可以修改这些步骤,具体取决于您是希望获得具有独立的交换和转储设备的两个类似 BE,还是仅希望在另一个根池中获得共享交换和转储设备的一个 BE。

从第二个根池中的新 BE 激活和引导后,关于第一个根池中以前 BE 的信息将不再存在。如果要引导回原始 BE,将需要从原始根池的引导磁盘手动引导系统。

  1. 创建备用根池。
    # zpool create -B rpool2 c2t2d0

    或者,创建一个镜像备用根池。例如:

    # zpool create -B rpool2 mirror c2t2d0 c2t3d0
  2. 在第二个根池中创建新 BE。例如:
    # beadm create -p rpool2 solaris2
  3. 将引导信息应用于第二个根池。例如:
    # bootadm install-bootloader -P rpool2
  4. 设置第二个根池的 bootfs 属性。例如:
    # zpool set bootfs=rpool2/ROOT/solaris2 rpool2
  5. 激活新 BE。例如:
    # beadm activate solaris2
  6. 从新的 BE 引导。
    • SPARC-通过使用引导 PROM 中的 eeprom 命令和 setenv 命令,将系统设置为自动从新磁盘引导。

    • x86-重新配置系统 BIOS。

    系统应该在新 BE 之下运行。

  7. 重新创建交换卷。例如:
    # zfs create -V 4g rpool2/swap
  8. 为新交换设备更新 /etc/vfstab 项。例如:
    /dev/zvol/dsk/rpool2/swap       -               -               swap -     no      -
  9. 重新创建转储卷。例如:
    # zfs create -V 4g rpool2/dump
  10. 重置转储设备。例如:
    # dumpadm -d /dev/zvol/dsk/rpool2/dump
  11. 重新引导以清除原始根池的交换和转储设备。
    # init 6