Solaris Volume Manager 管理指南

第 23 章 自上而下创建卷(任务)

本章提供与使用 metassist 命令自上而下创建 Solaris Volume Manager 卷相关联的任务。

以下是本章中信息的列表:

有关自上而下创建卷的概念性信息,请参见第 22 章,自上而下创建卷(概述)

自上而下创建卷(任务列表)

以下任务列表列出了使用 metassist 命令创建 Solaris Volume Manager 卷所需的过程。使用此命令可以基于服务质量特征指定卷,也可以创建多组分层卷。

任务 

说明 

参考 

自动创建卷 

允许您使用 metassist 命令创建一个或多个 Solaris Volume Manager 卷。

此外,允许您控制有关卷创建过程中的信息量,这些信息由 metassist 命令提供,以用于诊断或解决问题。

自动创建卷

通过指定输出的详细程度来分析卷的创建过程

创建命令文件 

帮助您使用 metassist 命令来创建 shell 脚本,以生成该命令所指定的卷。

使用 metassist 命令创建卷配置文件

用 shell 脚本创建卷 

说明如何创建 metassist 命令使用其以前生成的 shell 脚本指定的 Solaris Volume Manager 卷。

使用保存的 Shell 脚本(由 metassist 命令创建)创建卷

创建卷配置文件 

帮助您创建卷配置文件,并描述要创建的卷的特征。  

使用 metassist 命令创建卷配置文件

更改卷缺省配置文件 

允许您设置卷的缺省特征以自定义 metassist 命令的行为。

更改卷缺省配置文件

自上而下创建卷的先决条件

如果要使用 metassist 命令来自动创建卷和卷配置,则要求 Solaris Volume Manager 配置能够正常工作。在开始之前,应具备以下条件:

除了上述最低要求,还要注意一点,那就是不要在 /etc/inetd.conf 文件中禁用 Solaris Volume Manager RPC 守护进程(rpc.metadrpc.metamhdrpc.metamedd)。 在缺省情况下,这些守护进程配置为自动启动。它们必须保持启用状态,以便允许 Solaris Volume Manager 使用共享的磁盘集。

自动创建卷

使用 metassist 命令,可以基于服务质量标准创建 Solaris Volume Manager 卷或多组卷。仅使用 metassist 命令就可以创建卷,而不需要像以前在 Solaris Volume Manager 中那样使用一系列命令来创建卷。

可以使用 metassist 命令来直接创建 RAID-1(镜像)卷。因此,不必首先创建用作 RAID-1(镜像)卷组件的子镜像(串联或条带)。

通过指定输出的详细程度来分析卷的创建过程

在运行 metassist 命令时,可以指定输出的详细程度。详细程度高的输出有助于诊断问题,如确定磁盘为什么被(未被)选中以用于卷中,或者确定在尝试执行特定命令时为什么会失败。详细程度低的输出可减少必须检查的无关信息的量。

在指定输出的详细程度时,可以了解 metassist 命令的功能及其做出决定的方式。这些信息有助于解决下面的某些问题:

Procedure如何使用 metassist 命令来创建 RAID-1(镜像)卷

开始之前

