ここでは、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 などのファイルシステムは、システムが動作するのに必要であるため、システム運用中にはマウント解除できません。以下の方法で、システムディスクへの書込みや、システムディスクに未反映の書込みが少ない状態にしてください。
システムをシングルユーザモードで起動します。(省略可能)
システムディスクに書込みを行っているアプリケーションプログラムを停止します。(省略可能)
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 |