ページの先頭行へ戻る
PRIMECLUSTER Global Disk Services 説明書 4.5
FUJITSU Software

D.20 コマンドによるシステムボリュームの拡張

ここでは、UFS ブート環境において、GDS Snapshot のスナップショット機能を利用して、/、/usr または /var ファイルシステムのサイズを業務運用中に拡張する手順の流れを説明します。

注意

本手順では、業務運用中に ufs ファイルシステムのサイズを拡張するために、Solaris の growfs(1M) コマンドを使用します。

[手順]

ここでは、下図の構成で /var ファイルシステムの領域を拡張する手順を示します。

下図に示すように、/ ファイルシステムは、サイズを拡張するかどうかに関わらず、他のボリュームに移す必要があります。

注意

キープディスク Root1 および Root3 のシリンダサイズは同じである必要があります。

参考

システムディスクのミラーリングは必須ではありません。上図の c0t1d0, c3t0d0 を使用しない構成も可能です。ただし、高可用性が要求されるシステムでは、上図のようなミラーリング構成にすることを推奨します。


1) システムディスクのミラーリング

1-1) 動作中のアプリケーションプログラムを停止します。

ミラーリングの定義を安全に行うため、動作しているアプリケーションプログラムを停止させる必要があります。より安全性が求められる場合は、システムディスクのバックアップを採取してください。

1-2) システムディスクをルートクラスへ登録します。

# sdxdisk -M -c System -a type=root -d c0t0d0=Root1:keep,c1t0d0=Root2:undef

1-3) システムディスクをグループに接続します。

# sdxdisk -C -c System -g Group1 -d Root1,Root2 -v 0=swap:on,3=usr:on,4=root:on,5=var:on

1-4) ミラー定義が完了したことを確認します。

# sdxroot -M -c System -d Root1

1-5) システムを再起動します。

# shutdown -y -g0 -i6

1-6) ミラーリングされていることを確認します。

mount(1M) コマンドや sdxinfo コマンドを使って、システムディスクが正しくミラーリングされていることを確認してください。


2) プロキシボリュームの作成

/ ファイルシステムとサイズを拡張する /var ファイルシステムのプロキシボリュームを作成します。この時点では、プロキシボリュームを作成するグループには、キープディスク 1 つのみを接続します。ここでは、下図の構成でプロキシボリュームを作成する手順を示します。

ポイント

サイズを拡張する /var ファイルシステムのプロキシボリュームの最終ブロック以降に、十分な空き領域が必要です。

2-1) 現在のボリュームサイズを確認します。

# sdxinfo -V -c System
OBJ    NAME    CLASS   GROUP   SKIP JRM 1STBLK   LASTBLK  BLOCKS   STATUS
------ ------- ------- ------- ---- --- -------- -------- -------- --------
volume swap    System  Group1  off  on         0  1049759  1049760 ACTIVE
volume *       System  Group1  *    *    1049760  1071359    21600 PRIVATE
volume *       System  Group1  *    *    1071360  2946239  1874880 FREE
volume usr     System  Group1  off  on   2946240  2965679    19440 ACTIVE
volume root    System  Group1  off  on   2965680  3140639   174960 ACTIVE
volume var     System  Group1  off  on   3140640  3376079   235440 ACTIVE

ボリュームサイズは、sdxinfo -Vコマンドの BLOCKS フィールドで確認できます。この例では、root のサイズは 174960 ブロック、var のサイズは 235440 ブロックです。

2-2) ディスクをルートクラスに登録します。

# sdxdisk -M -c System -d c2t0d0=Root3:keep,c3t0d0=Root4:undef

注意

複数のキープディスクを同時にクラスに登録する際には、同数以上の未定義ディスクを同時にクラスに登録する必要があります。

2-3) キープディスク 1 つのみをグループに接続します。

# sdxdisk -C -c System -g Group2 -d Root3

2-4) ボリュームを作成します。

ボリュームサイズは、手順 2-1) で確認したサイズにします。

# sdxvolume -M -c System -g Group2 -v root2 -s 174960
# sdxvolume -M -c System -g Group2 -v var2 -s 235440

2-5) 作成したボリュームのサイズを確認します。

手順 2-4) で作成したボリュームのサイズが、手順 2-1) で確認したサイズと同じであることを確認します。