请查看自上而下创建卷的先决条件

  1. 标识要在其上创建卷的可用存储器。

    如果没有明确指定存储器,Solaris Volume Manager 会标识系统上未使用的存储器并使用它(如果适用的话)。如果您选择指定存储器-可以广泛地指定存储器(例如,控制器 1 上的所有存储器),也可以明确地指定存储器(例如,使用 c1t4d2,而不使用 c1t4d1),则 Solaris Volume Manager 会使用您指定的存储器。

  2. 使用 metassist 命令和适用于所执行任务的选项。

    • 要使用命令行创建卷,请使用以下形式的 metassist 命令。


      # metassist create -s diskset-name -f -r redundancy -a device1, device2... -S size -v verbosity
      
      create

      用于创建卷的子命令。

      -s diskset-name

      指定要用于卷的磁盘集的名称。

      -f

      指定该卷要与热备件相关联。

      -r redundancy

      指定要创建的冗余级别(数据副本的数量)。

      -a device1, device2...

      指定要用于创建卷的设备。

      -S size

      指定要创建的卷所采用的单位:KB(表示千字节)、MB(表示兆字节)、GB(表示千兆字节)或 TB(兆兆字节)。

      -v verbosity

      指定输出的详细程度。允许值介于 0(几乎无提示的输出)和 2(详细输出)之间。缺省详细程度是 1(中等详细程度的输出)。

    • 如果要在创建卷时使用输入文件来指定卷的特征,请使用以下任一形式的 metassist 命令:


      # metassist create [-v n] [-c] -F config_file
      
      # metassist create [-v n] [-c | -d] -F request_file
      
      -c

      指定输出命令脚本,该命令脚本将实现指定的或所生成的卷配置。该命令脚本将不运行,而且处理将在该阶段停止。

      -d

      指定输出卷配置,该卷配置满足指定的或所生成的卷请求。 将不生成或执行命令脚本,而且处理将在该阶段停止。

      -F config_file | request_file

      指定要处理的卷请求文件或卷配置文件。如果将 config_filerequest_file 指定为连字符 (-),系统将从标准输入中读取它。如果输入文件是卷配置文件,则不能指定 -d 选项。

      卷配置文件描述要创建的卷的详细配置,而卷请求文件提供要生成的卷的特征。有关更多信息,请参见 volume-config(4)volume-config(4)volume-request(4) 手册页。

      -v verbosity

      指定输出的详细程度。允许值介于 0(几乎无提示的输出)和 2(详细输出)之间。缺省详细程度是 1(中等详细程度的输出)。

    有关更多信息,请参见以下示例和 metassist(1M) 手册页。

  3. 在创建了卷之后,可以立即查看新卷。


    # metastat -s diskset-name
    

示例 23–1 使用 metassist 命令创建双向镜像

以下示例说明如何创建大小为 10 MB 的双向镜像。metassist 命令标识未使用的磁盘并使用这些磁盘创建尽可能最佳的镜像。-s myset 参数指定将在 myset 磁盘集内创建卷。如有必要,请创建该磁盘集。


# metassist create -s myset -r 2 -S 10mb


示例 23–2 使用 metassist 命令创建双向镜像和热备件

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。


# metassist create -s myset -f -r 2 -S 10mb

 


示例 23–3 借助 metassist 命令使用特定的控制器创建条带

以下示例说明如何借助 metassist 命令使用控制器 1 上的磁盘创建条带。-a 选项指定可用的控制器。


# metassist create -s myset -a c1 -S 10mb


示例 23–4 使用 metassist 命令指定输出的详细程度

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。最后一个参数 (-v 2) 指定详细程度为 2(最大详细程度),它将尽可能多地提供有关 metassist 命令如何工作的信息。


# metassist create -s myset -f -r 2 -S 10mb -v 2

Scanning system physical device configuration...



  These HBA/Controllers are known:.

    c0                        /pci@1f,0/pci@1,1/ide@3

    c1                        /pci@1f,0/pci@1/pci@2/SUNW,isptwo@4



  These disks are known:



    c0t0d0                    id1,dad@AST34342A=____________VGD97101

    c1t1d0                    id1,sd@SSEAGATE_ST39204LCSUN9.0G3BV0L88P000021097XNL

    c1t2d0                    id1,sd@SSEAGATE_ST39102LCSUN9.0GLJW22867000019171JDF

    c1t3d0                    id1,sd@SSEAGATE_ST39204LCSUN9.0G3BV0L7RV00007108TG0H

    c1t4d0                    id1,sd@SSEAGATE_ST39204LCSUN9.0G3BV0LDFR000021087R1T

    c1t5d0                    id1,sd@SSEAGATE_ST39204LCSUN9.0G3BV0L0M200002109812L

    c1t6d0                    id1,sd@SSEAGATE_ST39204LCSUN9.0G3BV0L8K8000021087R0Z

