※本記事は OpenShift Virtualization アドベントカレンダーの 15 日目の記事です。
皆さんこんにちは、OpenShift Virtualization とストレージを生業にしている Red Hat のうつぼ(宇都宮)です。
唐突ですが昨日私 VMware の資格試験を受けてきました。結果は無事合格。多分一番簡単な試験だったんですが、胸を撫で下ろしています。
なんで Red Hat のオマエが VMware の資格取ってんだよと突っ込むところですが、やっぱ VMware からの移行を検討しているお客様が圧倒的に多いんですね。ほんとに圧倒的で20馬身以上あります。
なので、「さすがに Virt 特命係のうつぼは移行元の VMware の勉強せにゃならんでしょう、せっかく勉強するならついでに資格も取ってしまえ、受験費用は会社が出すから。」
ということになり、ホヤホヤの VCF9 対応の VMware vSphere Foundation Administrator を取ったということです。※落ちたら自腹だからかなり怖かった。
さて、VMware からの移行でしばしば挙がってくる話題が、RDM(Raw Device Mapping)ディスクはどう移行するのか?です。RDM はシンプルに容量が大きいことが多いので、移行は大変そうですよね。
ということで今日のテーマは RDM の移行です。
- VMware 上で物理互換モードの RDM を使う
- VM から RDM を外して付け替える
- OpenShift で LUN を PV として定義する
- Virt 上で VM に PVC を追加する。
- VM でディスクをみてみる
- まとめ
OpenShift Virtualization(以下 Virt)では、RDM のように外部ストレージの LUN をそのまま VM に見せる方法があります。
本稿では、vSphere 上の VM に見せていた RDM ディスクを Virt 上の VM に見せるにはどうするのか & どうなるのか?を実際にやってみて紹介します。
VMware 上で物理互換モードの RDM を使う
RDM とはなんぞや?については Red Hatter の私が語るのはおこがましいし、先人たちの様々な記事があるので省略します。
Virt で RDM の出元の LUN を認識するためには、物理互換モードの RDM(p-RDM)であることが必要です。