# sdxinfo -V -c System
OBJ    NAME    CLASS   GROUP   SKIP JRM 1STBLK   LASTBLK  BLOCKS   STATUS
------ ------- ------- ------- ---- --- -------- -------- -------- --------
volume swap    System  Group1  off  on         0  1049759  1049760 ACTIVE
volume *       System  Group1  *    *    1049760  1071359    21600 PRIVATE
volume *       System  Group1  *    *    1071360  2946239  1874880 FREE
volume usr     System  Group1  off  on   2946240  2965679    19440 ACTIVE
volume root    System  Group1  off  on   2965680  3140639   174960 ACTIVE
volume var     System  Group1  off  on   3140640  3376079   235440 ACTIVE
volume *       System  Group2  *    *          0    21599    21600 PRIVATE
volume root2   System  Group2  off  on     21600   196559   174960 ACTIVE
volume var2    System  Group2  off  on    196560   431999   235440 ACTIVE
volume *       System  Group2  *    *     432000  3376079  2944080 FREE

3) プロキシボリュームの結合

/ と /var のボリューム (マスタボリューム) にプロキシボリュームを結合することにより、/ および /var のデータをプロキシボリュームにコピーします。ここでは、下図の構成でプロキシボリュームを結合する手順を示します。

3-1) プロキシボリュームを結合します。

# sdxvolume -F -c System -v root2,var2
# sdxproxy Join -c System -m root -p root2
# sdxproxy Join -c System -m var -p var2

3-2) 等価性コピーの完了を確認します。

# sdxinfo -S -c System
OBJ    CLASS   GROUP   DISK    VOLUME  STATUS
------ ------- ------- ------- ------- --------
slice  System  Group2  Root1   swap    ACTIVE
slice  System  Group2  Root2   swap    ACTIVE
slice  System  Group1  Root1   usr     ACTIVE
slice  System  Group1  Root2   usr     ACTIVE
slice  System  Group1  Root1   root    ACTIVE
slice  System  Group1  Root2   root    ACTIVE
slice  System  Group1  Root1   var     ACTIVE
slice  System  Group1  Root2   var     ACTIVE
slice  System  Group2  Root3   root2   STOP
slice  System  Group2  Root3   var2    COPY

等価性コピー中は、プロキシボリュームのスライスの STATUS フィールドに COPY と表示されます。プロキシボリュームのスライスの STATUS が STOP になっていれば、等価性コピーは完了しています。


4) プロキシボリュームの分離

等価性コピーが完了すると、マスタボリュームとプロキシボリュームは等価性維持状態になります。等価性維持状態のマスタボリュームとプロキシボリュームを分離することにより、プロキシボリュームにマスタボリュームのスナップショットを採取します。

4-1) ファイルシステムの整合性を確保します。

スナップショットのファイルシステムの整合性を確保するには、ファイルシステムの更新を抑止する必要があります。しかし、/、/usr、/var などのファイルシステムは、システムが動作するのに必要であるため、システム運用中にはマウント解除できません。以下の方法で、システムディスクへの書込みや、システムディスクに未反映の書込みが少ない状態にしてください。

  1. システムをシングルユーザモードで起動します。(省略可能)

  2. システムディスクに書込みを行っているアプリケーションプログラムを停止します。(省略可能)

  3. sync(1M) コマンドを実行することにより、メモリ上で更新されてディスクにまだ書き込まれていないファイルシステムのデータをディスクに書き込みます。

注意

lockfs(1M) コマンドを使用して / ファイルシステムを書込みロックすると、システムがハングアップすることがあります。また、/var ファイルシステムを書込みロックすると、GDS および GDS Snapshot のコマンドがハングアップします。したがって、/ および /var は書込みロックしないでください。

a.、b.、c. をすべて実施しても、ファイルシステムの更新を完全には抑止できません。そのため、スナップショットのファイルシステムには、システムパニック発生後と同様な不整合が生じる場合があります。

a.、b.、c. をすべて実施した場合、スナップショットのファイルシステムは、シングルユーザモードでパニックが発生した後のファイルシステムと同様な状態になります。

a.、b. を省略して c. のみを実施した場合、スナップショットのファイルシステムは、システム運用中にパニックが発生した後のファイルシステムと同様な状態になります。

どちらの場合も、ファイルシステムに不整合が生じる場合があるため、手順 5-1) で整合性のチェックと修復を行う必要があります。

4-2) プロキシボリュームを分離します。

# sdxproxy Part -c System -p root2,var2

4-3) 手順 4-1) の a. でシステムをシングルユーザモードで起動した場合は、マルチユーザモードで再起動します。

