harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

VMware server上で共有ディスクを新規作成(Linux)

   


VMware server上で共有ディスクを新規作成(Linux)

WMwareのクラスタ検証環境を構築する際、nfsマウントしたディレクトリ上で
なぜかpostgresを起動できなかったので、VMwareで共有ディスクを追加する作業で解決。
※商用版のESX serverやGSX serverでなくても環境構築が可能。

セットアップ環境

VMホストサーバ:RHEL ES4(Update4)
VMware server(フリーのやつ)
VMゲストサーバ:RHEL ES4(Update4)×2

参考サイト

お世話になりました。

【VMwareのクラスタ設定】
・VMwareでクラスタ
http://blog.so-net.ne.jp/ojaoki/2006-05-02

・VMware で Windows クラスタ(MSCS)
http://blogs.sqlpassj.org/matu_tak/archive/2004/05/13/2153.aspx

【共有ディスクのフォーマット】
・RedHat7.2ハードディスク増設
http://www.ne.jp/asahi/hishidama/home/tech/unix/hdd.html

作業ログ

1)VM上から仮想ディスクを追加[主系]

  セットアップ済みのVMゲストマシンから共有ディスクを置く主系のゲストを選択し、
  VMのコンソールからデバイス追加を行う。

  1. Edit virual machine settingをクリックし、設定画面を開く
  2. Virtual machine Settingダイアログを開いたら、"Hardware"タブの下にある"Add"をクリック
  3. "Add Hardware Wizard"が開くので、ウィザードに従って進み、Hard Diskを選択し、Nextをクリック。
  4. "Select a Disk"でCreate a new virtual diskにチェックを入れ、次へをクリック
  5. "Virtual Disk Type"は任意のタイプを選択して次へ。
  6. "Disk capacity"でディスク容量を選択して次へ
  7. "Disk file"でディスクファイル名を確認し、問題なければ完了をクリック。
  • 詳細設定を行う場合は"Advanced"をクリック。
    →詳細設定
    詳細設定の場面では、デバイス名とディスクモードを選択できる。
    デバイスラベルを変更したい場合は"Virtual device node"で任意のラベルを選択。
    共有ディスクとして設定したい場合は"Mode"欄のIndependendをチェックし、Persistentを選択。
    問題なければ完了。

2)仮想ディスクの設定[主系]

  コンソールでの追加作業が終了したら、ゲストマシンの設定ファイルを編集。
  Linuxの場合は、/var/lib/vmware/以下に設定ファイルと仮想領域が置かれる。
  該当のゲストマシンの設定ファイル.vmxに設定を追加。

  [追記項目]

  • 追加ディスクの設定確認
    scsi1.present = "TRUE"
    scsi1:0.present = "TRUE"
    scsi1:0.fileName = "vmdkファイルへのパス" 
    scsi1:0.mode = "independent-persistent"
    scsi1:0.deviceType = "plainDisk"
    
  • 共有ディスク用の設定
    # Shared Disk 
    disk.locking="false" 			←ディスクのロックを解除するため必須
    diskLib.dataCacheMaxSize=0 
    diskLib.dataCacheMaxReadAheadSize=0 
    diskLib.dataCacheMinReadAheadSize=0 
    diskLib.dataCachePageSize=4096 
    diskLib.maxUnsyncedWrites=0

    設定が完了したらVMコンソールからVMゲストを起動する。

