UTMによるLVMとRAID検証環境の作成
背景
Linuxにおけるストレージ構造のおさらいでLinuxのストレージ構造(パーティション・RAID・LVM・ファイルシステム・マウント)を概念として整理した。今回はその内容を踏まえ、実際に手を動かしてRAIDとLVMを組み合わせた構成を作り、マウントと永続化まで含めて一連の流れを確認する。
検証目的
UTM上に作成したUbuntu VMに追加した2台の仮想ディスクを使用し、mdadmによるRAID 1の構築からLVMでの論理ボリューム作成、ext4ファイルシステムの作成、マウント、/etc/fstabへの永続化、RAID構成自体の永続化までを一通り構築し、各コマンドの役割と確認方法をおさらいする。
構成
仮想ディスク2台
↓
ソフトウェアRAID 1(mdadm)
↓
LVM(vg_lab / lv_data)
↓
ext4ファイルシステム
↓
マウント(/mnt/storage_lab)
↓
/etc/fstabへの永続化
実装
1. Ubuntu仮想マシンの作成
UTMでUbuntuのISOイメージを読み込み、仮想マシンを作成する。
Ubuntuのインストールと初期設定が完了したら、仮想マシンを一度完全にシャットダウンする。その後、UTMの仮想マシン設定から、RAID用の仮想ディスクを2台追加する。
仮想マシンを起動し、追加したディスクがOSに認識されていることを確認する。
lsblk
例えば、OSディスクが/dev/vda、追加したディスクが/dev/vdbと/dev/vdcとして認識されていることを確認する。
デバイス名は環境によって異なるため、実際の出力を必ず確認してからコマンドを実行する。
2. mdadmのインストール
mdadmがインストールされていない場合は、以下のコマンドでインストールする。
sudo apt update
sudo apt install -y mdadm
3. RAID 1の作成
追加した2台のディスクを使用して、RAID 1を構築する。
sudo mdadm --create /dev/md0 \
--level=1 \
--raid-devices=2 \
/dev/vdb /dev/vdc
各オプションの意味は以下のとおり。
| オプション | 概要 |
|---|---|
/dev/md0 |
作成するRAIDデバイス名 |
--level=1 |
RAID 1を指定する |
--raid-devices=2 |
RAIDを構成するディスク数を指定する |
/dev/vdb /dev/vdc |
RAIDの構成対象となるディスク |
RAIDの状態は、以下のコマンドで確認する。
cat /proc/mdstat
詳細な情報を確認する場合は、以下を実行する。
sudo mdadm --detail /dev/md0
/proc/mdstatに/dev/md0が表示され、同期処理が完了していることを確認する。
4. RAIDデバイス上にLVMを構築する
作成したRAIDデバイス/dev/md0を、LVMの物理ボリュームとして使用する。
sudo pvcreate /dev/md0
sudo vgcreate vg_lab /dev/md0
sudo lvcreate -L 600M -n lv_data vg_lab
| コマンド | 役割 |
|---|---|
pvcreate /dev/md0 |
RAIDデバイスをLVMの物理ボリュームとして初期化する |
vgcreate vg_lab /dev/md0 |
vg_labというボリュームグループを作成し、物理ボリュームを割り当てる |
lvcreate -L 600M -n lv_data vg_lab |
vg_labから600MiBを割り当て、lv_dataという論理ボリュームを作成する |
作成後、以下のコマンドでLVMの状態を確認する。
sudo pvs
sudo vgs
sudo lvs
より詳細な情報を確認する場合は、以下のコマンドも使用できる。
sudo pvdisplay
sudo vgdisplay
sudo lvdisplay
5. ファイルシステムの作成
作成した論理ボリュームに、ext4ファイルシステムを作成する。
sudo mkfs.ext4 /dev/vg_lab/lv_data
または、デバイスマッパー上のパスを指定することもできる。
sudo mkfs.ext4 /dev/mapper/vg_lab-lv_data
6. マウント
論理ボリュームを接続するディレクトリを作成し、マウントする。
sudo mkdir -p /mnt/storage_lab
sudo mount /dev/vg_lab/lv_data /mnt/storage_lab
7. /etc/fstabへの設定
手動で実行したmountコマンドの設定は、OSを再起動すると解除される。起動時に論理ボリュームを自動的にマウントするには、/etc/fstabへ設定を記述する。
/etc/fstabのフォーマットは以下のとおり。
ファイルシステム マウントポイント ファイルシステム種別 オプション dump fsck
例:
UUID=<UUID> /mnt/storage_lab ext4 defaults 0 2
各フィールドの意味は以下のとおり。
| 項目 | 概要 |
|---|---|
| ファイルシステム | マウント対象となるデバイスを指定する。通常はUUIDを使用する |
| マウントポイント | ファイルシステムを接続するディレクトリ |
| ファイルシステム種別 | ext4やxfsなどのファイルシステム形式 |
| オプション | マウント時の動作を指定する。一般的にはdefaultsを使用する |
| dumpフラグ | dumpコマンドによるバックアップ対象とするかを指定する。通常は0 |
| fsckの優先度 | 起動時にfsckで検査する順番を指定する |
fsckの優先度には、一般的に以下の値を指定する。
| 値 | 意味 |
|---|---|
0 |
起動時にファイルシステムチェックを実行しない |
1 |
最優先でチェックする。通常はルートファイルシステムに指定する |
2 |
ルートファイルシステムの後にチェックする |
論理ボリュームのUUIDを確認する。
sudo blkid /dev/vg_lab/lv_data
出力例:
/dev/mapper/vg_lab-lv_data: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
UUIDのみを取得する場合は、以下のコマンドを使用する。
sudo blkid -s UUID -o value /dev/vg_lab/lv_data
取得したUUIDを使用して、/etc/fstabへ以下のように記述する。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/storage_lab ext4 defaults 0 2
設定を反映する前に、現在のマウントを解除する。
sudo umount /mnt/storage_lab
続いて、/etc/fstabの内容に基づいてすべてのファイルシステムをマウントする。
sudo mount -a
エラーが表示されなければ、設定内容は基本的に正しい。
8. RAID構成の永続化
再起動後もRAIDデバイスを確実に認識できるように、現在のRAID構成を設定ファイルへ保存する。
sudo mdadm --detail --scan
出力内容を確認したうえで、/etc/mdadm/mdadm.confへ追記する。
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
続いて、initramfsを更新する。
sudo update-initramfs -u
これにより、OS起動時にRAIDデバイスが正しく検出されやすくなる。
動作確認
ファイルシステム作成後、lsblk -fでストレージ構成を確認する。
lsblk -f
以下のように、2台のディスクがRAID 1を構成し、その上にLVMの論理ボリュームが作成されていれば成功となる。
vdb
└─md0
└─vg_lab-lv_data
vdc
└─md0
└─vg_lab-lv_data

