Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムを運用する上で、ストレージの柔軟な管理とデータの安全性は避けて通れないテーマです。特に、システムの稼働中にディスク容量を拡張したり、ハードウェアの故障に備えてデータの冗長化を図ったりする場面は多く、これらを効率的に行うための技術が不可欠となります。本記事では、この課題を解決するための強力なツールであるLVM(Logical Volume Manager)とRAID(Redundant Array of Independent Disks)の基本と実践的な活用法について解説します。
LVMは、物理的なディスクパーティションを抽象化し、より柔軟なディスク管理を可能にする仕組みです。複数の物理ディスクをまとめて一つの大きなストレージプールとして扱い、そこから必要なサイズの「論理ボリューム」を切り出して使用します。これにより、OSを停止することなくファイルシステムのサイズを拡張したり、必要に応じて縮小したりすることが可能になります。
LVMは以下の3つの主要なコンポーネントで構成されます。
pvcreate
コマンドでLVMが扱えるように初期化します。vgcreate
コマンドで作成し、vgextend
やvgreduce
でPVの追加・削除ができます。lvcreate
コマンドで作成し、lvextend
やlvreduce
でサイズを変更します。コマンド | 使用例 | |
---|---|---|
pvcreate |
物理ボリューム(PV)を作成する。 | pvcreate /dev/sdb1 |
vgcreate |
ボリュームグループ(VG)を作成する。 | vgcreate myvg /dev/sdb1 |
lvcreate |
論理ボリューム(LV)を作成する。 | lvcreate -n mylv -L 10G myvg |
pvs |
PVの状態を表示する。 | pvs |
vgs |
VGの状態を表示する。 | vgs |
lvs |
LVの状態を表示する。 | lvs |
lvextend |
LVのサイズを拡張する。 | lvextend -L +5G /dev/myvg/mylv |
lvreduce |
LVのサイズを縮小する。 | lvreduce -L -2G /dev/myvg/mylv |
💡 LVMスナップショット LVMには、特定の時点のLVの状態を保存するスナップショット機能があります。これはバックアップ作業において非常に有用です。スナップショットはオリジナルのデータとは別に変更分だけを記録するため、短時間で作成でき、パフォーマンスへの影響も最小限に抑えられます。
# 論理ボリュームのスナップショットを作成
lvcreate -L 1G -s -n mydata_snap /dev/myvg/mydata
# ...バックアップなどの作業
# スナップショットを元のボリュームにマージしてロールバック
lvconvert --merge /dev/myvg/mydata_snap
# 注:ボリュームが使用中の場合、マージは次回アクティベート時(再起動など)に反映されます。
RAIDは、複数の物理ディスクを組み合わせて一つの論理的なディスクとして扱う技術です。これにより、データの冗長性(ミラー化)やパフォーマンス向上(ストライピング)を実現します。RAIDにはいくつかのレベルがあり、それぞれ異なる特性を持っています。
Linuxではmdadm
コマンドを使用してソフトウェアRAIDを構築・管理するのが一般的です。
mdadm
コマンドの主要オプションオプション | 説明 | 使用例 |
---|---|---|
-C, --create |
新しいRAIDアレイを作成する。 | mdadm -C /dev/md0 -l 1 -n 2 /dev/sdb1 /dev/sdc1 |
-A, --assemble |
既存のRAIDアレイをアセンブル(結合)する。 | mdadm --assemble --scan |
-D, --detail |
RAIDアレイの詳細情報を表示する。 | mdadm -D /dev/md0 |
-l, --level |
作成するRAIDレベルを指定する。 | -l 1 |
-n, --raid-devices |
アレイを構成するデバイス数を指定する。 | -n 2 |
--failfast |
RAID1/10のデバイスをfailfast指定で追加/作成(--create または--add と併用) |
mdadm --create /dev/md0 -l 1 --raid-devices=2 --failfast /dev/sdb1 /dev/sdc1 |
LVMとRAIDはそれぞれ異なるレイヤーで機能するため、組み合わせて使用することでそれぞれの利点を活かすことができます。一般的な構成は「RAIDの上にLVMを構築する」パターンです。
LVMとRAIDのレイヤー構造を図で示すと以下のようになります。
graph TD; subgraph 物理ディスク層 SDB[/dev/sdb\] SDC[/dev/sdc\] end subgraph RAID層 RAID[RAID1アレイ] end subgraph LVM層 VG[VG: myvg] LV[LV: mydata] end subgraph ファイルシステム層 FS[ファイルシステム: ext4] end SDB -->|RAID| RAID; SDC -->|RAID| RAID; RAID -->|LVM| VG; VG -->|LVM| LV; LV -->|FS| FS;
RAID 1アレイの作成:2台の物理ディスク/dev/sdb
と/dev/sdc
を使ってRAID 1アレイを作成します。
# ディスクをRAIDパーティションとしてフォーマット
parted -a optimal /dev/sdb mklabel gpt mkpart primary 1MiB 100% set 1 raid on
parted -a optimal /dev/sdc mklabel gpt mkpart primary 1MiB 100% set 1 raid on
# RAIDアレイの作成
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
RAIDアレイ上にLVMを構築:作成したRAIDデバイス
/dev/md0
を物理ボリュームとしてLVMを構築します。# PVの作成
pvcreate /dev/md0
# VGの作成
vgcreate myvg /dev/md0
# LVの作成
lvcreate -n mydata -L 50G myvg
# ファイルシステムの作成とマウント
mkfs.ext4 /dev/myvg/mydata
mkdir /mnt/data
mount /dev/myvg/mydata /mnt/data
LVMで論理ボリュームのサイズを変更しても、ファイルシステムのサイズは自動で変更されません。別途、対応するコマンドを実行する必要があります。
拡張する場合(ext4/XFS)
# LVを拡張
lvextend -L +10G /dev/myvg/mydata
# ext4の場合
resize2fs /dev/myvg/mydata
# XFSの場合
xfs_growfs /mnt/data
※XFSは縮小ができないため、容量設計には注意が必要です。
縮小する場合(ext4) 🚨 注意:手順を誤るとデータが失われます。必ずバックアップを取ってから実行してください。
# 1. アンマウント
umount /mnt/data
# 2. ファイルシステムのエラーチェック
e2fsck -f /dev/myvg/mydata
# 3. ファイルシステムを縮小 (例: 20Gに)
resize2fs /dev/myvg/mydata 20G
# 4. LVを縮小
lvreduce -L 20G /dev/myvg/mydata
# 5. 再マウント
mount /dev/myvg/mydata /mnt/data
RAID1構成のディスクが1台故障した場合でも、システムは稼働し続けます。故障したディスクを交換し、以下のコマンドでRAIDアレイを再構築できます。
cat /proc/mdstat
mdadm -D /dev/md0
mdadm /dev/md0 --fail /dev/sdb1 --remove /dev/sdb1
# 新しいディスクのパーティションを準備
parted -a optimal /dev/sde mklabel gpt mkpart primary 1MiB 100% set 1 raid on
# アレイに追加
mdadm /dev/md0 --add /dev/sde1
追加後、自動的に再構築(リカバリー)が開始されます。cat /proc/mdstat
で進捗を確認できます。LVMとRAIDは、Linuxシステムにおけるストレージ管理の二大巨頭です。LVMは柔軟な容量管理を、RAIDはデータの冗長性とパフォーマンスを担う技術であり、これらを組み合わせることで、堅牢かつ管理しやすいシステムを構築できます。特にサーバー運用においては、ディスクの故障は避けられない事態であるため、RAIDによる冗長化は必須の対策と言えるでしょう。
この記事が、LVMとRAIDの理解を深める一助となれば幸いです。次回は、パスワードポリシーや2段階認証など、ユーザー認証に関する拡張設定について解説します。
ご覧いただきありがとうございました。