AlmaLinux 9 のサーバー運用で、ディスク容量の逼迫は避けて通れない課題です。本記事では、パーティション操作から LVM の作成・拡張、ファイルシステムの選択、fstab による恒久マウント、スワップ追加、さらに仮想サーバーでのディスク拡張まで、ストレージ管理に必要な操作を実行例つきでまとめています。入社1〜3年目のインフラエンジニアが、現場でそのまま使えるリファレンスとして活用できる構成です。
コマンド早見表
| やりたいこと | コマンド |
|---|---|
| ブロックデバイス一覧 | lsblk -f |
| パーティションテーブル確認 | fdisk -l /dev/sdb |
| GPT パーティション確認 | parted /dev/sdb print |
| UUID・FS 確認 | blkid |
| MBR パーティション作成 | fdisk /dev/sdb |
| GPT パーティション作成 | parted /dev/sdb mkpart |
| パーティション再読み込み | partprobe |
| PV 作成 | pvcreate /dev/sdb |
| VG 作成 | vgcreate datavg /dev/sdb |
| VG にPV追加 | vgextend datavg /dev/sdc |
| LV 作成 | lvcreate -L 5G -n datalv datavg |
| XFS フォーマット | mkfs.xfs /dev/datavg/datalv |
| マウント | mount /dev/datavg/datalv /data |
| LV 拡張(FS含む) | lvextend -r -L +3G /dev/datavg/datalv |
| XFS 拡張 | xfs_growfs /data |
| スワップ作成 | mkswap /dev/datavg/swaplv |
| スワップ有効化 | swapon /dev/datavg/swaplv |
| ディスク使用率 | df -hT |
| ディレクトリ別使用量 | du -sh /var/* |
| inode 使用率 | df -i |
| SCSI ディスク再スキャン | echo 1 > /sys/block/sda/device/rescan |
| パーティション末尾拡張 | growpart /dev/sda 3 |
| PV リサイズ | pvresize /dev/sda3 |
前提条件
| 項目 | 値 |
|---|---|
| OS | AlmaLinux 9.6(Sage Margay) |
| デフォルトFS | XFS |
| 既存LVM | almalinux VG(sda3 上、root / home / swap) |
| 追加ディスク | sdb 10GB, sdc 10GB(未使用) |
| 実行ユーザー | root 権限 |
1. ディスク・パーティションの確認と操作
ストレージ管理の第一歩は、サーバーに接続されているディスクの構成を正確に把握することです。
lsblk -f(ブロックデバイス一覧とファイルシステム)
ディスク、パーティション、LV の構成をツリー形式で表示します。ファイルシステムの種類やマウントポイントも同時に確認できるため、最初に実行するコマンドとして定着しています。
実行コマンド:
# lsblk -f
実行結果:
NAME FSTYPE LABEL UUID MOUNTPOINTS
sda
├─sda1 xfs xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /boot
├─sda2 vfat XXXX-XXXX /boot/efi
└─sda3 LVM2_member xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
├─almalinux-root xfs xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /
├─almalinux-home xfs xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /home
└─almalinux-swap swap xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx [SWAP]
sdb
sdc
sda が OS ディスクで、sda3 の上に LVM が構成されています。sdb と sdc はファイルシステムもパーティションもない未使用ディスクです。
表示カラムを指定して、サイズやタイプも含めて確認する場合は次のコマンドを使います。
実行コマンド:
# lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT
fdisk -l(パーティションテーブル確認)
特定のディスクのパーティションテーブルを詳細に表示します。ディスクの総容量、セクターサイズ、パーティションの開始位置と終了位置が確認できます。
実行コマンド:
# fdisk -l /dev/sdb
実行結果:
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
パーティションテーブルが存在しない場合は、パーティション情報の行が表示されません。これは新規ディスクであることを意味します。
parted(GPT パーティション確認)
parted はGPT パーティションテーブルの操作に適したツールです。
実行コマンド:
# parted /dev/sdb print
blkid(UUID・ファイルシステム確認)
blkid は各デバイスの UUID とファイルシステムタイプを表示します。fstab にマウント設定を書く際、デバイスパス(/dev/sdb1 など)ではなく UUID を使うことで、ディスクの認識順序が変わってもマウントが崩れない設定にできます。
実行コマンド:
# blkid
fdisk でのMBRパーティション作成
fdisk は対話式でパーティションを作成するツールです。2TB 以下のディスクで MBR パーティションテーブルを使う場合に選択します。
実行コマンド:
# fdisk /dev/sdb
fdisk の対話操作の流れは以下の通りです。
| 入力 | 意味 |
|---|---|
| n | 新しいパーティションを作成 |
| p | プライマリパーティションを選択 |
| 1 | パーティション番号を指定 |
| Enter | 開始セクターをデフォルト(先頭)で確定 |
| Enter | 終了セクターをデフォルト(末尾 = ディスク全体)で確定 |
| t | パーティションタイプを変更 |
| 8e | Linux LVM タイプに設定 |
| w | 変更を書き込んで終了 |
LVM で使う場合は、パーティションタイプを 8e(Linux LVM)に変更しておきます。これにより、他の管理者がパーティションの用途を判別できます。
parted でのGPTパーティション作成(非対話モード)
2TB を超えるディスクや、スクリプトで自動化したい場合は parted の非対話モードを使います。
実行コマンド:
# parted -s /dev/sdb mklabel gpt
# parted -s /dev/sdb mkpart primary 0% 100%
# parted -s /dev/sdb set 1 lvm on
1行目でGPTパーティションテーブルを作成し、2行目でディスク全体を1つのパーティションに割り当て、3行目でLVMフラグを設定しています。
partprobe(カーネルへの再読み込み)
パーティションの作成や変更後、カーネルがその変更を認識していない場合があります。partprobe でパーティションテーブルの再読み込みを指示します。
実行コマンド:
# partprobe
fdisk と parted の使い分け
| 項目 | fdisk | parted |
|---|---|---|
| パーティションテーブル | MBR(デフォルト) | GPT(推奨) |
| 最大ディスクサイズ | 2TB | 制限なし(実質8ZiB) |
| 最大パーティション数 | 4(プライマリ) | 128 |
| 操作モード | 対話式 | 対話式 / 非対話式 |
| 推奨用途 | 2TB 以下の小規模ディスク | 2TB 超、または自動化が必要な場合 |
2. LVM の概念
LVM(Logical Volume Manager)は、物理ディスクを抽象化し、柔軟なストレージ管理を実現する仕組みです。
PV → VG → LV の3層構造
LVM は3つの層で構成されています。
┌─────────────────────────────────────────────────────┐
│ LV(論理ボリューム) │
│ datalv (5GB) swaplv (1GB) │
│ ファイルシステムを作成してマウントする単位 │
├─────────────────────────────────────────────────────┤
│ VG(ボリュームグループ) │
│ datavg (20GB) │
│ 複数の PV をまとめた「ストレージプール」 │
├──────────────────────┬──────────────────────────────┤
│ PV(物理ボリューム) │ PV(物理ボリューム) │
│ /dev/sdb (10GB) │ /dev/sdc (10GB) │
│ 実際のディスクまたは │ 実際のディスクまたは │
│ パーティション │ パーティション │
└──────────────────────┴──────────────────────────────┘
- PV(Physical Volume):物理ディスクやパーティションを LVM で使えるように初期化したもの
- VG(Volume Group):1つ以上の PV をまとめた「ストレージプール」。LV に割り当てる容量の元になる
- LV(Logical Volume):VG から切り出した論理的なディスク領域。ファイルシステムを作成してマウントする単位
LVM を使うメリット
- 柔軟な拡張:LV の容量をオンライン(マウントしたまま)で拡張できる
- 複数ディスクの統合:複数の物理ディスクをまとめて1つの大きなボリュームとして扱える
- スナップショット:LV の特定時点のスナップショットを取得できる(バックアップ用途)
PE(Physical Extent)の概念
VG 内の容量は PE(Physical Extent)という固定サイズのブロック単位で管理されます。デフォルトの PE サイズは 4MB です。LV に容量を割り当てるとき、実際には PE の個数で管理されています。たとえば 5GB の LV は 1,280 個の PE(5GB / 4MB = 1,280)で構成されます。通常の運用で PE サイズを変更する必要はありません。
AlmaLinux 9 デフォルトのLVM構成確認
AlmaLinux 9 をデフォルトでインストールすると、OS ディスク上に LVM が構成されます。現在の構成を確認するには pvs, vgs, lvs の3つのコマンドを使います。
実行コマンド:
# pvs
実行結果:
PV VG Fmt Attr PSize PFree
/dev/sda3 almalinux lvm2 a-- 98.41g 0
/dev/sda3 が PV として初期化され、almalinux という VG に所属しています。PFree が 0 のため、この VG には空き容量がありません。
実行コマンド:
# vgs
実行結果:
VG #PV #LV #SN Attr VSize VFree
almalinux 1 3 0 wz--n- 98.41g 0
VG almalinux は PV 1個、LV 3個で構成されています。VFree(VG の空き容量)が 0 のため、新しい LV を作成するにはディスクの追加が必要です。
実行コマンド:
# lvs
実行結果:
LV VG Attr LSize Pool Origin Data% Meta%
home almalinux -wi-ao---- 30.99g
root almalinux -wi-ao---- 63.47g
swap almalinux -wi-ao---- <3.95g
root(63.47GB)、home(30.99GB)、swap(約3.95GB)の3つの LV が作成されています。Attr 列の a はアクティブ、o はオープン(マウント中)を意味します。
3. LVM 基本操作(PV → VG → LV の作成)
未使用の sdb と sdc を使って、新しい LVM 構成を一から作成します。ディスク全体を LVM の PV として直接初期化する方法で進めます。
PV の作成(pvcreate)
物理ディスクを LVM で使用できるように初期化します。
実行コマンド:
# pvcreate /dev/sdb /dev/sdc
実行結果:
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
作成された PV の詳細を確認します。
実行コマンド:
# pvs
実行結果:
PV VG Fmt Attr PSize PFree
/dev/sda3 almalinux lvm2 a-- 98.41g 0
/dev/sdb lvm2 --- <10.00g <10.00g
/dev/sdc lvm2 --- <10.00g <10.00g
sdb と sdc が PV として認識されています。VG 列が空欄のため、まだどの VG にも所属していません。pvdisplay コマンドを使うと、PE サイズや PE 数など、より詳細な情報を確認できます。
VG の作成(vgcreate)
PV をまとめてストレージプール(VG)を作成します。VG 名は用途が分かる名前を付けます。
実行コマンド:
# vgcreate datavg /dev/sdb /dev/sdc
実行結果:
Volume group "datavg" successfully created
実行コマンド:
# vgs
実行結果:
VG #PV #LV #SN Attr VSize VFree
almalinux 1 3 0 wz--n- 98.41g 0
datavg 2 0 0 wz--n- <20.00g <20.00g
datavg が sdb + sdc の合計約 20GB で作成されました。VFree が約 20GB あるため、この範囲で LV を作成できます。
後から PV を追加して VG を拡張する場合は vgextend を使います。
実行コマンド(参考):
# vgextend datavg /dev/sdd
LV の作成(lvcreate)
VG から必要なサイズを切り出して LV を作成します。
実行コマンド(サイズ指定):
# lvcreate -L 5G -n datalv datavg
実行結果:
Logical volume "datalv" created.
-L 5G でサイズを 5GB に指定し、-n datalv で LV 名を指定しています。VG の残り容量をすべて使い切りたい場合は、-l 100%FREE を使います。
実行コマンド(残量全使用):
# lvcreate -l 100%FREE -n datalv datavg
作成後の LV 一覧を確認します。
実行コマンド:
# lvs
実行結果:
LV VG Attr LSize
home almalinux -wi-ao---- 30.99g
root almalinux -wi-ao---- 63.47g
swap almalinux -wi-ao---- <3.95g
datalv datavg -wi-a----- 5.00g
datavg に 5GB の datalv が作成されました。lvdisplay コマンドを使うと、LV のデバイスパス(/dev/datavg/datalv)や PE 数など、詳細な情報を確認できます。
4. ファイルシステムの作成とマウント
LV を作成しただけではデータを保存できません。ファイルシステムを作成(フォーマット)し、ディレクトリにマウントする必要があります。
XFS でフォーマット(AlmaLinux 9 デフォルト)
AlmaLinux 9 のデフォルトファイルシステムは XFS です。特別な理由がなければ XFS を選択します。
実行コマンド:
# mkfs.xfs /dev/datavg/datalv
実行結果:
meta-data=/dev/datavg/datalv isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
ext4 でフォーマットする場合は mkfs.ext4 /dev/datavg/datalv を使います。ext4 は LV の縮小に対応している点が XFS との主な違いです。
マウントと確認
マウントポイント(ディレクトリ)を作成し、LV をマウントします。
実行コマンド:
# mkdir -p /data
# mount /dev/datavg/datalv /data
実行コマンド:
# df -hT /data
実行結果:
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/mapper/datavg-datalv xfs 5.0G 68M 4.9G 2% /data
5.0GB の XFS ファイルシステムが /data にマウントされています。
XFS と ext4 の比較
| 項目 | XFS | ext4 |
|---|---|---|
| AlmaLinux 9 デフォルト | ○ | × |
| オンライン拡張 | ○ | ○ |
| オンライン縮小 | ×(不可) | ○(アンマウント必要) |
| 最大ファイルシステムサイズ | 1EB | 1EB |
| 大容量ファイルの性能 | 優れる | 標準的 |
| 小ファイル大量の性能 | 標準的 | 優れる |
運用での選択基準として、「縮小が必要になる可能性がある場合は ext4、それ以外は XFS」が実用的な判断です。
/etc/fstab への恒久マウント設定
mount コマンドによるマウントは一時的なもので、再起動すると解除されます。再起動後も自動でマウントされるように /etc/fstab に設定を追加します。デバイスパスではなく UUID を使うことで、ディスクの認識順序が変わっても正しくマウントされます。
まず UUID を確認します。
実行コマンド:
# blkid /dev/datavg/datalv
実行結果:
/dev/mapper/datavg-datalv: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="xfs"
/etc/fstab に以下の行を追加します。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data xfs defaults 0 0
fstab の各フィールド解説
| フィールド | 値の例 | 意味 |
|---|---|---|
| 1. デバイス | UUID=xxxxxxxx-… | マウント対象の識別子(UUID 推奨) |
| 2. マウントポイント | /data | マウント先のディレクトリ |
| 3. ファイルシステム | xfs | ファイルシステムの種類 |
| 4. オプション | defaults | マウントオプション(defaults = rw,suid,dev,exec,auto,nouser,async) |
| 5. dump | 0 | dump コマンドによるバックアップ対象(0 = 対象外) |
| 6. fsck 順序 | 0 | 起動時の fsck チェック順序(0 = チェックしない。XFS は xfs_repair を使うため 0) |
mount -a で検証
fstab を編集した後は、再起動する前に mount -a で設定を検証します。fstab に誤りがある状態で再起動すると、システムが起動しなくなる可能性があります。
実行コマンド:
# mount -a
エラーが表示されなければ、fstab の記述は正しいと判断できます。
fstab の誤記はシステム起動不能の原因になる
fstab に存在しない UUID やデバイスパスを記載した状態で再起動すると、マウント処理が失敗してシステムが emergency モードで起動します。fstab を編集したら、再起動の前に必ず mount -a を実行して検証してください。万が一 emergency モードに入ってしまった場合は、root パスワードでログインし、fstab の誤りを修正して再起動します。
5. LVM 拡張(最重要実務操作)
ディスク容量の逼迫に対応する LV 拡張は、インフラエンジニアが最も頻繁に行う LVM 操作です。XFS の場合、マウントしたまま(オンラインで)拡張できます。
LV の拡張(lvextend)
実行コマンド:
# lvextend -L +3G /dev/datavg/datalv
実行結果:
Size of logical volume datavg/datalv changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents).
Logical volume datavg/datalv successfully resized.
-L +3G は現在のサイズに 3GB を追加するという意味です。-L 8G のように合計サイズを指定することもできます。
ファイルシステムの拡張
LV 拡張だけでは df の容量は増えない
lvextend で LV のサイズを拡張しても、その上のファイルシステムは自動では拡張されません。ファイルシステムの拡張コマンドを必ず実行してください。
XFS の場合、xfs_growfs コマンドでファイルシステムを拡張します。引数にはデバイスパスではなくマウントポイントを指定します。
実行コマンド:
# xfs_growfs /data
実行結果:
meta-data=/dev/mapper/datavg-datalv isize=512 agcount=4, agsize=327680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=1310720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 1310720 to 2097152
ext4 の場合は resize2fs コマンドを使います。引数にはマウントポイントではなくデバイスパスを指定します。
実行コマンド(ext4 の場合):
# resize2fs /dev/datavg/datalv
LV 拡張 + FS 拡張を一括実行(推奨)
lvextend に -r(–resizefs)オプションを付けると、LV の拡張とファイルシステムの拡張を一度に実行できます。ファイルシステムの拡張忘れを防げるため、この方法を推奨します。
実行コマンド:
# lvextend -r -L +3G /dev/datavg/datalv
拡張後の確認
実行コマンド:
# df -hT /data
実行結果:
ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
/dev/mapper/datavg-datalv xfs 8.0G 90M 7.9G 2% /data
ファイルシステムのサイズが 5.0GB から 8.0GB に拡張されていることが確認できます。
6. LVM 縮小(注意事項中心)
本番環境での LV 縮小は原則禁止
LV の縮小はデータ破壊のリスクを伴う操作です。容量の再配分が必要な場合は、新しい LV を作成してデータを移行する方法で対応してください。
XFS は縮小不可
XFS ファイルシステムは設計上、縮小に対応していません。これは XFS の最も重要な制約です。XFS でフォーマットした LV の容量を減らすことはできないため、容量計画の段階で考慮が必要です。
ext4 の縮小手順(参考)
ext4 であれば縮小は技術的に可能ですが、本番環境での実施は推奨されません。参考として手順を記載します。
- 対象のファイルシステムをアンマウントする(
umount /data) - ファイルシステムの整合性を確認する(
e2fsck -f /dev/datavg/datalv) - ファイルシステムを縮小する(
resize2fs /dev/datavg/datalv 3G) - LV を縮小する(
lvreduce -L 3G /dev/datavg/datalv) - 再マウントして確認する(
mount /dev/datavg/datalv /data)
FS 縮小前に LV を縮小するとデータが破壊される
手順の順序を守ることが重要です。ファイルシステムの縮小よりも先に LV を縮小すると、ファイルシステムのデータ領域が失われ、データが破壊されます。必ず「FS 縮小 → LV 縮小」の順序で実行してください。
7. スワップの追加
物理メモリが不足した際の一時的な退避先としてスワップ領域を使用します。メモリ増設が難しい場合の暫定対策として、LVM 上にスワップ領域を追加する方法を解説します。
現状の確認
実行コマンド:
# swapon --show
実行結果:
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 3.9G 0B -2
実行コマンド:
# free -h
free -h のスワップ行で、現在のスワップ総量と使用量を確認できます。
LVM 上にスワップを作成
実行コマンド:
# lvcreate -L 1G -n swaplv datavg
# mkswap /dev/datavg/swaplv
# swapon /dev/datavg/swaplv
スワップが有効化されたことを確認します。
実行コマンド:
# swapon --show
実行結果:
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 3.9G 0B -2
/dev/dm-4 partition 1024M 0B -3
1024M(1GB)のスワップが追加されています。
fstab への登録
再起動後も自動で有効になるように /etc/fstab にスワップの設定を追加します。
まず UUID を確認します。
実行コマンド:
# blkid /dev/datavg/swaplv
/etc/fstab に以下の行を追加します。
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none swap sw 0 0
スワップファイルによる代替手法
LVM を使わずにスワップファイルで対応する方法もあります。LV を追加できない状況での応急処置として有用です。
実行コマンド:
# dd if=/dev/zero of=/swapfile bs=1M count=1024
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
chmod 600 でスワップファイルのパーミッションを制限しています。他のユーザーから読み取り可能な状態だと、mkswap がセキュリティ上の警告を出します。fstab への登録は以下の通りです。
/swapfile none swap sw 0 0
切り戻し(スワップの無効化と削除)は以下の手順で行います。
# swapoff /swapfile
# rm /swapfile
fstab からも該当行を削除してください。
8. ディスク使用状況の監視
ストレージ管理では、容量の逼迫を早期に検知することが重要です。定期的に監視すべきポイントを解説します。
df -hT(ファイルシステム使用率)
全マウントポイントの使用率を確認します。使用率が 80% を超えたら拡張を検討し、90% を超えたら緊急対応が必要です。
実行コマンド:
# df -hT
du(ディレクトリ別使用量)
容量を消費しているディレクトリを特定するには du コマンドを使います。
実行コマンド:
# du -sh /var/*
特定のディレクトリ配下で、サイズの大きいファイルやディレクトリを上位から表示するには以下のコマンドが有用です。
実行コマンド:
# du -ah /var/log --max-depth=1 | sort -rh | head -20
df -i(inode 使用率)
ディスク容量に余裕があるにもかかわらずファイルが作成できない場合は、inode の枯渇が原因の可能性があります。inode はファイル1つにつき1つ消費されるため、大量の小さなファイルが存在する環境で発生します。
実行コマンド:
# df -i
IUse% が 100% に達すると、ディスクの空き容量に関係なく新しいファイルを作成できなくなります。
VG の残容量確認
LV の拡張が可能かどうかは、VG の空き容量(VFree)で判断します。
実行コマンド:
# vgs
VFree 列が 0 の場合、その VG では LV の拡張ができません。新しいディスクを PV として追加し、vgextend で VG を拡張する必要があります。
9. 物理サーバー向け — ハードウェアRAIDの概要
仮想サーバーの場合
仮想サーバーではハイパーバイザー側で RAID を管理するため、OS 側での RAID 操作は不要です。この章は物理サーバーを管理する場合の参考情報です。
RAID(Redundant Array of Independent Disks)は、複数のディスクを組み合わせてデータの冗長性や性能向上を実現する技術です。
RAID レベル概要
| RAIDレベル | 構成 | 冗長性 | 容量効率 | 特徴 |
|---|---|---|---|---|
| RAID 0 | 2本以上 | なし | 100% | ストライピング。性能は向上するが1本の故障で全データ喪失 |
| RAID 1 | 2本 | 1本故障可 | 50% | ミラーリング。同じデータを2本に書き込む |
| RAID 5 | 3本以上 | 1本故障可 | (n-1)/n | パリティ分散。容量効率と冗長性のバランスが良い |
| RAID 6 | 4本以上 | 2本故障可 | (n-2)/n | 二重パリティ。RAID 5 より耐障害性が高い |
| RAID 10 | 4本以上 | 各ペア1本故障可 | 50% | RAID 1+0。ミラーリング+ストライピングの組み合わせ |
ハードウェアRAID と ソフトウェアRAID
企業の物理サーバーでは、ハードウェア RAID が主流です。サーバーに搭載された RAID コントローラーがディスクの冗長化を処理するため、OS からは RAID を意識する必要がありません。OS からは、複数の物理ディスクが1つのディスクデバイス(例: /dev/sda)として認識されます。
ソフトウェア RAID(mdadm)は OS レベルで RAID を構成する方法ですが、ハードウェア RAID コントローラーを搭載している環境では通常使用しません。
RAID コントローラーの確認コマンド
RAID コントローラーの状態確認にはベンダー固有のコマンドを使用します。代表的なものを以下に示します。
| ベンダー / コントローラー | コマンド |
|---|---|
| Broadcom(MegaRAID) | storcli /c0 show |
| Broadcom(旧LSI) | megacli -LDInfo -Lall -aAll |
| HPE(Smart Array) | ssacli ctrl all show config |
これらのコマンドはサーバーベンダーが提供するパッケージに含まれています。AlmaLinux の標準リポジトリには含まれていないため、ベンダーのサポートサイトからダウンロードしてインストールします。
RAID と LVM の関係
┌───────────────────────────────────┐
│ ファイルシステム(XFS / ext4) │ ← データの読み書き
├───────────────────────────────────┤
│ LV(論理ボリューム) │ ← 柔軟な容量管理
├───────────────────────────────────┤
│ VG(ボリュームグループ) │
├───────────────────────────────────┤
│ PV(物理ボリューム) │
├───────────────────────────────────┤
│ ディスクデバイス(/dev/sda) │ ← OS からは1本に見える
├───────────────────────────────────┤
│ RAID(ハードウェア RAID) │ ← ディスクの冗長化
├───────────────────────────────────┤
│ 物理ディスク × 複数本 │
└───────────────────────────────────┘
RAID はディスクの冗長化(故障への備え)を担当し、LVM は柔軟な容量管理を担当します。それぞれ異なるレイヤーで異なる役割を持つため、両方を組み合わせて使うのが企業サーバーの標準的な構成です。
10. 仮想サーバー向け — 仮想ディスク拡張後のOS側操作
物理サーバーの場合
物理サーバーでは既存ディスクのオンライン容量拡張はできません。新規ディスクを追加し、pvcreate → vgextend → lvextend の手順で対応します。
仮想サーバーでは、ハイパーバイザー側で仮想ディスクのサイズを拡張した後、OS 側で一連の操作を行って拡張分を使えるようにする必要があります。
全体フロー
ハイパーバイザーでのディスク拡張から、OS 側で利用可能になるまでの流れは以下の通りです。
- ハイパーバイザーで仮想ディスクを拡張
- OS でディスクの再スキャン(SCSI デバイスの場合)
- パーティションの末尾を拡張(growpart)
- PV のリサイズ(pvresize)
- LV の拡張 + FS の拡張(lvextend -r)
手順1: SCSI ディスクの再スキャン
ハイパーバイザーでディスクを拡張しても、OS が自動で認識しない場合があります。SCSI デバイスの再スキャンを実行して、OS にディスクサイズの変更を認識させます。
実行コマンド:
# echo 1 > /sys/block/sda/device/rescan
lsblk で sda のサイズが拡張後の値になっていることを確認します。
手順2: パーティションの拡張(growpart)
growpart は、パーティションの末尾をディスクの空き領域まで拡張するコマンドです。cloud-utils-growpart パッケージに含まれています。
実行コマンド(パッケージが未インストールの場合):
# dnf install -y cloud-utils-growpart
実行コマンド:
# growpart /dev/sda 3
/dev/sda 3 は「sda ディスクの第3パーティション」を意味します。スペースで区切る点に注意してください(/dev/sda3 ではありません)。
手順3: PV のリサイズ(pvresize)
パーティションが拡張されても、LVM の PV はまだ元のサイズのままです。pvresize で PV にパーティションの拡張を認識させます。
実行コマンド:
# pvresize /dev/sda3
pvs で PFree が増えていることを確認します。
手順4: LV 拡張 + FS 拡張
VG に空き容量ができたら、第5章で解説した lvextend -r で LV とファイルシステムを一括拡張します。
実行コマンド:
# lvextend -r -l +100%FREE /dev/almalinux/root
-l +100%FREE は VG の空き容量をすべて使い切るオプションです。df -hT で / のサイズが増えていることを確認してください。
新規ディスク追加時の手順
既存ディスクの拡張ではなく、新しい仮想ディスクを追加した場合は、第3章の手順(pvcreate → vgextend → lvextend → xfs_growfs)で対応します。
実行コマンド:
# pvcreate /dev/sdd
# vgextend almalinux /dev/sdd
# lvextend -r -l +100%FREE /dev/almalinux/root
トラブルシューティング
LV 拡張後も df の容量が変わらない
lvextend で LV を拡張しただけでは、ファイルシステムのサイズは変わりません。XFS の場合は xfs_growfs /マウントポイント、ext4 の場合は resize2fs /dev/VG名/LV名 を実行してファイルシステムを拡張してください。今後は lvextend -r を使うことで、この手順忘れを防止できます。
mount -a でエラーが発生する
fstab の記述に誤りがある場合に発生します。確認すべきポイントは以下の通りです。
- UUID のスペルミスがないか(blkid で正しい UUID を再確認)
- マウントポイントのディレクトリが存在するか(mkdir -p で事前作成)
- ファイルシステムタイプが正しいか(xfs と ext4 を取り違えていないか)
fstab の誤記を放置して再起動すると起動不能になる
fstab に誤った設定がある状態で再起動すると、emergency モードで起動します。この状態になった場合は、root パスワードでログインし、vi /etc/fstab で誤りを修正してから再起動してください。それでも復旧できない場合は、起動時にカーネルパラメータに systemd.unit=rescue.target を追加して rescue モードで起動し、fstab を修正します。
umount できない(device is busy)
マウントポイント配下でプロセスがファイルを使用中の場合、umount は「device is busy」エラーで失敗します。lsof コマンドで使用中のプロセスを特定します。
実行コマンド:
# lsof +D /data
表示されたプロセスを安全に停止した後、umount を再実行してください。
pvresize 後に VG 容量が増えない
パーティションの変更をカーネルが認識していない可能性があります。partprobe を実行して、パーティションテーブルの再読み込みを行ってから pvresize を再実行してください。
実行コマンド:
# partprobe
# pvresize /dev/sda3
仮想ディスク拡張後に lsblk でサイズが変わらない
ハイパーバイザー側でディスクを拡張しても、OS が自動で認識しない場合があります。SCSI デバイスの再スキャンを実行してください。
実行コマンド:
# echo 1 > /sys/block/sda/device/rescan
再スキャン後に lsblk でサイズが更新されていることを確認します。NVMe デバイスの場合はこのコマンドでは対応できないため、nvme reset /dev/nvme0 またはサーバーの再起動が必要です。