.

.

.

(output truncated)

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。最后一个参数 (-v 0) 指定详细程度为 0(最小详细程度),在该命令运行时,它将提供几乎无提示的输出。


# metassist create -s myset -f -r 2 -S 10mb -v 0

myset/hsp000: Hotspare pool is setup

myset/hsp000: Hotspare is added

myset/d2: Concat/Stripe is setup

myset/d1: Concat/Stripe is setup

myset/d0: Mirror is setup

myset/d0: submirror myset/d1 is attached


示例 23–5 使用输入文件创建卷

以下示例说明如何借助 metassist 命令使用输入文件创建卷。


# metassist create -F request.xml

有关借助 metassist 命令使用输入文件创建卷的更多信息,请参见使用 metassist 命令处理基于文件的数据


使用 metassist 命令处理基于文件的数据

使用 metassist 命令,可以创建用来评估卷的特征或者实际创建卷的文件。

使用 metassist 命令创建命令文件(Shell 脚本)

通过运行带有 -c 参数的 metassist 命令,可以生成一个 Bourne shell 脚本,其中包含将用来创建卷配置的命令。使用此方法,可以在实际创建卷之前检查命令,甚至可以根据具体需要稍微修改脚本。

Procedure如何使用 metassist 命令来创建命令文件(Shell 脚本)

开始之前

请查看自上而下创建卷的先决条件

  1. 标识要在其上创建卷的可用存储器。

    如果没有明确指定存储器,Solaris Volume Manager 会标识系统上未使用的存储器并使用它(如果适用的话)。如果您选择指定存储器-可以广泛地指定存储器(例如,控制器 1 上的所有存储器),也可以明确地指定存储器(例如,使用 c1t4d2,而不使用 c1t4d1),则 Solaris Volume Manager 会使用您指定的存储器。

  2. 使用 metassist 命令和适用于所执行任务的选项。

    使用 -c 选项指定不应实际创建卷。


    # metassist create -s diskset-name -f -r redundancy -a device1, device2... \
    
     -S size -v verbosity [-c]
    
    create

    用于创建卷的子命令。

    -s diskset-name

    指定要用于卷的磁盘集的名称。

    -f

    指定该卷要与热备件相关联。

    -r redundancy

    指定要创建的冗余级别(数据副本的数量)。

    -a device1, device2...

    指定要用于创建卷的设备。

    -S size

    指定要创建的卷所采用的单位:KB(表示千字节)、MB(表示兆字节)、GB(表示千兆字节)或 TB(兆兆字节)。

    -v verbosity

    指定输出的详细程度。允许值介于 0(几乎无提示的输出)和 2(详细输出)之间。缺省详细程度是 1(中等详细程度的输出)。

    -c

    指定不应实际创建卷,而应将可用来创建指定配置的 shell 脚本发送到标准输出中。


    注 –

    -c 参数所需的 shell 脚本将发送到标准输出中,metassist 命令的其余输出将转至标准错误中。您可以在进行选择时重定向输出流。


    有关更多信息,请参见以下示例和 metassist(1M) 手册页。


示例 23–6 使用 metassist 命令创建命令文件(Shell 脚本)

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。最后一个参数 (-c) 指定不应实际创建卷,而应将可用来创建指定配置的 shell 脚本发送到标准输出中。


# metassist create -s myset -f -r 2 -S 10mb -c

(output truncated)

.

.

.

Volume request completed successfully.

#!/bin/sh



#

# Environment

#



# Amend PATH

PATH="/usr/sbin:/usr/bin:$PATH"

export PATH



# Disk set name

diskset='myset'



#

# Functions

#



# Echo (verbose) and exec given command, exit on error

execho () {

    test -n "$verbose" && echo "$@"

    "$@" || exit

}



# Get full /dev/rdsk path of given slice

