はじめに
この実験では、Linux 環境における高度なストレージソリューションの設定と管理方法を習得します。具体的には、柔軟なボリューム管理を可能にする論理ボリュームマネージャー (LVM) と、ソフトウェアベースの冗長ディスクアレイ (RAID) を構築する mdadm という 2 つの強力なツールを使用します。この実験では、ループデバイス(loop devices)を使用して物理ディスクをシミュレートし、コマンドラインから堅牢で拡張性の高いストレージインフラを構築する実戦的なハンズオンを体験できます。
まず、LVM 物理ボリュームの初期化とボリュームグループの作成から始めます。次に、論理ボリュームの作成、フォーマット、マウント、およびサイズ変更を行い、その動的な性質を理解します。その後、データの冗長性を確保するために RAID 1(ミラーリング)アレイを構築してマウントします。最後に、システムの再起動後もこれらのストレージ設定が維持されるよう、/etc/fstab および mdadm.conf ファイルを編集して永続化の設定を行います。
pvcreate と vgcreate による LVM の初期化
このステップでは、論理ボリュームマネージャー (LVM) の操作を開始します。LVM は Linux 上でストレージデバイスを管理するための強力なツールです。物理ハードドライブとファイルシステムの間に抽象化レイヤーを追加することで、稼働中のボリュームのサイズ変更など、非常に柔軟な構成を可能にします。
LVM の基本的な構成要素は以下の通りです:
- 物理ボリューム (PV: Physical Volumes): ハードドライブのパーティションや、今回使用するシミュレートされたディスクなどのブロックデバイスです。
- ボリュームグループ (VG: Volume Groups): 1 つ以上の物理ボリュームをまとめて作成されるストレージのプールです。
- 論理ボリューム (LV: Logical Volumes): ボリュームグループ内の空き容量から作成される「仮想パーティション」です。この LV 上にファイルシステムを作成します。
まず、必要なツールである lvm2 と mdadm がインストールされていることを確認します。
sudo apt-get update && sudo apt-get install -y lvm2 mdadm
この環境には予備の物理ハードドライブがないため、ループデバイスを使用してディスクをシミュレートします。ループデバイスを使用すると、ファイルをブロックデバイスとして扱うことができます。まず、プロジェクトディレクトリにディスクイメージとして機能する 256MB のファイルを 2 つ作成します。
truncate -s 256M disk1.img disk2.img
作成されたファイルが正しいサイズであることを確認します。
ls -lh
以下のような出力が表示されるはずです:
total 0
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk1.img
-rw-r--r-- 1 labex labex 256M Jan 1 12:00 disk2.img
次に、これらのイメージファイルをループデバイスに関連付けます。ここでは /dev/loop20 と /dev/loop21 を使用します。
sudo losetup /dev/loop20 disk1.img
sudo losetup /dev/loop21 disk2.img
これで「ディスク」 (/dev/loop20 と /dev/loop21) が用意できました。pvcreate コマンドを使用して、これらを LVM 物理ボリュームとして初期化します。
sudo pvcreate /dev/loop20 /dev/loop21
出力結果から、PV が正常に作成されたことが確認できます:
Physical volume "/dev/loop20" successfully created.
Physical volume "/dev/loop21" successfully created.
pvs コマンドで物理ボリュームの概要を表示したり、pvdisplay で詳細情報を確認したりできます。
sudo pvs
PV VG Fmt Attr PSize PFree
/dev/loop20 lvm2 --- 256.00m 256.00m
/dev/loop21 lvm2 --- 256.00m 256.00m
物理ボリュームの準備ができたら、次のステップとして、両方の PV のストレージを統合した labvg という名前のボリュームグループを作成します。これには vgcreate コマンドを使用します。
sudo vgcreate labvg /dev/loop20 /dev/loop21
成功すると以下のメッセージが表示されます:
Volume group "labvg" successfully created
最後に、vgs で概要を、または vgdisplay で詳細を確認して、新しいボリュームグループを検査しましょう。
sudo vgs
出力には、合計サイズが約 512MB(各 PV から 256MB ずつ)の labvg グループが表示されます。
VG #PV #LV #SN Attr VSize VFree
labvg 2 0 0 wz--n- 512.00m 512.00m
これで、2 つのデバイスを物理ボリュームとして初期化し、それらを 1 つのボリュームグループに統合することができました。これで柔軟な論理ボリュームを作成する準備が整いました。
lvcreate と mkfs による論理ボリュームの作成とマウント
このステップでは、前のステップで作成したボリュームグループ labvg を使用して、論理ボリューム (LV) を作成します。LV は LVM におけるパーティションに相当するものです。作成後はファイルシステムでフォーマットし、マウントすることでデータを保存できるようになります。
まず、labvg ストレージプールから lablvm という名前の 200MB の論理ボリュームを作成します。lvcreate コマンドを使用し、-L フラグでサイズを、-n フラグで名前を指定します。
sudo lvcreate -L 200M -n lablvm labvg
確認メッセージが表示されます:
Logical volume "lablvm" created.
lvs コマンドを使用して、すべての論理ボリュームの概要を表示し、新しい LV を確認できます。
sudo lvs
出力には、labvg グループ内に新しい lablvm が表示されます。
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lablvm labvg -wi-a----- 200.00m
新しい LV は /dev/labvg/lablvm というデバイスとしてアクセス可能ですが、現在は未フォーマットの生(raw)のブロックデバイスです。ファイルを保存するには、まずファイルシステムを作成する必要があります。ここでは mkfs.ext4 コマンドを使用して、一般的な ext4 ファイルシステムでフォーマットします。
sudo mkfs.ext4 /dev/labvg/lablvm
コマンドを実行すると、作成されたファイルシステムの詳細が出力されます:
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 51200 4k blocks and 51200 inodes
Filesystem UUID: 28796151-bd37-4cae-a17f-071db8795919
Superblock backups stored on blocks:
32768
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
次に、「マウントポイント」として機能するディレクトリが必要です。これは、LV のファイルシステムをメインのディレクトリツリーに結合するための空のディレクトリです。ルートディレクトリに /lablvm という名前のディレクトリを作成しましょう。
sudo mkdir /lablvm
最後に、mount コマンドを使用して、LV 上のファイルシステム (/dev/labvg/lablvm) をマウントポイント (/lablvm) に接続します。
sudo mount /dev/labvg/lablvm /lablvm
ボリュームが正常にマウントされたことを確認し、利用可能な空き容量をチェックするには、df -h (disk free, human-readable) コマンドを使用します。
df -h /lablvm
出力結果から、デバイスがマウントされ、約 200MB の容量が利用可能であることがわかります。
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 172M 24K 158M 1% /lablvm
これで、論理ボリュームの作成、フォーマット、およびマウントが完了し、使用可能な状態になりました。
lvresize による LVM 論理ボリュームのサイズ変更
このステップでは、LVM の最も強力な機能の 1 つである、オンライン(使用中)のまま論理ボリュームとそのファイルシステムのサイズを変更できる機能を体験します。この柔軟性は、従来の静的なパーティションに対する大きな利点です。
まず、df -h コマンドを使用して、現在マウントされている論理ボリュームのサイズを再確認します。
df -h /lablvm
ボリュームのサイズは約 200MB であることがわかります。
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 194M 2.6M 179M 2% /lablvm
ここで、/lablvm 上で動作しているアプリケーションの容量が不足してきたと仮定します。容量を 200MB から 300MB に増やす必要があります。これは lvresize コマンドで行うことができます。ここでは -r フラグを使用します。これは非常に重要で、論理ボリューム内のファイルシステムも同時にリサイズするよう lvresize に指示するものです。このフラグがないと、ファイルシステムは元のサイズのままとなり、追加されたスペースを利用することができません。
sudo lvresize -r -L 300M /dev/labvg/lablvm
出力には、論理ボリュームとファイルシステムの両方がリサイズされている様子が表示されます。
Size of logical volume labvg/lablvm changed from 200.00 MiB (50 extents) to 300.00 MiB (75 extents).
Logical volume labvg/lablvm successfully resized.
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/mapper/labvg-lablvm is mounted on /lablvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/labvg-lablvm is now 76800 (4k) blocks long.
df -h で再度ディスク容量を確認し、変更を検証します。
df -h /lablvm
ボリュームは約 300MB になっています。
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 293M 2.6M 275M 1% /lablvm
新しい絶対サイズを指定するのではなく、一定の容量を追加したい場合もあります。さらに 100MB をボリュームに追加してみましょう。サイズの前に + 記号を付けることで追加できますが、このデモンストレーションでは確実性を期すために絶対サイズ指定の方法を使用します。
sudo lvresize -r -L 400M /dev/labvg/lablvm
リサイズ操作中にファイルシステムエラーが発生しても心配しないでください。短時間に連続してリサイズを行うと、稀に発生することがあります。その場合は、ファイルシステムをアンマウントし、ファイルシステムチェックを実行してから再マウントすることで復旧できます:
## ファイルシステムエラーが発生した場合は、以下のリカバリコマンドを実行してください:
## sudo umount /lablvm
## sudo e2fsck -f /dev/labvg/lablvm
## sudo mount /dev/labvg/lablvm /lablvm
最後に、もう一度 df -h を実行して最終結果を確認します。
df -h /lablvm
ボリュームは約 400MB になり、labvg ボリュームグループの空き容量はその分減少しています。
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 392M 2.7M 369M 1% /lablvm
これで、稼働中の LVM ボリュームのサイズ変更を 2 回成功させ、ダウンタイムなしでストレージ割り当てをいかに簡単に管理できるかを実証できました。
mdadm による RAID 1 アレイの構築とマウント
このステップでは、LVM から別の強力なストレージ技術である RAID (Redundant Array of Independent Disks) に焦点を移します。mdadm ユーティリティを使用して、ミラーリングとして知られる RAID 1 アレイを作成します。RAID 1 構成では、データが 2 つのディスクに同一に書き込まれるため、冗長性が確保されます。一方のディスクが故障しても、もう一方のディスクにデータが安全に残ります。
まず、RAID アレイ用にさらに 2 つのシミュレートされたディスクが必要です。~/project ディレクトリに 256MB の新しいディスクイメージファイル disk3.img と disk4.img を作成します。
truncate -s 256M disk3.img disk4.img
次に、これらの新しいイメージファイルを未使用のループデバイス /dev/loop22 と /dev/loop23 に関連付けます。
sudo losetup /dev/loop22 disk3.img
sudo losetup /dev/loop23 disk4.img
これで RAID 1 アレイを構築する準備が整いました。mdadm コマンドを使用して、2 つのループデバイスを用いた /dev/md0 という名前の新しい RAID デバイスを作成します。
--create /dev/md0:/dev/md0という名前の新しい RAID デバイスを作成します。--level=1: RAID レベルを指定します。この場合は RAID 1(ミラーリング)です。--raid-disks=2: アレイを構成するディスクの数を指定します。/dev/loop22 /dev/loop23: アレイの構成要素となるデバイスです。
以下のコマンドを実行します:
sudo mdadm --create /dev/md0 --level=1 --raid-disks=2 /dev/loop22 /dev/loop23
処理を続行する前に確認を求められます。y を入力して Enter キーを押してください。
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
/proc/mdstat ファイルを表示することで、新しい RAID アレイの状態を確認できます。
cat /proc/mdstat
出力には、/dev/md0 がアクティブであり、/dev/loop23 と /dev/loop22 を使用していることが示されます。アレイが同期中 (resync) と表示されることがありますが、これは正常な動作です。同期プロセスが完了する前でもアレイは使用可能です。
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 loop13[1] loop12[0]
261120 blocks super 1.2 [2/2] [UU]
[>....................] resync = 0.4% (1088/261120) finish=0.1min speed=21760K/sec
unused devices: <none>
LVM ボリュームと同様に、新しい RAID デバイス /dev/md0 にもファイルシステムが必要です。ext4 でフォーマットしましょう。
sudo mkfs.ext4 /dev/md0
次に、RAID アレイ用のマウントポイントを作成します。
sudo mkdir /labraid
最後に、RAID デバイスを新しいディレクトリにマウントします。
sudo mount /dev/md0 /labraid
df -h を使用して、RAID アレイが正しくマウントされていることを確認します。
df -h /labraid
出力結果から、合計サイズが約 256MB(ミラーリングのため)の /dev/md0 デバイスがマウントされ、使用準備が整ったことが確認できます。
Filesystem Size Used Avail Use% Mounted on
/dev/md0 249M 2.6M 234M 2% /labraid
これで RAID 1 アレイの作成とマウントが完了し、/labraid マウントポイントにデータの冗長性が提供されました。
/etc/fstab と mdadm.conf によるマウントと RAID 設定の永続化
この最後のステップでは、LVM と RAID の設定を永続的なものにします。現在の状態では、システムを再起動すると RAID アレイは自動的に再構築されず、LVM ボリュームも RAID アレイもマウントされません。これを解決するには、2 つの重要な設定ファイルを更新する必要があります。RAID アレイ用の /etc/mdadm/mdadm.conf と、マウントポイント用の /etc/fstab です。
まず、RAID アレイの設定を行います。システムは起動時に /dev/md0 をどのように再構築するかを知る必要があります。mdadm ユーティリティを使用すると、必要な設定行を生成できます。
アクティブなアレイをスキャンしてその構成を表示するには、次のコマンドを実行します:
sudo mdadm --detail --scan
出力は、アレイを記述する 1 行のテキストです。
ARRAY /dev/md0 metadata=1.2 name=<hostname>:0 UUID=<some-uuid>
この設定を、/etc/mdadm/mdadm.conf にある mdadm 設定ファイルに追記します。スキャンコマンドの出力を tee を使って直接ファイルにパイプします。
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
ファイルの内容を表示して、行が追加されたことを確認できます:
cat /etc/mdadm/mdadm.conf
次に、起動時にファイルシステムを自動的にマウントするようシステムに指示します。これは /etc/fstab (file system table) にエントリを追加することで行います。このファイルの各行は 1 つのマウントポイントを定義します。
まず、LVM ボリュームのエントリを追加します。echo で行を作成し、sudo tee -a で /etc/fstab に追記します。
echo '/dev/labvg/lablvm /lablvm ext4 defaults 0 0' | sudo tee -a /etc/fstab
同様に、RAID アレイのマウントポイントについても行います。
echo '/dev/md0 /labraid ext4 defaults 0 0' | sudo tee -a /etc/fstab
/etc/fstab ファイルの最後の 2 行を表示して、両方の行が正しく追加されたことを確認します。
tail -n 2 /etc/fstab
追加した 2 行が表示されるはずです:
/dev/labvg/lablvm /lablvm ext4 defaults 0 0
/dev/md0 /labraid ext4 defaults 0 0
再起動せずに /etc/fstab のエントリが正しいかテストするには、一度ファイルシステムをアンマウントしてから、/etc/fstab に記載されたすべてのファイルシステムをマウントする mount -a コマンドを使用します。
まず、両方のボリュームをアンマウントします:
sudo umount /lablvm
sudo umount /labraid
次に、mount -a を実行して、システムに /etc/fstab を読み込ませ、すべてをマウントさせます。
sudo mount -a
最後に、df -h を使用して、再びマウントされていることを確認します。
df -h /lablvm /labraid
出力には、以前と同様に両方のファイルシステムがマウントされていることが示されるはずです。
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/labvg-lablvm 392M 2.7M 369M 1% /lablvm
/dev/md0 249M 2.6M 234M 2% /labraid
おめでとうございます!これで、システムの起動時に RAID アレイを自動的に構築し、LVM と RAID の両方のファイルシステムを自動的にマウントするように設定できました。
まとめ
この実験では、LVM とソフトウェア RAID を使用した Linux における高度なストレージ管理の基礎を学びました。まず truncate と losetup を使用して物理ディスクをシミュレートし、次に pvcreate を使用してそれらを LVM 物理ボリューム (PV) として初期化しました。これらの PV は vgcreate を使用してボリュームグループ (VG) に統合されました。このストレージプールから、lvcreate を使用して柔軟な論理ボリューム (LV) を作成し、mkfs で ext4 ファイルシステムをフォーマットしてシステムにマウントしました。また、lvresize で LV を動的にリサイズし、resize2fs でファイルシステムを拡張して新しいスペースを利用するという、LVM の主要な機能を実演しました。
さらに、データの冗長性を確保するために mdadm ユーティリティを使用してソフトウェア RAID 1(ミラー)アレイを設定しました。2 つのシミュレートされたディスクからアレイを構築した後、LVM ボリュームと同様にフォーマットとマウントを行いました。実験の最後には、これらの設定が再起動後も維持されるようにしました。これは、LVM ボリュームと RAID アレイの両方のマウントポイントを /etc/fstab に追加し、RAID アレイの構成詳細を /etc/mdadm/mdadm.conf に保存することで実現しました。