マウント状態はdfとfindmntで確認する。
df -hT /mnt/storage_lab
findmnt /mnt/storage_lab
書き込みが可能か確認する場合は、テストファイルを作成する。
sudo touch /mnt/storage_lab/testfile
ls -l /mnt/storage_lab
再起動後も自動的にマウントされることを確認する。
sudo reboot
再起動後に以下を実行する。
findmnt /mnt/storage_lab
最終的に、以下の項目を確認できれば検証完了とする。
/dev/vdbと/dev/vdcがRAID 1を構成している- RAIDデバイスとして
/dev/md0が作成されている /dev/md0がLVMの物理ボリュームになっているvg_labボリュームグループが作成されているlv_data論理ボリュームが作成されているlv_dataにext4ファイルシステムが作成されている/mnt/storage_labへ正常にマウントされている/etc/fstabの設定により、再起動後も自動マウントされる- 再起動後も
/dev/md0が正常に認識されている
ハマった点
TODO: 検証中に詰まった点があれば追記する。
学んだこと
検証で使用した主なコマンドを整理した。
| コマンド | 概要 |
|---|---|
lsblk |
OSが認識しているブロックデバイスを階層的に表示する。ディスク、パーティション、RAID、LVM、マウントポイントなどの関係を確認できる |
lsblk -f |
ブロックデバイスに加えて、ファイルシステム種別、UUID、マウントポイントを表示する |
blkid |
デバイスのUUIDやファイルシステム種別を確認する。/etc/fstabでUUIDを指定すると、デバイス名が変化した場合でも安定してマウントできる |
fdisk |
MBRまたはGPT形式のパーティションを作成・変更する |
gdisk |
GPT形式のパーティション操作に特化したコマンド |
parted |
MBRとGPTの両方に対応し、大容量ディスクやスクリプトによる操作にも適している |
mdadm |
LinuxのソフトウェアRAIDを作成・管理する |
cat /proc/mdstat |
RAIDの同期状態や稼働状態を確認する |
pvs / vgs / lvs |
LVMの物理ボリューム・ボリュームグループ・論理ボリュームを一覧表示する |
df -hT |
マウント済みファイルシステムの容量、使用率、ファイルシステム種別を確認する |
findmnt |
マウント元、マウント先、ファイルシステム種別、マウントオプションを確認する |
RAID自体はmdadm.confとinitramfsへの反映で永続化し、マウントは/etc/fstabでUUID指定により永続化する、という役割分担になっている点が整理できた。
次の課題
- TODO: ディスクを意図的に1本外し、RAID 1の縮退運転・リビルドの挙動を確認する
- TODO: LVMのスナップショットやオンライン拡張など、応用機能を試す
