Solaris Volume Manager 管理指南

x86: 从根 (/) 文件系统创建 RAID-1 卷

从 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 适用于镜像的另一半。子镜像分别是 d1d2,镜像是 d0


注 –

在实现任何过程之前,请查看创建 Solaris Volume Manager 组件的先决条件创建和维护 RAID-1 卷


Procedurex86: 如何使用 GRUB 从根 (/) 文件系统创建 RAID-1 卷

  1. 验证是否可将 BIOS 引导设备的顺序配置为允许系统从镜像中的第二块磁盘引导。

    启动内核之前,系统由只读存储器 (read-only-memory, ROM) 基本输入/输出系统 (Basic Input/Output System, BIOS) 控制,该系统是基于 x86 的系统上的固件接口。BIOS 与基于 SPARC 的系统上的引导 PROM 类似。以下是一些 BIOS 任务:

    • 执行启动功能。

    • 检测可从中引导系统的正确设备。

    • 从该设备装入主引导记录,以允许系统自行引导。

    通常可以将 BIOS 配置为选择要探测其引导记录的设备的顺序。此外,现在实现的大多数 BIOS 都允许将设备配置为自动向辅助子镜像进行故障转移。如果系统的 BIOS 没有此功能,则主子镜像失败时,需要在系统引导过程中访问 BIOS,以便将系统重新配置为从辅助根片引导。有关如何配置 BIOS 中的设置的说明,请查阅 BIOS 的用户指南。

    设置根镜像之前,请检查系统上的 BIOS,验证是否可以从多块磁盘引导。某些设备驱动程序配置为只能看到系统上的一个磁盘。

  2. 验证 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 分区以外的数据。


  3. 使辅助子镜像可以使用主引导程序引导。

    1. 指定主引导程序。


      # 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: 
      
    2. 从菜单中选择数字 5,然后按回车键。

  4. 使辅助磁盘可引导。


    # /sbin/installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c1t1d0s0
    

    有关 installgrub 的更多信息,请参阅 installgrub(1M) 手册页。

  5. 确定包含要进行镜像的现有根 (/) 文件系统的片。

    本示例使用 c1t0d0s0 片。

  6. 在上一步中的片上创建一个新的 RAID-0 卷。

    RAID-0 卷中只能包含一个片。请使用以下方法之一:

    • 从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。

    • 使用以下格式的 metainit 命令:


      # metainit -f volume-name number-of-stripes components-per-stripe component-name
      
      -f

      强制继续执行该命令。如果片中包含已挂载的文件系统,则必须使用此选项。

      volume-name

      指定要创建的卷的名称。有关对卷进行命名的信息,请参见卷名称

      number-of-stripes

      指定要创建的条带的数目。

      components-per-stripe

      指定每个条带应包含的组件的数目。

      component-names

      指定所使用的组件的名称。本示例使用根片 c0t0d0s0

  7. 在未使用的片(在本示例中为 c1t1d0s0)上创建另一个 RAID-0 卷,将其用作第二个子镜像。


    注 –

    辅助子镜像不得小于原来的子镜像的大小。另外,用作第二个子镜像的片还必须带有片标记 "root",并且根片必须是片 0。

    有关配置片标记字段的信息,请参见 format(1M) 手册页。


    请使用以下任一方法:

    • 从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”->“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。

    • 使用以下格式的 metainit 命令:


      # metainit volume-name number-of-stripes components-per-stripes component-names
      

      注 –

      有关这些选项的说明,请参见步骤 6。


  8. 使用以下方法之一创建单向镜像:

    • 从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。

    • 使用以下格式的 metainit 命令:


      # metainit volume-name -m submirror-name
      
      volume-name

      指定要创建的卷的名称。

      -m

      指定要创建镜像。

      submirror-name

      指定将成为镜像中的第一个子镜像的组件的名称。在本示例中,这是包含根片的 RAID-0 卷。

  9. 重新挂载刚进行镜像的文件系统,然后重新引导系统。


    # metaroot volume-name
    
    # reboot
    

    有关更多信息,请参见 metaroot(1M) 手册页。

  10. 附加第二个子镜像。


    # metattach volume-name submirror-name
    
    volume-name

    指定要向其中添加子镜像的 RAID-1 卷的名称。

    submirror-name

    指定将成为附加到该镜像的第二个子镜像的组件的名称。

    有关更多信息,请参见 metattach(1M) 手册页。

  11. 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 维护,这会对主磁盘和辅助磁盘均进行同步,并将有效的引导归档恢复到主磁盘。


