vSphereの共有ディスク設定方法(RDM編)

スポンサーリンク

vSphereでRDM(Raw Device Mapping)を使用した共有ディスクの設定方法を説明します。RDMは、VMFSの上にファイルを作成するのではなく、RAWデバイスを直接指定する方式です。これを動作確認するには物理的な共有ストレージが望ましいですが、TrueNASなどを用いたiSCSIでも動作確認が可能です。このページではTrueNASを用いたRDMの設定方法を紹介します。

メリット・デメリットの把握

RDM(Raw Device Mapping)は共有ディスクを作成する唯一の方法ではありません。前述の「vSphereの共有ディスク設定方法(VMDKファイル編)」でも共有ディスクは作成できます。RDMを使用するか否かはメリット・デメリットがあり、公式ドキュメントでは「Raw デバイス マッピングのメリット」にまとめられています。

事前準備

LUNの作成

TrueNAS(旧FreeNAS) iSCSIによる共有手順」などを参照しつつ、複数のLUNを作成します。

LUNの作成

ソフトウェアiSCSIの設定

ESXiにソフトウェアiSCSIの設定をして、TrueNASのLUNが見えるようにします。ソフトウェアiSCSIの設定は「VMware HAの設定手順 (iSCSIを使用する場合)」などを参照ください。

ソフトウェアiSCSIの設定 01

ESXiの「デバイス」の画面から、確かにLUNが見えている事を確認します。

ソフトウェアiSCSIの設定 02

VMFSフォーマット

RDMは文字通り、ESXiからRawデバイス(フォーマット前のデバイス)として見せるようする必要があります。しかし、共有ディスクをどのLUNに格納したかの紐付けの設定はVMFS上に格納する必要があります。

従って、VMFSでフォーマットしたディスクとRAWデバイスのディスクの2つが必要になります。

「ストレージ」「データストア」の順に押下し、画面遷移します。NFSではなくVMFSでフォーマットしたデータストアを1つ作成しましょう。「新しいデータストア」を押下します。

VMFSによるフォーマット 01

VMFSでフォーマットしたディスクを1つ作成します。(いくつかはRawデバイスのまま残して下さい)

VMFSによるフォーマット 02

仮想マシンの設定

以下スクリーンショットのような構成で、centos50とcentos51の間で共有ディスクを作成する方法を考えます。

共有ディスクの検証環境

1台目の設定

「1台目の仮想マシン」の右クリックメニューで、「設定の編集」を選びます。

共有ディスク 1台目の設定 01

「新規デバイスの追加」で「SCSIコントローラー」を選びます。

共有ディスク 1台目の設定 02

SCSIパスの共有は「物理」を選びます。

SCSIパスの共有の設定の意味は「SCSI コントローラ設定の変更」を参照ください。

共有ディスク 1台目の設定 03

「新規デバイスの追加」で「RDMディスク」を選びます。

共有ディスク 1台目の設定 04

ターゲットLUNを指定し、「OK」を押下します。

共有ディスク 1台目の設定 05

「共有」を「マルチライター」に変更します。これを変更しないと、クラスタを組む2台の仮想マシンを同時に起動できません。

「仮想デバイスノード」は前述の操作で作成したSCSIコントローラーを指定します。

共有ディスク 1台目の設定 06

仮想マシンの設定変更後、ESXiにログインし、実際に作成されるファイルを見てみましょう。vmdkファイルをcatコマンドなどで閲覧すると、ディスクが作成されるのではなく、実態はLUNへのポインタである事が分かります。

[root@esxi142:~] ls -l /vmfs/volumes/vmfs141/centos50/
total 2370560
-rw-r--r--    1 root     root           395 Apr 21 08:47 centos50-2adf0bbc.hlog
-rw-------    1 root     root     53687091200 Apr 22 14:34 centos50-flat.vmdk
-rw-------    1 root     root        270840 Apr 22 14:33 centos50.nvram
-rw-------    1 root     root           498 Apr 22 14:33 centos50.vmdk
-rw-r--r--    1 root     root             0 Apr 21 08:47 centos50.vmsd
-rwxr-xr-x    1 root     root          3278 Apr 23 10:49 centos50.vmx
-rw-------    1 root     root     10737434624 Apr 23 10:49 centos50_1-rdmp.vmdk
-rw-------    1 root     root           476 Apr 23 10:49 centos50_1.vmdk
-rw-r--r--    1 root     root        133548 Apr 22 13:47 vmware-19.log
-rw-r--r--    1 root     root        133489 Apr 22 13:53 vmware-20.log
-rw-r--r--    1 root     root        133396 Apr 22 14:03 vmware-21.log
-rw-r--r--    1 root     root        133469 Apr 22 14:08 vmware-22.log
-rw-r--r--    1 root     root        133489 Apr 22 14:13 vmware-23.log
-rw-r--r--    1 root     root        133498 Apr 22 14:27 vmware-24.log
-rw-r--r--    1 root     root        133580 Apr 22 14:34 vmware.log
-rw-------    1 root     root      84934656 Apr 21 10:27 vmx-centos50-d51f4c0e5fab914c765a70e13c334e0a2ed7dfe3-1.vswp
[root@esxi142:~]
[root@esxi142:~]
[root@esxi142:~] cat /vmfs/volumes/vmfs141/centos50/centos50_1.vmdk
# Disk DescriptorFile
version=1
encoding="UTF-8"
CID=fffffffe
parentCID=ffffffff
createType="vmfsPassthroughRawDeviceMap"