fullpath () {

    case "$1" in

        /dev/dsk/*|/dev/did/dsk/*) echo "$1" | sed 's/dsk/rdsk/' ;;

        /*) echo "$1" ;;

        *) echo /dev/rdsk/"$1" ;;

    esac

}



# Run fmthard, ignore partboot error, error if output

fmthard_special () {

    ignore='Error writing partboot'

    out=`fmthard "$@" 2>&1`

    result=$?

    echo "$out" |

    case "$out" in

        *"$ignore"*) grep -v "$ignore"; return 0 ;;

        '') return "$result" ;;

        *) cat; return 1 ;;

    esac >&2

}



#

# Main

#



# Verify root

if [ "`id | sed 's/^[^(]*(\([^)]*\).*/\1/'`" != root ]

then

    echo "This script must be run as root." >&2

    exit 1;

fi



# Check for verbose option

case "$1" in

    -v) verbose=1 ;;

    *) verbose= ;;

esac

    

# Does the disk set exist?

if metaset -s "$diskset" >/dev/null 2>&1

then

    # Take control of disk set

    execho metaset -s "$diskset" -t

else

    # Create the disk set

    autotakeargs=

    /usr/sbin/clinfo || autotakeargs='-A enable'

    execho metaset -s "$diskset" $autotakeargs -a -h `uname -n | cut -f1 -d.`

fi

    

# Format slices

execho fmthard_special -d 7:0:0:0:0 `fullpath c1t3d0s7`

execho fmthard_special -d 7:0:0:0:0 `fullpath c1t6d0s7`

execho fmthard_special -d 7:0:0:0:0 `fullpath c1t4d0s7`



# Add disks to set

execho metaset -s "$diskset" -a c1t3d0

execho metaset -s "$diskset" -a c1t6d0

execho metaset -s "$diskset" -a c1t4d0



# Format slices

execho fmthard_special -d 0:4:0:10773:17649765 `fullpath c1t3d0s0`

execho fmthard_special -d 0:4:0:10773:17649765 `fullpath c1t6d0s0`

execho fmthard_special -d 0:4:0:10773:17649765 `fullpath c1t4d0s0`

execho fmthard_special -d 1:4:0:17660538:21546 `fullpath c1t3d0s1`

execho fmthard_special -d 1:4:0:17660538:21546 `fullpath c1t4d0s1`

execho fmthard_special -d 1:4:0:17660538:21546 `fullpath c1t6d0s1`



# Does hsp000 exist?

metahs -s "$diskset" -i hsp000 >/dev/null 2>&1 || {

    # Create hsp hsp000

    execho metainit -s "$diskset" hsp000

}



# Add slices to hsp000

execho metahs -s "$diskset" -a hsp000 c1t3d0s1



# Create concat d2

execho metainit -s "$diskset" d2 1 1 c1t4d0s1



# Associate concat d2 with hot spare pool hsp000

execho metaparam -s "$diskset" -h hsp000 d2



# Create concat d1

execho metainit -s "$diskset" d1 1 1 c1t6d0s1



# Associate concat d1 with hot spare pool hsp000

execho metaparam -s "$diskset" -h hsp000 d1



# Create mirror d0

execho metainit -s "$diskset" d0 -m d2 1

execho metattach -s "$diskset" d0 d1

# 


示例 23–7 使用 metassist 命令保存命令文件(Shell 脚本)

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。最后一个参数 (-c) 指定不应实际创建卷,而应将可用来创建指定配置的 shell 脚本发送到标准输出中。该命令最后会重定向标准输出,以便创建 /tmp/metassist-shell-script.sh shell 脚本,该脚本以后可用来创建指定的卷。


# metassist create -s myset -f -r 2 -S 10mb -c > \

 /tmp/metassist-shell-script.sh


使用保存的 Shell 脚本(由 metassist 命令创建)创建卷

使用 metassist 命令创建 shell 脚本之后,可以使用该脚本来创建在创建 shell 脚本时所指定的卷。


