Log Entry
LinuxStorageRAID

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を使用する
マウントポイント ファイルシステムを接続するディレクトリ
ファイルシステム種別 ext4xfsなどのファイルシステム形式
オプション マウント時の動作を指定する。一般的には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

lsblkでRAID1とLVMの階層構成を確認

マウント状態はdffindmntで確認する。

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のスナップショットやオンライン拡張など、応用機能を試す