4-4) 手順 4-1) の b. でアプリケーションプログラムを停止した場合は、アプリケーションプログラムを起動します。


5) 代替ブート環境の設定

プロキシボリュームからブートできるように設定を行います。

5-1) プロキシボリューム上のファイルシステムのチェックと修復を行います。

プロキシボリューム上のファイルシステムには不整合が生じている場合があるため、fsck(1M) コマンドを使ってチェックと修復を行います。

# fsck -y /dev/sfdsk/System/rdsk/root2
# fsck -y /dev/sfdsk/System/rdsk/var2

5-2) 代替ブート環境の設定を行います。

# sdxproxy Root -c System -p root2,var2

代替ブート環境の設定が完了すると、以下のようなメッセージが出力されます。

SDX:sdxproxy: INFO: completed definitions of alternative boot environment: 
current-boot-device=/pci@1f,4000/scsi@3/disk@0,0:a /pci@1f,4000/scsi@3/disk@1,0:a 
alternative-boot-device=/pci@1f,4000/scsi@3/disk@2,0:a

出力された現用ブート環境のブートデバイス名 (current-boot-device の値) と代替ブート環境のブートデバイス名 (alternative-boot-device の値) を控えておいてください。


6) スナップショットのサイズ拡張

6-1) マスタとプロキシの関係を解除します。

# sdxproxy Break -c System -p root2
# sdxproxy Break -c System -p var2

6-2) スナップショットのボリュームサイズを拡張します。

ここでは、/var のスナップショットのボリュームサイズを 706320 ブロックに拡張する手順を示します。

# sdxvolume -S -c System -v var2 -s 706320

6-3) スナップショットのファイルシステムサイズを拡張します。

ここでは、/var のスナップショットのファイルシステムサイズを 706320 ブロックに拡張する手順を示します。

# growfs -s 706320 /dev/sfdsk/System/rdsk/var2

参照

growfs(1M) コマンドの詳細については、Solaris のマニュアルを参照してください。


7) スナップショットのミラーリング

スナップショットのボリュームが属しているグループにディスクを追加することにより、スナップショットのボリュームをミラーリングします。

# sdxdisk -C -c System -g Group2 -d Root4

8) 代替ブート環境への切替え

代替ブート環境に切り替えることにより、/var ファイルシステムをサイズ拡張後のボリュームに切り替えます。

8-1) 代替ブート環境からシステムをブートします。

OpenBoot 環境で boot コマンドを実行します。boot コマンドでは、手順 5-2) のメッセージで出力された代替ブート環境の、ブートデバイスのうちの 1 つを指定します。

# shutdown -y -g0 -i0
ok boot /pci@1f,4000/scsi@3/disk@2,0:a

参考

手順 5-2) で出力された代替ブート環境のブートデバイス名の個数が代替ブート環境のブートデバイス数よりも多い場合、boot コマンドが以下のようなエラーになることがあります。

ok boot /pci@1f,4000/scsi@3/disk@2,0:a
Rebooting with command: boot /pci@1f,4000/scsi@3/disk@2,0:a
Boot device: /pci@1f,4000/scsi@3/disk@2,0:a  File and args:
Evaluating: boot /pci@1f,4000/scsi@3/disk@2,0:a
Can't open boot device
ok

この場合は、手順 5-2) で出力された代替ブート環境の他のブートデバイス名を指定して再度 boot コマンドを実行してください。

8-2) 正常にブートできていることを確認します。

mount(1M) コマンドや sdxinfo コマンドを使って、代替ブート環境で正しくブートされていることと、GDS のオブジェクトの状態に異常がないことを確認してださい。また、必要に応じて、代替ブート環境のファイルシステムの内容に問題がないこと、アプリケーションが正常に動作できることなどを確認してください。

参考

正常にブートできていない場合は、元のブート環境に戻してください。元のブート環境に戻すには、OpenBoot 環境で、boot コマンドに手順 5-2) のメッセージで出力された現用ブート環境の、ブートデバイスのうちの 1 つを指定します。

# shutdown -y -g0 -i0
ok boot /pci@1f,4000/scsi@3/disk@0,0:a

9) 不要になったボリュームの削除

代替ブート環境で正常にブートできていることを確認したら、旧ブート環境の / ファイルシステムとサイズ拡張前の /var ファイルシステムのボリュームを削除します。

# sdxvolume -F -c System -v root,var
# sdxvolume -R -c System -v root
# sdxvolume -R -c System -v var