Solaris ボリュームマネージャの管理

metassist コマンドによるファイルベースのデータ処理

metassist コマンドを使用すると、ボリューム特性の評価に使用するファイル、または実際にボリュームを作成するために使用するファイルを作成できます。

metassist コマンドを使ってコマンドファイル (シェルスクリプト) を作成する

metassist コマンドに - c 引数を指定すると、ボリューム構成の作成に使用できるコマンドを含んだ Bourne シェルスクリプトが生成されます。この方法を使用すれば、ボリュームを実際に作成する前にコマンドを確認したり、場合によっては、必要に応じてスクリプトを微調整することができます。

Proceduremetassist コマンドを使ってコマンドファイル (シェルスクリプト) を作成するには

始める前に

「ボリュームをトップダウン作成するための前提条件」を確認します。

  1. ボリュームの作成に使用する記憶領域を特定します。

    記憶領域を明示的に指定しなかった場合、システム上の未使用の記憶領域を Solaris ボリュームマネージャが特定し、必要に応じて使用します。記憶領域を指定すると、この記憶領域を Solaris ボリュームマネージャが使用します。記憶領域の指定は、広義に (たとえば、コントローラ 1 のすべての記憶領域) 行う場合もあれば、狭義に (たとえば、c1t4d2 は使用し、c1t4d1 は使用しない) 行う場合もあります。

  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

    ボリュームを実際には作成しないことを意味します。その代わりに、指定した構成を作成するためのシェルスクリプトが、標準出力に送信されます。


    注 –

    -c 引数によって、シェルスクリプトを標準出力に送信することが必須になりますが、metassist コマンドの他の出力は標準エラーに送信されます。出力ストリームは自由にリダイレクトできます。


    詳細は、次の例と metassist(1M) のマニュアルページを参照してください。


例 23–6 metassist コマンドを使ってコマンドファイル (シェルスクリプト) を作成する

次に、metassist コマンドを使用して、容量が 10M バイトの 2 面ミラーとホットスペアを作成し、障害耐性を強化する例を示します。-f オプションで障害耐性を指定します。最後の引数 (-c) で、ボリュームを実際には作成しないことを指定します。その代わりに、指定した構成を作成するためのシェルスクリプトが、標準出力に送信されます。


# 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 コマンドを使ってコマンドファイル (シェルスクリプト) を保存する

次に、metassist コマンドを使用して、容量が 10M バイトの 2 面ミラーとホットスペアを作成し、障害耐性を強化する例を示します。-f オプションで障害耐性を指定します。最後の引数 (-c) で、ボリュームを実際には作成しないことを指定します。その代わりに、指定した構成を作成するためのシェルスクリプトが、標準出力に送信されます。コマンドの最後の部分では、標準出力をリダイレクトして /tmp/metassist-shell-script.sh シェルスクリプトを作成することを指定します。このファイルはあとで、指定したボリュームを作成するために使用できます。


# metassist create -s myset -f -r 2 -S 10mb -c > \
 /tmp/metassist-shell-script.sh

metassist コマンドで作成されたシェルスクリプトによるボリュームの作成

metassist コマンドでシェルスクリプトを作成したら、このスクリプトを使ってボリュームを作成できます。ボリュームは、シェルスクリプトの作成時に指定したとおりに作成されます。


注意 – 注意 –

metassist コマンドで作成したコマンドスクリプトは、スクリプトを作成したシステムのその時点の構成に大きく依存しています。したがって、このスクリプトを別のシステムで使用したり、このスクリプトをシステム構成の変更後に使用したりすると、データが壊れたり失われたりすることがあります。


Procedure保存された metassist コマンドのシェルスクリプトを実行するには

始める前に

「ボリュームをトップダウン作成するための前提条件」を確認します。

  1. シェルスクリプトの作成後にシステム構成が変更されていないことを確認します。さらに、スクリプトを実行するシステムが、このスクリプトを作成したシステムであることを確認します。

  2. 保存されたシェルスクリプトを実行します。


    # sh ./metassist-shell-script-name
    
  3. 新しいボリュームを表示します。


    # metastat -s diskset-name
    

例 23–8 保存された metassist コマンドのシェルスクリプトを実行する

次に、metassist コマンドでシェルスクリプトを使用してボリュームを作成する例を示します。


# 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 コマンドによるボリューム構成ファイルの作成

metassist コマンドに -d 引数を指定すると、XML ベースのボリューム構成ファイルが生成されます。このファイルには、ボリュームに関連するすべてのオプションや情報など、ボリュームとそのコンポーネントの詳細が含まれています。このファイルを調べることによって、metassist コマンドが推奨する構成を知ることができます。さらに、このボリューム構成ファイルを慎重に変更して構成を微調整したあと、実際のボリューム作成の際に metassist コマンドへの入力として使用することもできます。

Proceduremetassist コマンドを使ってボリューム構成ファイルを作成するには

始める前に

「ボリュームをトップダウン作成するための前提条件」を確認します。

  1. ボリュームの作成に使用する記憶領域を特定します。

    記憶領域を明示的に指定しなかった場合、システム上の未使用の記憶領域を Solaris ボリュームマネージャが特定し、必要に応じて使用します。記憶領域を指定すると、この記憶領域を Solaris ボリュームマネージャが使用します。記憶領域の指定は、広義に (たとえば、コントローラ 1 のすべての記憶領域) 行う場合もあれば、狭義に (たとえば、c1t4d2 は使用し、c1t4d1 は使用しない) 行う場合もあります。

  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 コマンドを使用して、容量が 10M バイトの 2 面ミラーとホットスペアを作成し、障害耐性を強化する例を示します。-f オプションで障害耐性を指定します。最後の引数 (-c) で、ボリュームを実際には作成しないことを指定します。その代わりに、指定した構成を作成するために使用できるボリューム構成ファイルが、標準出力に送信されます。


# 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 コマンドを使用して、容量が 10M バイトの 2 面ミラーとホットスペアを作成し、障害耐性を強化する例を示します。-f オプションで障害耐性を指定します。最後の引数 (-c) で、ボリュームを実際には作成しないことを指定します。その代わりに、指定した構成を作成するために使用できるボリューム構成ファイルが、標準出力に送信されます。コマンドの最後の部分では、標準出力をリダイレクトして /tmp/metassist-volume-config.xml ボリューム構成ファイルを作成することを指定します。このファイルはあとで、指定したボリュームを作成するために使用できます。


# metassist create -s myset -f -r 2 -S 10mb -d >  \
/tmp/metassist-volume-config.xml