注意 – 注意 –

在创建脚本时,由 metassist 命令创建的命令脚本在很大程度上依赖于在其上创建该脚本的系统的特定配置。在不同的系统上使用该脚本或者在更改系统配置之后使用该脚本可能会导致数据损坏或丢失。


Procedure如何执行保存的 metassist 命令 Shell 脚本

开始之前

请查看自上而下创建卷的先决条件

  1. 请确保自创建 shell 脚本以来系统配置未曾进行过更改,而且是在创建脚本的系统上执行脚本。

  2. 执行保存的 shell 脚本。


    # sh ./metassist-shell-script-name
    
  3. 查看新卷。


    # metastat -s diskset-name
    

示例 23–8 执行保存的 metassist 命令 Shell 脚本

以下示例说明如何借助 metassist 命令来使用 shell 脚本创建卷。


# sh ./tmp/metassist-shell-script.sh

myset/hsp000: Hotspare pool is setup

myset/hsp000: Hotspare is added

myset/d2: Concat/Stripe is setup

myset/d1: Concat/Stripe is setup

myset/d0: Mirror is setup

myset/d0: submirror myset/d1 is attached

使用 metassist 命令创建卷配置文件

通过运行带有 -d 参数的 metassist 命令,可以生成基于 XML 的卷配置文件,该配置文件详细指定要创建的卷及其组件,其中包括所有选项和有关这些卷的相关信息。检查该文件有助于了解 metassist 命令建议使用的配置。如果对该文件进行适当的更改,还可以微调配置。然后,将更改后的卷配置文件用作 metassist 命令的输入来实际创建卷。

Procedure如何使用 metassist 命令来创建卷配置文件

开始之前

请查看自上而下创建卷的先决条件

  1. 标识要在其上创建卷的可用存储器。

    如果没有明确指定存储器,Solaris Volume Manager 会标识系统上未使用的存储器并使用它(如果适用的话)。如果您选择指定存储器-可以广泛地指定存储器(例如,控制器 1 上的所有存储器),也可以明确地指定存储器(例如,使用 c1t4d2,而不使用 c1t4d1),则 Solaris Volume Manager 会使用您指定的存储器。

  2. 使用 metassist 命令和适用于所执行任务的选项。

    使用 -d 选项指定不应实际创建卷,而应将基于 XML 的卷配置文件发送到标准输出中:


    # metassist create -s diskset-name -f -r redundancy -a device1, device2... \
    
     -S size -v verbosity [-d]
    
    create

    用于创建卷的子命令。

    -s diskset-name

    指定要用于卷的磁盘集的名称。

    -f

    指定该卷要与热备件相关联。

    -r redundancy

    指定要创建的冗余级别(数据副本的数量)。

    -a device1, device2...

    指定要用于创建卷的设备。

    -S size

    指定要创建的卷所采用的单位:KB(表示千字节)、MB(表示兆字节)、GB(表示千兆字节)或 TB(兆兆字节)。

    -v verbosity

    指定输出的详细程度。允许值介于 0(几乎无提示的输出)和 2(详细输出)之间。缺省详细程度是 1(中等详细程度的输出)。

    -d

    指定不应实际创建卷。


    注 –

    -d 参数所需的基于 XML 的卷配置文件将发送到标准输出中。但是,metassist 命令的其余输出将转至标准错误中。您可以在进行选择时重定向输出流。


    有关更多信息,请参见以下示例和 metassist(1M) 手册页。


示例 23–9 使用 metassist 命令创建卷配置文件

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。最后一个参数 (-d) 指定不应实际创建卷,而应将最终可用来创建指定配置的卷配置文件发送到标准输出中。


# metassist create -s myset -f -r 2 -S 10mb -d





.(output truncated)

.

.

Volume request completed successfully.

<?xml version="1.0"?>

<!DOCTYPE volume-config SYSTEM "/usr/share/lib/xml/dtd/volume-config.dtd">

 <volume-config>