3)追加したディスクのフォーマット

  この辺はHDDを追加したときに行うフォーマットと同様。

  ディスクを追加したはいいが、当然そのままでは使えないので
  フォーマットを実行。
  設定を行っても最終的に書き込みを実行しない限り更新されないので安心。

  1. パーティション作成
    # fdisk /dev/sdb	←ラベルは環境を確認する
    デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
    含んでいません
    新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
    メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。
    警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
    正常になります
    	
    コマンド (m でヘルプ): n		←領域作成
    コマンドアクション
       e   拡張
       p   基本領域 (1-4)
    p					←基本領域作成
    領域番号 (1-4): 1			←領域番号を入力
    最初 シリンダ (1-130, default 1): 	←シリンダ開始番号を入力(デフォルト値)
    Using default value 1
    終点 シリンダ または +サイズ または +サイズM または 
    +サイズK (1-130, default 130): 		←シリンダ終点番号を入力(デフォルト値)
    Using default value 130
    
    コマンド (m でヘルプ): p		←作成された領域を表示
    
    
    Disk /dev/sdb: 1073 MB, 1073741824 bytes
    255 heads, 63 sectors/track, 130 cylinders
    Units = シリンダ数 of 16065 * 512 = 8225280 bytes
    	
    デバイス Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         130     1044193+  83  Linux
    
    コマンド (m でヘルプ): w		←wコマンドで領域テーブルの作成が反映される。
    領域テーブルは交換されました!
    	
    ioctl() を呼び出して領域テーブルを再読込みします。
    ディスクを同期させます。
    # 

    これにて終了。

  2. フォーマット実行
    コマンドmke2fsでフォーマットを実施。
    オプション-cでフォーマット前にチェックを実施。

    # mke2fs -c /dev/sdb1
    mke2fs 1.35 (28-Feb-2004)
    /dev/sdb is entire device, not just one partition!
    Proceed anyway? (y,n) y			←ここでyを入力し、実行開始。
    Filesystem label=
    OS type: Linux
    Block size=4096 (log=2)
    Fragment size=4096 (log=2)
    131072 inodes, 262144 blocks
    13107 blocks (5.00%) reserved for the super user
    First data block=0
    Maximum filesystem blocks=268435456
    8 block groups
    32768 blocks per group, 32768 fragments per group
    16384 inodes per group
    Superblock backups stored on blocks: 
            32768, 98304, 163840, 229376
    
    Checking for bad blocks (read-only test): done                        
    Writing inode tables: done                            
    Writing superblocks and filesystem accounting information: done
    
    This filesystem will be automatically checked every 25 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    #
  3. ファイルシステム変更
    上記のフォーマットでext2となったがRHEL4なのでext3に変更。
    ext3のジャーナルを追加するためコマンドtune2fsを実行。
    オプション-jでext3のジャーナルが追加される。

    # tune2fs -j /dev/sdb1
    tune2fs 1.35 (28-Feb-2004)
    Creating journal inode: done
    This filesystem will be automatically checked every 25 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.
    # 

4)主系でマウント確認。

  早速マウントして確認。
  マウントポイントとして、/mnt以下にshare/ディレクトリを作成してテスト。

# mkdir /mnt/share
# mount -t ext3 /dev/sdb /mnt/share/
# mount | grep sdb
/dev/sdb on /mnt/share type ext3 (rw)

  これにて主系の設定は完了。
  確認できたら、副系でもマウントするので一旦umountする。

5)副系へ共有ディスクの設定を追加

  2)項で主系のVM設定ファイルへ追加した項目を副系のVM設定ファイルへも追加。

[追記項目]

  • 追加ディスクの設定確認(主系に追加されたものをコピー)
    scsi1.present = "TRUE"
    scsi1:0.present = "TRUE"
    scsi1:0.fileName = "vmdkファイルへのパス" 	←主系のディレクトリを含め、フルパスで指定
    scsi1:0.mode = "independent-persistent"
    scsi1:0.deviceType = "plainDisk"
  • 共有ディスク用の設定
    # Shared Disk 
    disk.locking="false" 			←ディスクのロックを解除するため必須
    diskLib.dataCacheMaxSize=0 
    diskLib.dataCacheMaxReadAheadSize=0 
    diskLib.dataCacheMinReadAheadSize=0 
    diskLib.dataCachePageSize=4096 
    diskLib.maxUnsyncedWrites=0

  設定が完了したらVMコンソールからVMゲストを起動する。

6)副系でマウント確認。

  主系同様にマウントして確認。
  マウントポイントとして、/mnt以下にshare/ディレクトリを作成してテスト。

# mkdir /mnt/share
# mount -t ext3 /dev/sdb /mnt/share/
# mount | grep sdb
/dev/sdb on /mnt/share type ext3 (rw)

  これにて副系の設定も完了。
  フェイルオーバーを有効にする場合はマウント/アンマウントの設定も忘れずに。

 - cluster, DB, GNU/Linux, 仮想化