# Extent description
RW 20971552 VMFSRDM "centos50_1-rdmp.vmdk"

# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "1305"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "0745cc83db514cbb0224934bfffffffe"
ddb.uuid = "60 00 C2 9f 4e 6d 4f f7-79 b2 62 2c e8 25 73 06"
ddb.virtualHWVersion = "14"

2台目の設定

「2台目の仮想マシン」の右クリックメニューで、「設定の編集」を選びます。

共有ディスク 2台目の設定 01

「新規デバイスの追加」で「SCSIコントローラー」を選びます。

共有ディスク 2台目の設定 02

SCSIパスの共有は「物理」を選びます。

SCSIパスの共有の設定の意味は「SCSI コントローラ設定の変更」を参照ください。

共有ディスク 2台目の設定 03

「新規デバイスの追加」で「既存のハードディスク」を選びます。

共有ディスク 2台目の設定 04

1台目で追加したディスクのVMDKファイルを選びます。

共有ディスク 2台目の設定 05

「共有」を「マルチライター」に変更します。「仮想デバイスノード」は前述の操作で作成したSCSIコントローラーを指定します。

共有ディスク 2台目の設定 06

動作確認

仮想マシンの起動

前述の手順で設定したcentos50, centos51を起動します。「マルチライター」などの設定に誤りがあると、ここでの起動操作に失敗します。

起動操作

1台目ディスクのマウント操作

1台目の仮想マシンにてディスクを認識している事を確認します。

[root@centos50 ~]# fdisk -l
ディスク /dev/sda: 50 GiB, 53687091200 バイト, 104857600 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 83F90A99-041C-415E-8DBA-595D6C1E0B2A

デバイス   開始位置  終了位置    セクタ サイズ タイプ
/dev/sda1      2048   1230847   1228800   600M EFI システム
/dev/sda2   1230848   3327999   2097152     1G Linux ファイルシステム
/dev/sda3   3328000   4376575   1048576   512M Linux スワップ
/dev/sda4   4376576 104855551 100478976  47.9G Linux ファイルシステム


ディスク /dev/sdb: 10 GiB, 10737434624 バイト, 20971552 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 16384 バイト
I/O サイズ (最小 / 推奨): 16384 バイト / 1048576 バイト

ディスクを何らかのファイルシステムでフォーマットし、これを適当なディレクトリにマウントします。

ext4やxfsは複数のOSから同時にアクセスされる事を想定したファイルシステムではありません。説明を簡易にするためにext4やxfsを紹介しましたが、もっともらしい検証シナリオをするならばMSFCやOracle RACに挑戦するのが良いでしょう。

[root@centos50 ~]# mkfs -t ext4 /dev/sdb
mke2fs 1.45.4 (23-Sep-2019)
Discarding device blocks: done                            
Creating filesystem with 2621440 4k blocks and 656640 inodes
Filesystem UUID: 8e64aa75-c198-4f65-beae-cc971f0f5d77
Superblock backups stored on blocks: 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@centos50 ~]# mkdir /share
[root@centos50 ~]# mount /dev/sdb /share
[root@centos50 ~]# 

何か適当なファイルを作成します。

[root@centos50 ~]# echo "centos50 : this is test" >> /share/test50.txt
[root@centos50 ~]# cat /share/test50.txt 
centos50 : this is test
[root@centos50 ~]# 
[root@centos50 ~]# ls -l /share/
合計 20
drwx------ 2 root root 16384  4月 23 20:55 lost+found
-rw-r--r-- 1 root root    24  4月 23 20:55 test50.txt
[root@centos50 ~]# 

ここで電源断障害を再現するために、centosのパワーオフをします。

電源断

2台目ディスクのマウント操作

2台目の仮想マシンにてディスクを認識している事を確認します。

[root@centos51 ~]# fdisk -l
ディスク /dev/sda: 50 GiB, 53687091200 バイト, 104857600 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 83F90A99-041C-415E-8DBA-595D6C1E0B2A

デバイス   開始位置  終了位置    セクタ サイズ タイプ
/dev/sda1      2048   1230847   1228800   600M EFI システム
/dev/sda2   1230848   3327999   2097152     1G Linux ファイルシステム
/dev/sda3   3328000   4376575   1048576   512M Linux スワップ
/dev/sda4   4376576 104855551 100478976  47.9G Linux ファイルシステム


ディスク /dev/sdb: 10 GiB, 10737434624 バイト, 20971552 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 16384 バイト
I/O サイズ (最小 / 推奨): 16384 バイト / 1048576 バイト

これを適当なディレクトリにマウントします。

1台目でフォーマット操作済みのため、2台目ではフォーマットしない。

[root@centos51 ~]# mkdir /share
[root@centos51 ~]# mount /dev/sdb /share
[root@centos51 ~]# 

centos50で作成したファイルが見える事を確認します。

[root@centos51 ~]# ls -l /share/
合計 20
drwx------ 2 root root 16384  4月 23 20:55 lost+found
-rw-r--r-- 1 root root    24  4月 23 20:55 test50.txt
[root@centos51 ~]# cat /share/test50.txt 
centos50 : this is test
[root@centos51 ~]# 
タイトルとURLをコピーしました