基于 SPARC 和基于 x86 的系统都使用新型的引导方式,即通过引导归档文件进行引导,引导归档文件是一个文件系统映像,该映像中包含进行引导时所需的文件。从 ZFS 根文件系统引导系统时,将会在选择用来进行引导的根文件系统中解析引导归档文件和内核文件的路径名。
引导系统进行安装时,在整个安装过程中,RAM 磁盘用于根文件系统。
从 ZFS 文件系统引导不同于从 UFS 文件系统引导,因为对于 ZFS,引导设备说明符标识存储池,而不是单个根文件系统。存储池可能包含多个可引导的数据集或 ZFS 根文件系统。从 ZFS 引导时,必须指定引导设备和由该引导设备标识的池中的根文件系统。
缺省情况下,选择用来进行引导的数据集是由池的 bootfs 属性标识的。通过在 boot -Z 命令中指定备用可引导数据集可以覆盖此缺省选择。
您可以在安装系统时创建镜像 ZFS 根池,也可以在安装后通过附加磁盘来创建镜像 ZFS 根池。有关更多信息,请参见:
请查看以下有关镜像 ZFS 根池的已知问题:
CR 6668666-要允许在镜像中的其他磁盘上引导,则必须使用 installboot 或 installgrub 命令在额外附加的磁盘上安装引导信息。如果使用初始安装方法创建镜像 ZFS 根池,则不需要此步骤。例如,如果 c0t1d0s0 是添加到镜像的第二个磁盘,则 installboot 或 installgrub 命令语法将如下所示:
SPARC:
sparc# installboot -F zfs /usr/platform/`uname -i`/lib/fs/zfs/bootblk /dev/rdsk/c0t1d0s0 |
x86:
x86# installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c0t1d0s0 |
您可以从镜像 ZFS 根池中的不同设备引导。根据硬件配置,可能需要更新 PROM 或 BIOS 以指定不同的引导设备。
例如,您可以从以下池中的任一磁盘(c1t0d0s0 或 c1t1d0s0)引导。
# 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 |
SPARC:在 ok 提示符下输入备用磁盘。
ok boot /pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0 |
重新引导系统后,确认活动引导设备。例如:
SPARC# prtconf -vp | grep bootpath bootpath: '/pci@7c0/pci@0/pci@1/pci@0,2/LSILogic,sas@2/disk@0,0:a' |
x86:从相应的 BIOS 菜单中选择镜像 ZFS 根池中的备用磁盘。
然后,使用类似以下的语法确认系统是从备用磁盘引导:
x86# prtconf -v|sed -n '/bootpath/,/value/p' name='bootpath' type=string items=1 value='/pci@0,0/pci8086,25f8@4/pci108e,286@0/disk@0,0:a' |
在具有多个 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 的系统上,提供了两个新的引导选项:
激活 BE 后,您可以使用 boot -L 命令显示 ZFS 池中可引导的数据集列表。然后,您可以在列表中选择可引导的数据集之一。此时将会显示有关引导该数据集的详细说明。您可以按照这些说明来引导选定的数据集。
您可以使用 boot -Z dataset 命令引导特定的 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 |
在基于 SPARC 的系统上,您可以按如下方式从位于 /platform/`uname -i`/failsafe 的故障安全归档文件引导:
ok boot -F failsafe |
要从特定的 ZFS 可引导数据集引导故障安全归档文件,请使用类似如下的语法:
ok boot -Z rpool/ROOT/zfsBE -F failsafe |
在 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 |
从 ZFS 文件系统引导系统时,根设备由 GRUB 菜单项中的 -kernel 或 module 行上的 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 |
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 |
更改活动引导环境的最佳方法是使用 luactivate 命令。如果由于错误的修补程序或配置错误而导致引导活动环境失败,则从其他环境引导的唯一方法是在引导时选择该环境。您可以在基于 x86 的系统上从 GRUB 菜单中选择备用 BE,或在基于 SPARC 的系统上从 PROM 中显式引导备用 BE。
由于 Solaris 10 10/08 发行版 Oracle Solaris Live Upgrade 功能中的错误,非活动引导环境可能无法引导,因为引导环境中的 ZFS 数据集或区域的 ZFS 数据集有无效的挂载点。如果 BE 有单独的 /var 数据集,则上述错误还会阻止该 BE 挂载。
如果区域数据集有无效的挂载点,通过下列步骤可以更正该挂载点。
从故障安全归档文件引导系统。
导入池。
例如:
# zpool import rpool |
查找不正确的临时挂载点。
例如:
# 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 数据集查找类似不正确的临时挂载点。
重置 ZFS BE 及其数据集的挂载点。
例如:
# zfs inherit -r mountpoint rpool/ROOT/s10u6 # zfs set mountpoint=/ rpool/ROOT/s10u6 |
重新引导系统。
当提供选项来引导特定的引导环境时(在 GRUB 菜单中或 OpenBoot PROM 提示符下),请选择刚刚更正其挂载点的引导环境。
如果您需要引导系统,以解决根密码丢失或类似问题,请使用以下过程。
需要引导故障安全模式或从备用介质引导,具体取决于错误的严重程度。一般而言,引导故障安全模式可以解决根密码丢失或未知问题。
如果您需要恢复根池或根池快照,请参见恢复 ZFS 根池或根池快照。
引导故障安全模式。
在 SPARC 系统上:
ok boot -F failsafe |
在 x86 系统上,从 GRUB 提示符下选择故障安全模式。
提示时,将 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. |
变更到 /a/etc 目录。
# cd /a/etc |
如有必要,设置 TERM 类型。
# TERM=vt100 # export TERM |
修正 passwd 或 shadow 文件。
# vi shadow |
重新引导系统。
# init 6 |
如果某个问题妨碍系统成功引导,或者发生其它严重问题,您将需要从网络安装服务器或者 Solaris 安装 CD 引导,导入根池,挂载 ZFS BE,并尝试解决问题。