NVMe を Oracle VM で柔軟に使う
今回は NVMe を Repository としては使わず、Physical Disk (Block Device)としてそのままVMに割当て使いたいと思います。
理由は、主に以下の2点です。
- パフォーマンス
- Repository とすると OCFS2 が使われ、その上に Virtual Disk が構築されるので、Physical Device と比較するとパフォーマンスは低下します
- 別に Repository がある
NVMe x4 を Physical Disk で利用すると決まったのですが、4枚を単体で使うのは利用しづらいです。
LVM であればそれが簡単にできます。
OracleVM 3.4.3 では Software RAID Devices がサポートされました。Software RAID で構築したデバイスを Oracle VM が認識できて、 Repository や Physical Device として利用できるというものです。
ただ、詳細を確認してみると Software RAID というのはどうやら mdadm を指すようです。
mdadm だと RAID は作れますが、そこから Volume を切り出すことはできません・・・。
やはり、LVM で試すしかないか、、、ということで、NVMe x4 に PV → VG を作成し、RAID5 の LV を切り出してみました。
mdadm on LVM なんてことをすることはあまりないと思いますが、とりあえずできました。
この方法はおそらくサポートされないと思われますので、もし同じようなことをしたい方は自己責任で!
参考までに手順を載せておきます。
- NVMeデバイスを確認する
# lsblk |grep nvmenvme0n1 259:3 0 1.5T 0 disknvme1n1 259:1 0 1.5T 0 disknvme2n1 259:2 0 1.5T 0 disknvme3n1 259:0 0 1.5T 0 disk
# parted /dev/nvme0n1 mktable gpt mkpart primary 1M 100% set 1 lvm on警告: いま存在している /dev/nvme0n1 のディスクラベルは破壊され、このディスクの全データが失われます。続行しますか?parted: 不正なトークンです: mkpartはい(Y)/Yes/いいえ(N)/No? y通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。# parted /dev/nvme1n1 mktable gpt mkpart primary 1M 100% set 1 lvm on通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。# parted /dev/nvme2n1 mktable gpt mkpart primary 1M 100% set 1 lvm on通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。# parted /dev/nvme3n1 mktable gpt mkpart primary 1M 100% set 1 lvm on通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
- デフォルトでは NVMe に LVM を構築できなかったので、LVM の設定を変更します。以下2行をコメントします
# vi /etc/lvm/lvm.conf#global_filter = [ "r|.*/|" ]#md_component_detection = 1
- LVM を構築します
# pvcreate --dataalignment 4k /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1Physical volume "/dev/nvme0n1" successfully createdPhysical volume "/dev/nvme1n1" successfully createdPhysical volume "/dev/nvme2n1" successfully createdPhysical volume "/dev/nvme3n1" successfully created# vgcreate VolNVMe /dev/nvme0n1 /dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1Volume group "VolNVMe" successfully created
- RAID5 の LV を VG から切り出す
# lvcreate --type raid5 -i 3 -L 1400G -n vol01 VolNVMeUsing default stripesize 64.00 KiB.Rounding size 1.37 TiB (358400 extents) up to stripe boundary size 1.37 TiB (358401 extents).Logical volume "vol01" created.
- この LV にさらに mdadm で RAID0 Volume を作成する
# mdadm -C /dev/md01 -l 0 --force -n 1 /dev/VolNVMe/vol01mdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md01 started.
- これで認識してくれるはずである
Before(warning になっているのは NVMe に作成したパーティションの部分なので無視します)
- Refresh を実行し、無事に認識されました!
After
- これをVMに割り当てます
- VM を起動させて確認したところ。xvdb として認識しています
- mdadm の以下も忘れずに
# vi /etc/mdadm.confDEVICE /dev/VolNVMe/vol01 ← 追加する# sudo mdadm --detail --scan >> /etc/mdadm.conf
以上、めでたしめでたし!