<diskset name="myset"/>

<disk name="c1t3d0"/>

<disk name="c1t6d0"/>

<disk name="c1t4d0"/>

<slice name="c1t3d0s7" sizeinblocks="0"/>

<slice name="c1t3d0s0" sizeinblocks="17649765" startsector="10773"/>

<slice name="c1t6d0s7" sizeinblocks="0"/>

<slice name="c1t6d0s0" sizeinblocks="17649765" startsector="10773"/>

<slice name="c1t4d0s7" sizeinblocks="0"/>

<slice name="c1t4d0s0" sizeinblocks="17649765" startsector="10773"/>

<hsp name="hsp000">

<slice name="c1t3d0s1" sizeinblocks="21546" startsector="17660538"/>

</hsp>

<mirror name="d0" read="ROUNDROBIN" write="PARALLEL" passnum="1">

<concat name="d2">

<slice name="c1t4d0s1" sizeinblocks="21546" startsector="17660538"/>

<hsp name="hsp000"/>

</concat>

<concat name="d1>

<slice name="c1t6d0s1"sizeinblocks="21546" startsector="17660538"/>

<hsp name="hsp000"/>

</concat>

</mirror>

</volume-config>

# 


示例 23–10 使用 metassist 命令保存卷配置文件

以下示例说明如何使用 metassist 命令来创建大小为 10 MB 且具有热备件的双向镜像,热备件可提供额外的容错功能。-f 选项指定容错功能。最后一个参数 (-d) 指定不应实际创建卷,而应将最终可用来创建指定配置的卷配置文件发送到标准输出中。该命令最后会重定向标准输出,以便创建 /tmp/metassist-volume-config.xml 卷配置文件,该文件以后可用来创建指定的卷。


# metassist create -s myset -f -r 2 -S 10mb -d >  \

/tmp/metassist-volume-config.xml


更改 metassist 命令的缺省行为

可以使用卷缺省配置文件 (/etc/defaults/metassist.xml) 来更改 metassist 命令的缺省行为。通过更改缺省配置文件,可以明确地将特定磁盘或控制器排除或包括在考虑范围之内。还可以指定由 metassist 命令使用的大部分卷设置的要求。

/etc/defaults/metassist.xml 的格式由 /usr/share/lib/xml/dtd/volume-defaults.dtd 文档类型定义 (Document Type Definition, DTD) 来指定。该格式在 volume-defaults(4) 手册页中进行介绍。

更改卷缺省配置文件

编辑卷缺省配置文件 (/etc/defaults/metassist.xml) 以指定 metassist 命令的行为。


注 –

在编辑该文件时,必须确保该文件仍旧符合 /usr/share/lib/xml/dtd/volume-defaults.dtd 文档类型定义 (Document Type Definition, DTD)。如果该 XML 文件不符合 DTD,则 metassist 命令将失败,并且会出现一条错误消息。



示例 23–11 借助 metassist 命令使用更改后的缺省配置创建卷

在创建卷之前,请编辑 /etc/default/metassist.xml 文件以指定缺省设置,这些设置将应用于借助 metassist 命令创建的所有卷。在以下示例中,metassist 命令仅在控制器 c1 上创建卷,在创建条带时,仅创建恰好包含四个组件且交错值为 512KB 的条带。这些约束适用于 metassist 命令的所有应用场合,直到 /etc/default/metassist.xml 文件再次发生更改。


#  cat /etc/default/metassist.xml 

<!DOCTYPE volume-defaults SYSTEM \

"/usr/share/lib/xml/dtd/volume-defaults.dtd">



<volume-defaults>

<available name="c1" />

<stripe mincomp="4" maxcomp="4" interlace="512KB" ></stripe>

</volume-defaults>



# metassist create -s myset -S 10Gb

 

metassist 命令会创建一个 10 GB 的条带,如 /etc/default/metassist.xml 文件中所指定,该条带将恰好使用四个片且交错值为 512 KB。