Ubuntuで LVM2を使って複数のディスクをまとめてソフトウェアRAIDを組みます。
Microsoftのパブリッククラウド Azureで VMを構築した際にストレージのスピードが問題になったことがあります。
Azureには高速ストレージとして PremiumSSDというものがあるのですが、これでも速度が足りませんでした。
私はミドルウェアのライセンス代を低く抑えるために CPU数が 2個や 4個の VMを良く選定していたのですが、このサイズの VMでは接続できるストレージ数・最大スループット・最大IOPSが制限されていて、PremiumSSDが持つ本来のパワーを享受できずヤキモキしていました。
もっとお金を払って大きな VMを使えよって事なんで、仕方がないんですけどね。
Ultra Diskはまだ Azure Backupに対応してなかったので運用上使うことができなかったです。
(今は対応しているだろうか)
そんな経験をしていた過程で PremiumSSDの速度アップの方法を調べていた時に Microsoftのサイトで見つけた方法は、複数の PremiumSSDで RAID0(ディスクストライピング)せよ、というものでした。
Premium SSD自体は RAIDになっていますが、それを OSの機能(またはストレージ用のソフトウェア)で束ねて RAIDを組めってことです。
ストライピングを使う際の稼働率低下(故障率アップ)に触れてないのはどうかなぁと思いましたが、他に方法もないですし、嫌なら RAID0+1にでもしてミラーリングもしとけよってことですね。
「Ubuntuのディスク増設」にて、LVM2による論理ボリューム作成をやってますので、ここではその応用で RAID0の論理ボリュームを作ってみます。
1.環境
VMware Workstation Proで作った仮想マシンにインストールした Ubuntu Server 24.04、そこに仮想ハードディスクを 3つ増設します。
Ubuntu Serverのインストールについては「Ubuntu 24.04 Server インストール」に書いています。
2.ディスク増設
増設前のディスクの状態です。
20GBの仮想ハードディスク(/dev/sda)が 1つだけあります。
subro@UbuntuServer2404-1:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 18.2G 0 lvm /
sr0 11:0 1 1024M 0 rom
ディスクを増設するので一旦シャットダウンします。
subro@UbuntuServer2404-1:~$ sudo poweroff
VMware Workstation Proのメニューで Ubuntu Serverの仮想マシンの上で右クリックするとメニューが出ますので、[設定]を選択します。
下の方にある追加を押します。
[ハードディスク]を選択して次へを押します。
[SCSI]を選択して次へを押します。
[仮想ディスクの新規作成]を選択して次へを押します。
[ディスク最大サイズ]を入力し、[仮想ディスクを単一ファイルとして格納]を選択して次へを押します。
完了を押します。
5GBの新規仮想ディスクができました。
OKを押します。
これをあと 2回やって 3つのハードディスクを増設した形にします。
Ubuntu Serverを立ち上げます。
改めて確認します。
subro@UbuntuServer2404-1:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 18.2G 0 lvm /
sdb 8:16 0 5G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sr0 11:0 1 1024M 0 rom
ピンク色のディスクが増えています。
3.Physical Volume(PV)作成
それぞれ Physical Volume(PV)として登録します。
subro@UbuntuServer2404-1:~$ sudo pvcreate /dev/sdb /dev/sdc /dev/sdd
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
できました。
PVの情報を見てみます。
subro@UbuntuServer2404-1:~$ sudo pvdisplay
--- Physical volume ---
PV Name /dev/sda3
VG Name ubuntu-vg
PV Size <18.23 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4665
Free PE 0
Allocated PE 4665
PV UUID 35HoZS-aKFY-VO64-65HW-xqh0-nVNH-sM4T3l
"/dev/sdb" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 2t24Ax-84OR-ZXA8-yG40-fLAM-brgW-qAHw6r
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID mc0Y9h-knQC-RwcY-94Wl-7wrV-2Imu-KmcPF9
"/dev/sdd" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID U794IU-9EuS-2TKy-AGAU-8jgz-DZ9D-KRCY3Q
PVができました。
4.Volume Group(VG)作成
上で作った 3つのPVを同じ Volume Group(VG)に所属させます。
VGの名前は [raid-group] にしました。
subro@UbuntuServer2404-1:~$ sudo vgcreate raid-group /dev/sdb /dev/sdc /dev/sdd
Volume group "raid-group" successfully created
[raid-group]VGができました。
情報を見てみます。
subro@UbuntuServer2404-1:~$ sudo vgdisplay raid-group
--- Volume group ---
VG Name raid-group
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <14.99 GiB
PE Size 4.00 MiB
Total PE 3837
Alloc PE / Size 0 / 0
Free PE / Size 3837 / <14.99 GiB
VG UUID reXTsK-3FGl-985E-v9SP-BVN8-7obc-tTeQlP
[raid-group]VGには 4MBの PEが 3,837個(≒15GB)あります。
[Cur PV](多分 Current PV)・[Act PV](多分 Active PV)が 3になってますのでれで良さげです。
4.Logical Volume(LV)作成(RAID作成)
Logical Volume(LV)作成が RAID構築と同義で、RAID0・RAID1・RAID4・RAID5・RAID6・RAID10を作ることができます。
[raid-group]VGから領域を得て RAID0構成の LVを作成します。
サイズの指定は領域をキッチリ使いたかったので、上の [Total PE]の数値を
[--extents PE数]オプションで指定しています。
LVの名前は [lv-raid0] にしました。
subro@UbuntuServer2404-1:~$ sudo lvcreate --type raid0 --stripes 3 --extents 3837 --name lv-raid0 raid-group
Using default stripesize 64.00 KiB.
Logical volume "lv-raid0" created.
[lv-raid0]LVができました。
情報を見てみます。
subro@UbuntuServer2404-1:~$ sudo lvdisplay /dev/raid-group/lv-raid0
--- Logical volume ---
LV Path /dev/raid-group/lv-raid0
LV Name lv-raid0
VG Name raid-group
LV UUID j7yHUT-U2tx-D1TP-VKQi-0590-FcpR-pwUqAq
LV Write Access read/write
LV Creation host, time UbuntuServer2404-1, 2025-04-29 08:11:40 +0900
LV Status available
# open 0
LV Size <14.99 GiB
Current LE 3837
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 768
Block device 252:4
3つ合わせて概ね 15GBのサイズになっています。
5.LVのフォーマットとマウント
あとはもう「Ubuntuのディスク増設」で LVをマウントしたのと同じなので端折りながら。
一応ディスクのできあがりを見てみましょう。
subro@UbuntuServer2404-1:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 18.2G 0 lvm /
sdb 8:16 0 5G 0 disk
└─raid--group-lv--raid0_rimage_0 252:1 0 5G 0 lvm
└─raid--group-lv--raid0 252:4 0 15G 0 lvm
sdc 8:32 0 5G 0 disk
└─raid--group-lv--raid0_rimage_1 252:2 0 5G 0 lvm
└─raid--group-lv--raid0 252:4 0 15G 0 lvm
sdd 8:48 0 5G 0 disk
└─raid--group-lv--raid0_rimage_2 252:3 0 5G 0 lvm
└─raid--group-lv--raid0 252:4 0 15G 0 lvm
sr0 11:0 1 1024M 0 rom
[lv-raid0]LVを ext4のファイルシステム用にフォーマットします。
subro@UbuntuServer2404-1:~$ sudo mkfs.ext4 /dev/raid-group/lv-raid0
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 3929088 4k blocks and 983040 inodes
Filesystem UUID: 991dff29-4c84-47ff-b397-3af1cd82fbc4
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
できました。
マウントポイントを作ります。
subro@UbuntuServer2404-1:~$ sudo mkdir /data
何も出ませんができているはずです。
UUIDを使ってマウントするため、[lv-raid0]LVのブロックデバイスとしての UUIDを確認しにいきます。
subro@UbuntuServer2404-1:~$ sudo lvdisplay raid-group/lv-raid0
--- Logical volume ---
LV Path /dev/raid-group/lv-raid0
LV Name lv-raid0
VG Name raid-group
LV UUID j7yHUT-U2tx-D1TP-VKQi-0590-FcpR-pwUqAq
LV Write Access read/write
LV Creation host, time UbuntuServer2404-1, 2025-04-29 08:11:40 +0900
LV Status available
# open 0
LV Size <14.99 GiB
Current LE 3837
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 768
Block device 252:4
[LV Path]は [/dev/raid-group/lv-raid0] でした。
blkidコマンド(locate/print block device attributes)で UUIDを確認できます。
新しいデバイスのUUIDを見る時は root権限で実行します。
subro@UbuntuServer2404-1:~$ sudo blkid /dev/raid-group/lv-raid0
/dev/raid-group/lv-raid0: UUID="991dff29-4c84-47ff-b397-3af1cd82fbc4" BLOCK_SIZE="4096" TYPE="ext4"
ピンク色のところが UUIDです。
UUIDが分かったので [/etc/fstab]ファイルを編集します。
一番下の行を追加しました。
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-12lIizcyjCcyAF32oksfsr29gHTlOR3hUP0KZ9l3rlsdM0R8j05Yc9hVfA82VxTq / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/bc1cfd06-4015-4d64-a94d-a5deb53905bc /boot ext4 defaults 0 1
/swap.img none swap sw 0 0
UUID=991dff29-4c84-47ff-b397-3af1cd82fbc4 /data ext4 defaults 0 1
systemctl daemon-reloadコマンドで変更内容を読み込ませます。
subro@UbuntuServer2404-1:~$ sudo systemctl daemon-reload
マウントします。
subro@UbuntuServer2404-1:~$ sudo systemctl start /data
dfコマンドで確認してみます。
subro@UbuntuServer2404-1:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 808360 1476 806884 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 18631360 7446556 10213028 43% /
tmpfs 4041800 0 4041800 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
/dev/sda2 1790136 280092 1400784 17% /boot
tmpfs 808360 12 808348 1% /run/user/1000
/dev/mapper/raid--group-lv--raid0 15363016 24 14560792 1% /data
マウントされています。
動作確認します。
subro@UbuntuServer2404-1:~$ cd /data
subro@UbuntuServer2404-1:/data$ sudo touch aaa
subro@UbuntuServer2404-1:/data$ ls -l
合計 16
-rw-r--r-- 1 root root 0 4月 29 08:52 aaa
drwx------ 2 root root 16384 4月 29 08:22 lost+found
良さげです。
LVM2でのソフトウェアRAID構築は以上になります。
==========
昨今はオンプレなら RAIDになっているエンタープライズレベルの外部ストレージを使うし、クラウドならストレージは元々 RAIDになっているしで、ソフトウェア RAIDを作るなんて 15年以上前に安価で RAIDになっていない外部ストレージを導入して以来でした。
でもソフトウェアRAIDの考え方が当時の HP-UXと全く同じでしたので、根っこの技術は同じものなのでしょう。
「もうソフト RAIDなど…」と思っていましたが、最新のパブリッククラウドで要件が復活するなんて思いもしませんでしたね。
Linux環境では、一旦 PV/VG/LV という観念を理解してしまえば、ソフト RAIDの構築は簡単でした。
あ、RAIDそのものの仕組みの理解は前提になっていますので、念の為。
しかし Linuxもフリーなのにここまで機能があるとは大したものと思いますね。