Solaris Volume Manager 管理指南

使用 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