RDM の多くは p-RDM で使われてると思うので、ここは大抵問題ないと思います。
上の図は、RHEL の VM に iSCSI ストレージから切り出した 10GiB の RDM ディスクを追加しているところです。互換モードに『物理』が選ばれていることを確認します。
この VM を起動すると当然ながら 10GiB のディスクが見えます。RDM は SCSI なので /dev/sdX と認識されます。
[root@mig-test-rhel ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 316G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 314.4G 0 part ├─rhel-root 253:0 0 312.8G 0 lvm / └─rhel-swap 253:1 0 1.6G 0 lvm [SWAP] sdb 8:16 0 10G 0 disk # RDM ディスク
このディスクをファイルシステムで使うケースと Raw で使うケースがありますが、どちらでも同じです。ここでは簡単のため XFS でフォーマットしてファイルシステムとして使います。
フォーマットしたらマウントして適当なファイルを突っ込みます。複数のディレクトリを掘ってその中にファイルを1つずつ格納します。
[root@mig-test-rhel ~]# mkfs.xfs /dev/sdb
specified blocksize 4096 is less than device physical sector size 16384
switching to logical sector size 512
meta-data=/dev/sdb isize=512 agcount=4, agsize=655361 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2621444, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
[root@mig-test-rhel ~]# mount /dev/sdb /mnt
... ファイルを生成 ...
[root@mig-test-rhel ~]# find /mnt -maxdepth 2 -type f | sort
/mnt/A-alpha/Adele.txt
/mnt/B-bravo/Brad_Pitt.txt
/mnt/C-charlie/Charlie_Chaplin.txt
/mnt/D-delta/Denzel_Washington.txt
/mnt/E-echo/Emma_Stone.txt
/mnt/F-foxtrot/Frank_Sinatra.txt
/mnt/G-golf/George_Clooney.txt
/mnt/H-hotel/Hugh_Jackman.txt
/mnt/I-india/Ian_McKellen.txt
/mnt/J-juliett/Jennifer_Lawrence.txt
/mnt/K-kilo/Keanu_Reeves.txt
/mnt/L-lima/Leonardo_DiCaprio.txt
/mnt/M-mike/Morgan_Freeman.txt
/mnt/N-november/Natalie_Portman.txt
/mnt/O-oscar/Oprah_Winfrey.txt
/mnt/P-papa/Paul_McCartney.txt
/mnt/Q-quebec/Queen_Latifah.txt
/mnt/R-romeo/Robert_De_Niro.txt
/mnt/S-sierra/Scarlett_Johansson.txt
/mnt/T-tango/Tom_Hanks.txt
/mnt/U-uniform/Usain_Bolt.txt
/mnt/V-victor/Victoria_Beckham.txt
/mnt/W-whiskey/Will_Smith.txt
/mnt/X-xray/Xavier_Dolan.txt
/mnt/Y-yankee/Yoko_Ono.txt
/mnt/Z-zulu/Zendaya.txt
[root@mig-test-rhel ~]# cat /mnt/A-alpha/Adele.txt
A - alpha : Adele
VM から RDM を外して付け替える
はい下準備は終わり。ここからが本番です。データが入った RDM を VM から取り除きます。
VM 上でファイルシステムをアンマウントしてから、vSphere Client などで VM の設定から RDM ディスクを削除すればよいです。
vmdk ファイルも削除するか?のオプションについては正直どちらでも構いません。中のデータまで消えることはありません。
[root@mig-test-rhel ~]# umount /mnt ... RDM ディスクを削除 ... [root@mig-test-rhel ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 316G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 314.4G 0 part ├─rhel-root 253:0 0 312.8G 0 lvm / └─rhel-swap 253:1 0 1.6G 0 lvm [SWAP]
iSCSI の場合は ESXi が認識しているターゲットを削除して、iSCSI セッションを切ります。
これで LUN がフリーになりました。ここからはストレージ側の操作で、LUN を認識させているホストを ESXi ホストから OpenShift クラスタのノードに切り替えます。
ストレージ装置ごとに操作が異なるので手順は割愛します。
OpenShift で LUN を PV として定義する
ここからは OpenShift 側の操作です。
いま LUN が OpenShift のノードから見えている状態になっているはずです。さっそく PV を定義してみましょう。
通常の iSCSI LUN の PV の定義で OK です。こちらのドキュメントを参考にして下さい。
Virt の仮想ディスクとして使ううえで重要なのは、 accessModes: ReadWriteMany と volumeMode: Block を指定することです。
問題がなければ Available になるはずです。
apiVersion: v1
kind: PersistentVolume
metadata:
name: iscsi-rdm-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
volumeMode: Block
iscsi:
targetPortal: 192.168.34.3:3260
iqn: iqn.2005-10.org.freenas.ctl:rdm-vmware
lun: 0
readOnly: false
それでは次に PVC を作成してこの PV にバインドします。storageClassName: "" と明示しないと default StorageClass から PV を見つけようとしてしまうので注意。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: iscsi-rdm-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
volumeName: iscsi-rdm-pv
storageClassName: ""
PVC が Bound になっていれば OK です。
[root@bastion ~]# oc get pvc iscsi-rdm-pvc -n demo NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE iscsi-rdm-pvc Bound iscsi-rdm-pv 10Gi RWX <unset> 2m53s
Virt 上で VM に PVC を追加する。
それではこの PVC を指定して VM に追加してみます。MTV で移行した VMware にいた RHEL VM でもよいですし、全然違う VM でもどちらでも構いません。
ここでは全然違う VM につけてみます。
Virt の画面で VM を選んでディスクの追加を行います。ディスクの追加のメニューで Volume を選びます。

次に、先ほど作成した PVC を選択して、タイプ : LUN、インターフェース : SCSIを指定します。これが Virt で LUN を RDM 的にそのまま使うための設定です。

※ディスクのタイプとかインターフェースの特徴については以前の投稿をご覧下さい。
VM でディスクをみてみる
さあさあさあ、VM にログインしてこのディスクをみてみましょう。
[cloud-user@rhel9-jade-wildfowl-88 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 10G 0 disk # iSCSI LUN vda 252:0 0 30G 0 disk ├─vda1 252:1 0 1M 0 part ├─vda2 252:2 0 200M 0 part /boot/efi ├─vda3 252:3 0 1G 0 part /boot └─vda4 252:4 0 28.8G 0 part / vdb 252:16 0 1M 0 disk [cloud-user@rhel9-jade-wildfowl-88 ~]$ blkid /dev/vdb: UUID="2025-12-16-01-58-59-00" LABEL="cidata" TYPE="iso9660" /dev/sda: UUID="c55d3c33-fad2-4d91-be70-ae97d712d540" TYPE="xfs" /dev/vda4: LABEL="root" UUID="00ec0807-5182-4552-9cc4-a3b59fad9934" TYPE="xfs" PARTUUID="6f44decf-0866-4dfb-85df-7022a4c53d47" /dev/vda2: SEC_TYPE="msdos" LABEL_FATBOOT="ESP" LABEL="ESP" UUID="236D-D209" TYPE="vfat" PARTUUID="57cd19ce-1c2f-456b-9426-e9c25944977d" /dev/vda3: LABEL="boot" UUID="2c158aeb-eddc-4161-a951-104986383cbc" TYPE="xfs" PARTUUID="eb823f54-c299-467b-b5c2-c4c159c33e45"
/dev/sda という名前で SCSI ディスクとして認識できていますし、xfs タイプのパーティションも認識できています。このままマウントできそうですね。
じゃあマウントして中身を見てみましょう。
[cloud-user@rhel9-jade-wildfowl-88 ~]$ sudo mount /dev/sda /mnt [cloud-user@rhel9-jade-wildfowl-88 ~]$ find /mnt -maxdepth 2 -type f | sort /mnt/A-alpha/Adele.txt /mnt/B-bravo/Brad_Pitt.txt /mnt/C-charlie/Charlie_Chaplin.txt /mnt/D-delta/Denzel_Washington.txt /mnt/E-echo/Emma_Stone.txt /mnt/F-foxtrot/Frank_Sinatra.txt /mnt/G-golf/George_Clooney.txt /mnt/H-hotel/Hugh_Jackman.txt /mnt/I-india/Ian_McKellen.txt /mnt/J-juliett/Jennifer_Lawrence.txt /mnt/K-kilo/Keanu_Reeves.txt /mnt/L-lima/Leonardo_DiCaprio.txt /mnt/M-mike/Morgan_Freeman.txt /mnt/N-november/Natalie_Portman.txt /mnt/O-oscar/Oprah_Winfrey.txt /mnt/P-papa/Paul_McCartney.txt /mnt/Q-quebec/Queen_Latifah.txt /mnt/R-romeo/Robert_De_Niro.txt /mnt/S-sierra/Scarlett_Johansson.txt /mnt/T-tango/Tom_Hanks.txt /mnt/U-uniform/Usain_Bolt.txt /mnt/V-victor/Victoria_Beckham.txt /mnt/W-whiskey/Will_Smith.txt /mnt/X-xray/Xavier_Dolan.txt /mnt/Y-yankee/Yoko_Ono.txt /mnt/Z-zulu/Zendaya.txt [cloud-user@rhel9-jade-wildfowl-88 ~]$ cat /mnt/A-alpha/Adele.txt A - alpha : Adele
OK!ばっちり RDM のファイルを持ってこれましたね!
まとめ
こんな感じで VMware の RDM ディスクを付け外しで Virt に持ってこれました。
RDM や SCSI LUN タイプは仮想化レイヤーを極力通さずオーバーヘッドが小さいため、ストレージ側のパフォーマンスを最大限活かすことができます。
また、最初にも書きましたが RDM は大容量で使われるパターンがあるので、普通にデータコピーして移行するのはかなり骨が折れます。
そんな場合は、こんなやり方でも移行(移動)できるよという紹介でした。
あ、もちろんですが、この方法はいきなり本番で試すのではなくて、きちんと検証して手順を確立させてからやってくださいね。ストレージ装置ごとに手順が違ったりするので。
ということで今日はここまで。