Procedurex86: 如何使用 DCA 从根 (/) 文件系统创建 RAID-1 卷

  1. 验证是否可将 BIOS 引导设备的顺序配置为允许系统从镜像中的第二块磁盘引导。

    启动内核之前,系统由只读存储器 (read-only-memory, ROM) 基本输入/输出系统 (Basic Input/Output System, BIOS) 控制,该系统是基于 x86 的系统上的固件接口。BIOS 与基于 SPARC 的系统上的引导 PROM 类似。除了 BIOS 的其他启动功能以外,它还负责查找要从中引导系统的正确设备,以及从允许系统自行引导的设备中装入主引导记录。通常可以将 BIOS 配置为选择要探测其引导记录的设备的顺序。此外,现在实现的大多数 BIOS 都允许将设备配置为自动向辅助子镜像进行故障转移。如果系统没有此功能,则主子镜像失败时,需要在系统引导过程中访问 BIOS,以便将系统重新配置为从辅助根片引导。有关如何配置 BIOS 中的设置的说明,请查阅 BIOS 的用户指南。

    可以使用系统上的 DCA来验证是否可以从多块磁盘引导。某些设备驱动程序配置为只能看到系统上的一个磁盘。

  2. 验证 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 分区以外的数据。


  3. 使辅助子镜像可以使用主引导程序引导。

    1. 使用 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: 
      
    2. 从菜单中选择数字 5,然后按回车键。

  4. 在辅助子镜像中安装引导块,以便可从该镜像引导系统。

    辅助子镜像所在磁盘上的片 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
    
  5. 确定包含要进行镜像的现有根 (/) 文件系统的片。本示例使用片 c1t0d0s0

  6. 使用以下方法之一,在上一步中的片上创建一个新的 RAID-0 卷。RAID-0 卷中只能包含一个片。

    • 从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。

    • 使用以下格式的 metainit 命令:


      # metainit -f volume-name number-of-stripes components-per-stripe component-name
      
      -f

      强制继续执行该命令。如果片中包含已挂载的文件系统,则必须使用此选项。

      volume-name

      指定要创建的卷的名称。有关对卷进行命名的信息,请参见卷名称

      number-of-stripes

      指定要创建的条带的数目。

      components-per-stripe

      指定每个条带应包含的组件的数目。

      component-names

      指定所使用的组件的名称。本示例使用根片 c0t0d0s0

  7. 在未使用的片(在本示例中为 c1t1d0s0)上创建另一个 RAID-0 卷,将其用作第二个子镜像。辅助子镜像不得小于原来的子镜像的大小。请使用以下方法之一:


    注 –

    用作第二个子镜像的片必须带有片标记 "root",并且根片必须是片 0。有关配置片标记字段的信息,请参见 format(1M) 手册页。


    • 从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”->“创建卷”并按照屏幕上的说明操作。有关更多信息,请参见联机帮助。

    • 使用以下格式的 metainit 命令:


      # metainit volume-name number-of-stripes components-per-stripes component-names
      

      注 –

      有关这些选项的说明,请参见步骤 6。


  8. 使用以下方法之一创建单向镜像:

    • 从 Solaris Management Console 中增强的存储工具中,打开“卷”节点,然后选择“操作”⇒“创建卷”。请按照屏幕上的说明操作。有关更多信息,请参见联机帮助。

    • 使用以下格式的 metainit 命令:


      # metainit volume-name -m submirror-name
      
      volume-name

      指定要创建的卷的名称。

      -m

      指定要创建镜像。

      submirror-name

      指定将成为镜像中的第一个子镜像的组件的名称。在本示例中,这是包含根片的 RAID-0 卷。

  9. 重新挂载刚进行镜像的文件系统。运行 metaroot volume-name 命令,将 volume-name 替换为已创建的镜像的名称。然后重新引导系统。


    # metaroot volume-name
    
    # reboot
    

    有关更多信息,请参见 metaroot(1M) 手册页。

  10. 使用以下格式的 metattach 命令附加第二个子镜像。


    # metattach volume-name submirror-name
    
    volume-name

    指定要向其中添加子镜像的 RAID-1 卷的名称。

    submirror-name

    指定将成为附加到该镜像的第二个子镜像的组件的名称。

    有关更多信息,请参见 metattach(1M) 手册页。

  11. 记录替代引导路径。

    需要对系统进行配置,以便在主子镜像失败时,系统从辅助子镜像引导。要使系统可从用来存放辅助子镜像的磁盘引导,请将系统配置为将该磁盘视为备用引导设备。

    1. 确定备用引导设备的路径。针对附加作为根 (/) 文件系统镜像的第二个子镜像的片,使用 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
    2. 记录 /devices 目录后面的字符串:/eisa/eha@1000,0/cmdk@1,0:a。这是设备树的路径。


      注 –

      由于系统可能不可用,因此应当将这些信息记录在系统以外的某个位置。这样,必须使用 DCA 引导系统时,可以更方便地输入设备树的路径信息。


    3. 使用 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) 手册页。


示例 11–7 x86: 使用 DCA 从根 (/) 文件系统创建镜像


# 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