Solaris Volume Manager 管理指南

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