Virt 屋のひとりごと : RDM を移行(移動)する

※本記事は OpenShift Virtualization アドベントカレンダーの 15 日目の記事です。

qiita.com

皆さんこんにちは、OpenShift Virtualization とストレージを生業にしている Red Hat のうつぼ(宇都宮)です。

唐突ですが昨日私 VMware の資格試験を受けてきました。結果は無事合格。多分一番簡単な試験だったんですが、胸を撫で下ろしています。
なんで Red Hat のオマエが VMware の資格取ってんだよと突っ込むところですが、やっぱ VMware からの移行を検討しているお客様が圧倒的に多いんですね。ほんとに圧倒的で20馬身以上あります。
なので、「さすがに Virt 特命係のうつぼは移行元の VMware の勉強せにゃならんでしょう、せっかく勉強するならついでに資格も取ってしまえ、受験費用は会社が出すから。」
ということになり、ホヤホヤの VCF9 対応の VMware vSphere Foundation Administrator を取ったということです。※落ちたら自腹だからかなり怖かった。

さて、VMware からの移行でしばしば挙がってくる話題が、RDM(Raw Device Mapping)ディスクはどう移行するのか?です。RDM はシンプルに容量が大きいことが多いので、移行は大変そうですよね。

ということで今日のテーマは RDM の移行です。

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 です。こちらのドキュメントを参考にして下さい。

https://docs.redhat.com/ja/documentation/openshift_container_platform/4.20/html-single/storage/index#persistent-storage-using-iscsi

Virt の仮想ディスクとして使ううえで重要なのは、 accessModes: ReadWriteManyvolumeMode: 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 を選びます。

Volume を選ぶ

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

タイプとインターフェース

※ディスクのタイプとかインターフェースの特徴については以前の投稿をご覧下さい。

rheb.hatenablog.com

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 は大容量で使われるパターンがあるので、普通にデータコピーして移行するのはかなり骨が折れます。
そんな場合は、こんなやり方でも移行(移動)できるよという紹介でした。

あ、もちろんですが、この方法はいきなり本番で試すのではなくて、きちんと検証して手順を確立させてからやってくださいね。ストレージ装置ごとに手順が違ったりするので。

ということで今日はここまで。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。