以下过程说明如何创建双向镜像。该过程也可用于创建三向或四向镜像。
请查看创建 Solaris Volume Manager 组件的先决条件和创建和维护 RAID-1 卷。
创建两个条带化或串联的卷,这些组件会成为子镜像。
要创建镜像,请使用以下方法之一:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令创建单向镜像:
# metainit volume-name -m submirror-name |
指定要创建的卷的名称
指定要创建镜像
指定将成为镜像中的第一个子镜像的组件的名称
有关更多信息,请参见以下示例和 metainit(1M) 手册页。
要添加第二个子镜像,请使用以下方法之一:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择要修改的镜像。选择“操作”⇒“属性”,然后选择“子镜像”。按照屏幕上的说明附加子镜像。有关更多信息,请参见联机帮助。
使用以下格式的 metattach 命令:
# metattach volume-name submirror-name |
指定要向其中添加子镜像的 RAID-1 卷的名称
指定将成为附加到该镜像的第二个子镜像的组件的名称
有关更多信息,请参见以下示例和 metattach(1M) 手册页。
# metainit d51 1 1 c0t0d0s2 d51: Concat/Stripe is setup # metainit d52 1 1 c1t0d0s2 d52: Concat/Stripe is setup # metainit d50 -m d51 d50: Mirror is setup # metattach d50 d52 d50: Submirror d52 is attached |
以下示例说明如何创建双向镜像 d50。可以使用 metainit 命令创建两个子镜像(d51 和 d52),即 RAID-0 卷。可以使用 metainit -m 命令从 d51 RAID-0 卷创建单向镜像。可以使用 metattach 命令附加 d52,从而创建一个双向镜像并导致重新同步。在重新同步的过程中,所附加的子镜像中的任何数据都会被其他子镜像覆写。
# metainit d51 1 1 c0t0d0s2 d51: Concat/Stripe is setup # metainit d52 1 1 c1t0d0s2 d52: Concat/Stripe is setup # metainit d50 -m d51 d52 metainit: d50: WARNING: This form of metainit is not recommended. The submirrors may not have the same data. Please see ERRORS in metainit(1M) for additional information. d50: Mirror is setup |
本示例说明如何创建双向镜像 d50。可以使用 metainit 命令创建两个子镜像(d51 和 d52),即 RAID-0 卷。然后,针对这两个子镜像运行 metainit -m 命令以创建镜像。如果使用 metainit 命令而非 metattach 命令创建镜像,则不会执行重新同步操作。因此,当 Solaris Volume Manager 假定镜像的两面相同并且可以互换使用时,数据可能会损坏。
要为文件系统准备新创建的镜像,请参见《系统管理指南:设备和文件系统》中的第 18 章 “创建 UFS、TMPFS 和 LOFS 文件系统(任务)”。某些应用程序(如数据库)不使用文件系统,而是使用原始设备。这些应用程序必须能够以自己的方式来访问原始设备。
使用本过程可以对现有文件系统进行镜像。如果该文件系统可以取消挂载,则无需重新引导即可完成整个过程。对于无法取消挂载的文件系统(如 /usr 和 /swap),必须重新引导系统才能完成该过程。
如果从构建于磁盘片上的现有文件系统创建 RAID-1 卷,则主 RAID-0 卷(子镜像)中只能包含这一个片。如果要镜像对系统非常关键的文件系统,则所有的子镜像都必须仅包含一个片。
有关与对根 (/) 文件系统进行镜像相关联的过程,请参见SPARC: 如何从根 (/) 文件系统创建 RAID-1 卷和x86: 如何使用 DCA 从根 (/) 文件系统创建 RAID-1 卷。
在本过程使用的示例中,现有的片是 c1t0d0s0。第二个片 c1t1d0s0 适用于镜像的另一半。子镜像分别是 d1 和 d2,镜像是 d0。
请确保使用 metainit 命令创建单向镜像,然后使用 metattach 命令附加其他子镜像。如果不使用 metattach 命令,则不会执行重新同步操作。因此,当 Solaris Volume Manager 假定镜像的两面相同并且可以互换使用时,数据可能会损坏。
请查看创建 Solaris Volume Manager 组件的先决条件和创建和维护 RAID-1 卷。
确定包含要进行镜像的现有文件系统的片,本示例使用片 c1t0d0s0。
使用以下方法之一,在上一步中的片上创建一个新的 RAID-0 卷:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的metainit 命令:
# metainit -f volume-name number-of-stripes components-per-stripe component-name |
强制继续执行该命令。如果片中包含已挂载的文件系统,则必须使用此选项。
指定要创建的卷的名称。有关对卷进行命名的信息,请参见卷名称。
指定要创建的条带的数目。
指定每个条带应包含的组件的数目。
指定所使用的组件的名称。本示例使用根片 c0t0d0s0。
在未使用的片(在本示例中为 c1t1d0s0)上创建另一个 RAID-0 卷(串联),将其用作第二个子镜像。第二个子镜像不得小于原来的子镜像的大小。请使用以下方法之一:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”->“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit volume-name number-of-stripes components-per-stripe component-name |
有关这些选项的说明,请参见步骤 2。
使用以下方法之一创建单向镜像:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的metainit 命令:
# metainit volume-name -m submirror-name |
指定要创建的卷的名称。
指定要创建镜像。
指定将成为镜像中的第一个子镜像的组件的名称。在本示例中,这是包含根片的 RAID-0 卷。
有关更多信息,请参见 metainit(1M) 手册页。
从现有文件系统创建镜像时,必须严格按照以下两个步骤操作以避免数据损坏。
编辑 /etc/vfstab 文件,以便文件系统挂载指令引用镜像,而不引用块设备。有关 /etc/vfstab 文件的更多信息,请参见《系统管理指南:设备和文件系统》中的“挂载文件系统”。
例如,如果 /etc/vfstab 文件包含文件系统的以下项:
/dev/dsk/slice /dev/rdsk/slice /var ufs 2 yes - |
请更改该项,使其显示为:
/dev/md/dsk/mirror-name /dev/md/rdsk/mirror-name /var ufs 2 yes - |
按照以下过程之一重新挂载新镜像的文件系统:
如果要对可以取消挂载的文件系统进行镜像,则取消挂载该文件系统并将其重新挂载。
# umount /filesystem # mount /filesystem |
如果要对无法取消挂载的文件系统进行镜像,则重新引导系统。
# reboot |
# metattach volume-name submirror-name |
指定要向其中添加子镜像的 RAID-1 卷的名称
指定将成为附加到该镜像的第二个子镜像的组件的名称
有关更多信息,请参见 metattach(1M) 手册页。
# metainit -f d1 1 1 c1t0d0s0 d1: Concat/Stripe is setup # metainit d2 1 1 c1t1d0s0 d2: Concat/Stripe is setup # metainit d0 -m d1 d0: Mirror is setup # umount /master (编辑 /etc/vfstab 文件使该文件系统引用镜像) # mount /master # metattach d0 d2 d0: Submirror d2 is attached |
在本示例中,-f 选项会强制创建第一个串联 d1,其中包含已在 /dev/dsk/c1t0d0s0 上挂载的文件系统 /master。第二个串联 d2 是从 /dev/dsk/c1t1d0s0 创建的。该片不得小于 d1 的大小。带有 -m 选项的 metainit 命令可用来从 d1 创建单向镜像 d0。
接下来,应当在 /etc/vfstab 文件中更改与文件系统对应的项,使其引用该镜像。/etc/vfstab 文件中以下行最初如下所示:
/dev/dsk/c1t0d0s0 /dev/rdsk/c1t0d0s0 /var ufs 2 yes - |
该项更改为如下所示:
/dev/md/dsk/d0 /dev/md/rdsk/d0 /var ufs 2 yes - |
最后,重新挂载该文件系统,并将子镜像 d2 附加到该镜像,这会导致重新同步镜像。系统会确认是否已设置 RAID-0 和 RAID-1 卷并已附加子镜像 d2。
# metainit -f d12 1 1 c0t3d0s6 d12: Concat/Stripe is setup # metainit d22 1 1 c1t0d0s6 d22: Concat/Stripe is setup # metainit d2 -m d12 d2: Mirror is setup (编辑 /etc/vfstab 文件使 /usr 引用该镜像) # reboot ... # metattach d2 d22 d2: Submirror d22 is attached |
本示例使用包含 /usr 文件系统的片创建双向镜像。-f 选项会强制创建第一个串联 d12,其中包含已在 /dev/dsk/c0t3d0s6 上挂载的文件系统 /usr。第二个串联 d22 是从 /dev/dsk/c1t0d0s6 创建的。该片不得小于 d12 的大小。带有 -m 选项的 metainit 命令使用包含 /usr 文件系统的串联创建单向镜像 d2。接下来,必须编辑 /etc/vfstab 文件以更改 /usr 的项,使其引用该镜像。
/etc/vfstab file 包含 /usr 文件系统的以下项:
/dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /usr ufs 1 yes - |
将该项更改为如下所示:
/dev/md/dsk/d2 /dev/md/rdsk/d2 /usr ufs 1 yes - |
重新引导之后,第二个子镜像 d22 将附加到该镜像,这会导致对镜像重新同步。
# metainit -f d11 1 1 c0t0d0s1 d11: Concat/Stripe is setup # metainit d21 1 1 c1t0d0s1 d21: Concat/Stripe is setup # metainit d1 -m d11 d1: Mirror is setup (编辑 /etc/vfstab 文件使 swap 引用该镜像) # reboot ... # metattach d1 d21 d1: Submirror d21 is attached |
在本示例中,-f 选项会强制创建第一个串联 d11,其中包含已在 /dev/dsk/c0t0d0s1 上挂载的文件系统 swap。第二个串联 d21 是从 /dev/dsk/c1t0d0s1 创建的。该片不得小于 d11 的大小。带有 -m 选项的 metainit 命令可使用包含 swap 的串联创建单向镜像 d1。接下来,如果 /etc/vfstab 文件中存在与 swap 对应的项,则必须编辑该项,使其引用该镜像。
/etc/vfstab file 包含 swap 空间的以下项:
/dev/dsk/c0t0d0s1 - - swap - no - |
请更改该项,使其显示为:
/dev/md/dsk/d1 - - swap - no - |
重新引导之后,第二个子镜像 d21 将附加到该镜像,这会导致对镜像重新同步。
要在对 swap 空间进行镜像之后保存崩溃转储,请使用 dumpadm 命令将转储设备配置为卷。例如,如果交换设备的名称为 /dev/md/dsk/d2,请使用 dumpadm 命令将该设备设置为转储设备。
对 SPARC 平台上的根 (/) 文件系统进行镜像的过程与对无法取消挂载的其他任何文件系统进行镜像的过程相似,区别在于前者运行 metaroot 命令,而不是手动编辑 /etc/vfstab 文件。对根 (/) 文件系统进行镜像还需要记录备用引导设备的路径。如果子镜像失败,此设备会重新引导系统。
在本过程使用的示例中,现有的片是 c1t0d0s0。第二个片 c1t1d0s0 适用于镜像的另一半。子镜像分别是 d1 和 d2,镜像是 d0。
请确保使用 metainit 命令创建单向镜像,然后使用 metattach 命令附加其他子镜像。如果不使用 metattach 命令,则不会执行重新同步操作。因此,当 Solaris Volume Manager 假定镜像的两面相同并且可以互换使用时,数据可能会损坏。
请查看创建 Solaris Volume Manager 组件的先决条件和创建和维护 RAID-1 卷。
确定包含要进行镜像的现有根 (/) 文件系统的片。本示例使用片 c1t0d0s0。
使用以下方法之一,在上一步中的片上创建一个新的 RAID-0 卷。RAID-0 卷中只能包含一个片。
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit -f volume-name number-of-stripes components-per-stripe component-name |
强制继续执行该命令。如果片中包含已挂载的文件系统,则必须使用此选项。
指定要创建的卷的名称。有关对卷进行命名的信息,请参见卷名称。
指定要创建的条带的数目。
指定每个条带应包含的组件的数目。
指定所使用的组件的名称。本示例使用根片 c0t0d0s0。
在未使用的片(在本示例中为 c1t1d0s0)上创建另一个 RAID-0 卷,将其用作第二个子镜像。辅助子镜像不得小于原来的子镜像的大小。请使用以下方法之一:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”->“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit volume-name number-of-stripes components-per-stripe component-name |
有关这些选项的说明,请参见步骤 2。
使用以下方法之一创建单向镜像:
重新挂载刚进行镜像的文件系统。运行 metaroot volume-name 命令,将 volume-name 替换为已创建的镜像的名称。然后重新引导系统。
# metaroot volume-name # reboot |
有关更多信息,请参见 metaroot(1M) 手册页。
# metattach volume-name submirror-name |
指定要向其中添加子镜像的 RAID-1 卷的名称
指定将成为附加到该镜像的第二个子镜像的组件的名称
有关更多信息,请参见 metattach(1M) 手册页。
记录替代引导路径。
确定备用根设备的路径。针对附加作为根 (/) 文件系统镜像的第二个子镜像的片,使用 ls - l 命令。
# ls -l /dev/dsk/c1t1d0s0 lrwxrwxrwx 1 root root 55 Mar 5 12:54 /dev/rdsk/c1t1d0s0 -> \ ../../devices/sbus@1,f8000000/esp@1,200000/sd@3,0:a |
记录 /devices 目录后面的字符串:/sbus@1,f8000000/esp@1,200000/sd@3,0:a。
由于系统可能不可用,因此还应当将这些信息记录在系统以外的某个位置。有关从备用引导设备引导的详细信息,请参见从引导问题中恢复。
编辑该字符串,将主名称(在本示例中为 sd)更改为 disk,产生的结果为 /sbus@1,f8000000/esp@1,200000/disk@3,0:a。如果系统使用 IDE 总线,则最初的全路径可能如下所示:
$ ls -l /dev/dsk/c1t1d0s0 lrwxrwxrwx 1 root root 38 Mar 13 15:03 /dev/dsk/c0t0d0s0 -> \ ../../devices/pci@1f,0/ide@d/dad@0,0:a |
将主名称 dad 更改为 disk 之后,结果将为 /pci@1f,0/ide@d/disk@0,0:a
使用 OpenBootTM PROM nvalias 命令为辅助根 (/) 文件系统镜像定义“备份根”设备别名。例如:
ok nvalias backup_root /sbus@1,f8000000/esp@1,200000/disk@3,0:a |
重新定义 boot-device 别名,使其按照主子镜像和辅助子镜像的使用顺序来进行引用,并存储该配置。
ok printenv boot-device boot-device = disk net ok setenv boot-device disk backup_root net boot-device = disk backup_root net ok nvstore |
如果主子镜像失败,系统将自动引导到第二个子镜像。或者,如果手动引导而不是使用自动引导,则可输入以下内容:
ok boot backup_root |
# metainit -f d1 1 1 c0t0d0s0 d1: Concat/Stripe is setup # metainit d2 1 1 c0t1d0s0 d2: Concat/Stripe is setup # metainit d0 -m d1 d0: Mirror is setup # metaroot d0 # lockfs -fa # reboot ... # metattach d0 d2 d0: Submirror d2 is attached # ls -l /dev/dsk/c0t1d0s0 lrwxrwxrwx 1 root root 88 Feb 8 15:51 /dev/rdsk/c1t3d0s0 -> ../../devices/pci@1f,0/pci@1,1/ide@3/dad@0,0:a # init 0 . . . ok nvalias backup_root /pci@1f,0/pci@1,1/ide@3/disk@0,0:a ok setenv boot-device disk backup_root net ok nvstore |
在本示例中,-f 选项会强制创建第一个 RAID-0 卷 d1,其中包含已在 /dev/dsk/c0t0d0s0 上挂载的根 (/) 文件系统。第二个串联 d2 是从 /dev/dsk/c0t1d0s0 创建的。该片不得小于 d1 的大小。带有 -m 选项的 metainit 命令可使用包含根 (/) 的串联创建单向镜像 d0。
接下来,使用 metaroot 命令编辑 /etc/vfstab 和 /etc/system 文件,以便可以使用卷上的根 (/) 文件系统引导系统。重新引导之前最好先运行 lockfs -fa 命令。有关更多信息,请参见 lockfs(1M) 手册页。
请勿在重新引导系统之前附加第二个子镜像。必须在运行 metaroot 命令之后和附加第二个子镜像之前重新引导系统。
重新引导之后,子镜像 d2 将附加到该镜像,这会导致对镜像重新同步。系统会确认是否已设置串联和镜像以及是否已附加子镜像 d2。
可以针对根原始设备运行 ls -l 命令,以确定备用根设备的路径,以备系统以后通过该路径进行引导。
从 Solaris 10 1/06 发行版开始,GRand Unified Bootloader (GRUB) 已经取代了基于 x86 的系统中用于引导过程和配置的 Device Configuration Assistant (DCA)。有关此功能及其引入的增强功能的简要说明,请参阅《Solaris 10 新增功能》中的“基于 GRUB 的引导”。
本节中的过程介绍了从根 (/) 文件系统创建 RAID-1 卷的步骤。如果系统运行的是 Solaris 10 1/06 OS 或后续发行版,请按照第一个过程(使用 GRUB)中的步骤操作。否则,请执行第二个过程(使用 DCA)中的步骤。
在基于 x86 的系统上对根 (/) 文件系统进行镜像的过程与在 SPARC 系统上对根文件系统进行镜像的过程相似。但是,在基于 x86 的系统上,BIOS 和 fdisk 分区会使镜像过程更复杂。
在这些过程使用的示例中,现有的片是 c1t0d0s0。第二个片 c1t1d0s0 适用于镜像的另一半。子镜像分别是 d1 和 d2,镜像是 d0。
在实现任何过程之前,请查看创建 Solaris Volume Manager 组件的先决条件和创建和维护 RAID-1 卷。
验证是否可将 BIOS 引导设备的顺序配置为允许系统从镜像中的第二块磁盘引导。
启动内核之前,系统由只读存储器 (read-only-memory, ROM) 基本输入/输出系统 (Basic Input/Output System, BIOS) 控制,该系统是基于 x86 的系统上的固件接口。BIOS 与基于 SPARC 的系统上的引导 PROM 类似。以下是一些 BIOS 任务:
执行启动功能。
检测可从中引导系统的正确设备。
从该设备装入主引导记录,以允许系统自行引导。
通常可以将 BIOS 配置为选择要探测其引导记录的设备的顺序。此外,现在实现的大多数 BIOS 都允许将设备配置为自动向辅助子镜像进行故障转移。如果系统的 BIOS 没有此功能,则主子镜像失败时,需要在系统引导过程中访问 BIOS,以便将系统重新配置为从辅助根片引导。有关如何配置 BIOS 中的设置的说明,请查阅 BIOS 的用户指南。
设置根镜像之前,请检查系统上的 BIOS,验证是否可以从多块磁盘引导。某些设备驱动程序配置为只能看到系统上的一个磁盘。
验证 fdisk 分区是否配置为支持根镜像。
如果对根 (/) 文件系统进行镜像时存在单独的 x86 引导分区,则会出现问题。因为 x86 引导分区位于 Solaris fdisk 分区之外,所以不能通过 Solaris Volume Manager 对 x86 引导分区进行镜像。此外,由于仅存在 x86 引导分区的一个副本,因此它还表示一个单点故障。
Solaris 10 1/06 软件和后续发行版的基于 GRUB 的安装程序不会再自动创建 x86 引导分区。但是,如果系统中已经存在 x86 引导分区,则安装程序在缺省情况下会保留该分区。
要确定系统是否有单独的 x86 引导分区,请检查 /etc/vfstab 文件。如果该文件中包含类似如下的项,则表明存在 x86 引导分区:
/dev/dsk/c2t1d0p0:boot - /boot pcfs - no - |
要使用 Solaris Volume Manager 对根 (/) 文件系统进行镜像,该文件系统必须占用整个 Solaris fdisk 分区。因此,如果系统中已经存在 x86 引导分区,请使用 fdisk 命令删除该分区,然后重新安装 Solaris 软件。重新安装时,将不再重新创建引导分区。
Solaris Volume Manager 只能对 Solaris fdisk 分区中的片进行镜像。如果有多个 fdisk 分区,则需要使用其他方法来保护 Solaris fdisk 分区以外的数据。
使辅助子镜像可以使用主引导程序引导。
指定主引导程序。
# fdisk -b /usr/lib/fs/ufs/mboot /dev/rdsk/c1t1d0p0 |
此时屏幕将显示以下信息:
Total disk size is 31035 cylinders Cylinder size is 1146 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Active Solaris 1 31034 31034 100 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: |
从菜单中选择数字 5,然后按回车键。
使辅助磁盘可引导。
# /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0 |
有关 installgrub 的更多信息,请参阅 installgrub(1M) 手册页。
确定包含要进行镜像的现有根 (/) 文件系统的片。
本示例使用 c1t0d0s0 片。
在上一步中的片上创建一个新的 RAID-0 卷。
RAID-0 卷中只能包含一个片。请使用以下方法之一:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit -f volume-name number-of-stripes components-per-stripe component-name |
强制继续执行该命令。如果片中包含已挂载的文件系统,则必须使用此选项。
指定要创建的卷的名称。有关对卷进行命名的信息,请参见卷名称。
指定要创建的条带的数目。
指定每个条带应包含的组件的数目。
指定所使用的组件的名称。本示例使用根片 c0t0d0s0。
在未使用的片(在本示例中为 c1t1d0s0)上创建另一个 RAID-0 卷,将其用作第二个子镜像。
辅助子镜像不得小于原来的子镜像的大小。另外,用作第二个子镜像的片还必须带有片标记 "root",并且根片必须是片 0。
有关配置片标记字段的信息,请参见 format(1M) 手册页。
请使用以下任一方法:
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”->“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit volume-name number-of-stripes components-per-stripes component-names |
有关这些选项的说明,请参见步骤 6。
使用以下方法之一创建单向镜像:
重新挂载刚进行镜像的文件系统,然后重新引导系统。
# metaroot volume-name # reboot |
有关更多信息,请参见 metaroot(1M) 手册页。
# metattach volume-name submirror-name |
指定要向其中添加子镜像的 RAID-1 卷的名称。
指定将成为附加到该镜像的第二个子镜像的组件的名称。
有关更多信息,请参见 metattach(1M) 手册页。
在 menu.lst 文件中定义替代引导路径。
要使系统可从用来存放辅助子镜像的磁盘引导,请将系统配置为将该磁盘视为备用引导设备。在当前示例中,替代路径 c1t1d0s0 位于第二块磁盘上第一个 fdisk 分区的第一片。因此,可以编辑 menu.lst 中的以下项:
title alternate boot root (hd1,0,a) kernel /boot/multiboot module /boot/x86.miniroot-safe |
要正确编辑 menu.lst 中的各项,必须熟悉 GRUB 中的磁盘命名约定。有关详细信息,请参见《系统管理指南:基本管理》中的第 11 章 “基于 GRUB 的引导(任务)”。
完成编辑 menu.lst 文件之后,系统会设置为向第二块磁盘进行故障转移。如果主磁盘出现故障,则磁盘编号会更改,以便系统从辅助磁盘引导。
在某些情况下,BIOS 的自动磁盘重新编号功能可能会对从不可用的主磁盘进行恢复造成影响。当磁盘重新编号功能强制系统从辅助磁盘引导时,主磁盘的引导归档会过时。如果该主磁盘以后变为可用,则在引导系统时,磁盘重新编号功能会再次切换到从缺省的主磁盘进行系统引导。但是,在这个阶段,主磁盘的引导归档仍然是过时的。因此,系统可能根本无法引导。所以在这种情况下,请确保从 GRUB 菜单中选择正确的项,以便从有效的根归档中引导系统。系统完成引导过程之后,请执行常规的 metadevice 维护,这会对主磁盘和辅助磁盘均进行同步,并将有效的引导归档恢复到主磁盘。
验证是否可将 BIOS 引导设备的顺序配置为允许系统从镜像中的第二块磁盘引导。
启动内核之前,系统由只读存储器 (read-only-memory, ROM) 基本输入/输出系统 (Basic Input/Output System, BIOS) 控制,该系统是基于 x86 的系统上的固件接口。BIOS 与基于 SPARC 的系统上的引导 PROM 类似。除了 BIOS 的其他启动功能以外,它还负责查找要从中引导系统的正确设备,以及从允许系统自行引导的设备中装入主引导记录。通常可以将 BIOS 配置为选择要探测其引导记录的设备的顺序。此外,现在实现的大多数 BIOS 都允许将设备配置为自动向辅助子镜像进行故障转移。如果系统没有此功能,则主子镜像失败时,需要在系统引导过程中访问 BIOS,以便将系统重新配置为从辅助根片引导。有关如何配置 BIOS 中的设置的说明,请查阅 BIOS 的用户指南。
可以使用系统上的 DCA来验证是否可以从多块磁盘引导。某些设备驱动程序配置为只能看到系统上的一个磁盘。
验证 fdisk 分区是否配置为支持根镜像。
基于 x86 的系统的另一个功能是可使用 fdisk 分区。使用 Solaris OS 安装程序缺省的引导磁盘分区布局可以创建两个分区,一个是 Solaris fdisk 分区,另一个是名为 x86 引导分区的 fdisk 分区,其大小大约为 10MB。
对根 (/) 文件系统进行镜像时,x86 引导分区会产生问题。x86 引导分区位于 Solaris fdisk 分区外部。因此,x86 引导分区不能由 Solaris Volume Manager 进行镜像。此外,由于仅存在 x86 引导分区的一个副本,因此它还表示一个单点故障。
可以确定 Solaris OS 是否有一个单独的 x86 引导分区。x86 引导分区会挂载到 /etc/vfstab 文件中,其中包含类似如下的项:
/dev/dsk/c2t1d0p0:boot - /boot pcfs - no - |
如果不存在单独的 x86 引导分区,则该项不会出现在 /etc/vfstab 文件中。
要对根 (/) 文件系统进行镜像,需要自定义 fdisk 分区,以便删除 x86 引导分区并使用单个 Solaris fdisk 分区。如果要使用 Solaris Volume Manager 根镜像,请不要在系统安装过程中创建单独的 x86 引导分区。如果系统已经安装并且创建了一个单独的 x86 引导分区,请使用 fdisk 命令删除该 fdisk 分区并重新安装系统。在安装过程中,请避免通过在安装过程中自定义磁盘分区来创建单独的 x86 引导分区。
Solaris Volume Manager 只能对 Solaris fdisk 分区中的片进行镜像。如果有多个 fdisk 分区,则需要使用其他方法来保护 Solaris fdisk 分区以外的数据。
使辅助子镜像可以使用主引导程序引导。
使用 fdisk 命令来指定主引导程序。
# fdisk -b /usr/lib/fs/ufs/mboot /dev/rdsk/c1t1d0p0 |
此时屏幕将显示以下信息:
Total disk size is 31035 cylinders Cylinder size is 1146 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Active Solaris 1 31034 31034 100 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: |
从菜单中选择数字 5,然后按回车键。
在辅助子镜像中安装引导块,以便可从该镜像引导系统。
辅助子镜像所在磁盘上的片 8 是从该 fdisk 分区引导 Solaris OS 所必需的。该片用来存放分区引导记录 (pboot)、磁盘的 Solaris VTOC 和引导块。由于这些信息特定于磁盘,因此不能使用 Solaris Volume Manager 进行镜像。但是,必须确保这两块磁盘都是可引导的,以便可以在主磁盘出现故障时从辅助磁盘引导。使用 installboot 命令可将第二块磁盘设置为 Solaris 可引导磁盘。有关更多信息,请参见 installboot(1M) 手册页。
必须将磁盘的片 2 指定为设备,并且片 2 必须包含整块磁盘。
# installboot /usr/platform/i86pc/lib/fs/ufs/pboot \ /usr/platform/i86pc/lib/fs/ufs/bootblk /dev/rdsk/c1t1d0s2 |
确定包含要进行镜像的现有根 (/) 文件系统的片。本示例使用片 c1t0d0s0。
使用以下方法之一,在上一步中的片上创建一个新的 RAID-0 卷。RAID-0 卷中只能包含一个片。
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit -f volume-name number-of-stripes components-per-stripe component-name |
强制继续执行该命令。如果片中包含已挂载的文件系统,则必须使用此选项。
指定要创建的卷的名称。有关对卷进行命名的信息,请参见卷名称。
指定要创建的条带的数目。
指定每个条带应包含的组件的数目。
指定所使用的组件的名称。本示例使用根片 c0t0d0s0。
在未使用的片(在本示例中为 c1t1d0s0)上创建另一个 RAID-0 卷,将其用作第二个子镜像。辅助子镜像不得小于原来的子镜像的大小。请使用以下方法之一:
用作第二个子镜像的片必须带有片标记 "root",并且根片必须是片 0。有关配置片标记字段的信息,请参见 format(1M) 手册页。
从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”->“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。
使用以下格式的 metainit 命令:
# metainit volume-name number-of-stripes components-per-stripes component-names |
有关这些选项的说明,请参见步骤 6。
使用以下方法之一创建单向镜像:
重新挂载刚进行镜像的文件系统。运行 metaroot volume-name 命令,将 volume-name 替换为已创建的镜像的名称。然后重新引导系统。
# metaroot volume-name # reboot |
有关更多信息,请参见 metaroot(1M) 手册页。
# metattach volume-name submirror-name |
指定要向其中添加子镜像的 RAID-1 卷的名称。
指定将成为附加到该镜像的第二个子镜像的组件的名称。
有关更多信息,请参见 metattach(1M) 手册页。
记录替代引导路径。
需要对系统进行配置,以便在主子镜像失败时,系统从辅助子镜像引导。要使系统可从用来存放辅助子镜像的磁盘引导,请将系统配置为将该磁盘视为备用引导设备。
确定备用引导设备的路径。针对附加作为根 (/) 文件系统镜像的第二个子镜像的片,使用 ls - l 命令。
# ls -l /dev/dsk/c1t1d0s0 lrwxrwxrwx 1 root root 55 Mar 5 12:54 /dev/rdsk/c1t1d0s0 -> ../. ./devices/eisa/eha@1000,0/cmdk@1,0:a |
记录 /devices 目录后面的字符串:/eisa/eha@1000,0/cmdk@1,0:a。这是设备树的路径。
由于系统可能不可用,因此应当将这些信息记录在系统以外的某个位置。这样,必须使用 DCA 引导系统时,可以更方便地输入设备树的路径信息。
使用 eeprom 命令定义替代引导路径。例如:
# eeprom altbootpath=/eisa/eha@1000,0/cmdk@1,0:a |
如果主子镜像失败,系统会尝试从辅助子镜像引导。如果可将 BIOS 配置为自动故障转移到第二块磁盘,则引导过程是自动的。否则,需要进入 BIOS 并将其配置为从辅助磁盘引导。系统开始引导之后,即会尝试从 bootpath 设备引导。由于主引导磁盘是根镜像中的停用磁盘,因此系统随后会尝试从 altbootpath 设备引导。有关如何配置 BIOS 中的设置的说明,请查阅 BIOS 的用户指南。
如果系统不会自动引导,则可以尝试使用 DCA 来选择辅助子镜像。在某些系统上,可以选择在引导过程中进入 DCA。如果不提供此选项,则需要从 x86 引导软盘引导,并使用 DCA 来选择辅助子镜像。操作系统引导之后,请使用设置为替代引导路径的值(bootpath 值)来更新 eeprom bootpath 值。然后,系统将自动引导。
有关使用 eeprom 命令的更多信息,请参见 eeprom(1M) 手册页。
# metainit -f d1 1 1 c0t0d0s0 d1: Concat/Stripe is setup # metainit d2 1 1 c0t1d0s0 d2: Concat/Stripe is setup # metainit d0 -m d1 d0: Mirror is setup # metaroot d0 # lockfs -fa # reboot ... # metattach d0 d2 d0: Submirror d2 is attached # ls -l /dev/dsk/c0t1d0s0 lrwxrwxrwx 1 root root 88 Feb 8 15:51 /dev/dsk/c1t3d0s0 -> ../../devices/pci@1f,0/pci@1,1/ide@3/dad@0,0:a,raw # eeprom altbootpath=/pci@1f,0/pci@1,1/ide@3/dad@0,0:a,raw # fdisk -b /usr/lib/fs/ufs/mboot /dev/dsk/c0t1d0p0 Total disk size is 31035 cylinders Cylinder size is 1146 (512 byte) blocks Cylinders Partition Status Type Start End Length % ========= ====== ============ ===== === ====== === 1 Active Solaris 1 31034 31034 100 SELECT ONE OF THE FOLLOWING: 1. Create a partition 2. Specify the active partition 3. Delete a partition 4. Change between Solaris and Solaris2 Partition IDs 5. Exit (update disk configuration and exit) 6. Cancel (exit without updating disk configuration) Enter Selection: 5 # installboot /usr/platform/i86pc/lib/fs/ufs/pboot \ /usr/platform/i86pc/lib/fs/ufs/bootblk /dev/rdsk/c0t1d0s2 |
对根 (/) 文件系统进行镜像之后,控制台中将会显示错误消息,这些错误消息将记录在 /etc/syslog.conf 文件中定义的系统日志中。这些错误消息并不表明存在问题。这些消息显示的是当前不能使用的每种设备类型,因为不能强制装入未使用的模块。错误消息如下所示:
Jul 13 10:17:42 ifr genunix: [ID 370176 kern.warning] WARNING: forceload of misc/md_trans failed Jul 13 10:17:42 ifr genunix: [ID 370176 kern.warning] WARNING: forceload of misc/md_raid failed Jul 13 10:17:42 ifr genunix: [ID 370176 kern.warning] WARNING: forceload of misc/md_hotspares failed |
可以放心地忽略这些错误消息。