本記事には広告(アフィリエイトリンク)が含まれます。

AlmaLinux 9 ストレージ・LVM リファレンス

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

前提条件

項目
OSAlmaLinux 9.6(Sage Margay)
デフォルトFSXFS
既存LVMalmalinux 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パーティションタイプを変更
8eLinux 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 の使い分け

項目fdiskparted
パーティションテーブル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 の比較

項目XFSext4
AlmaLinux 9 デフォルト×
オンライン拡張
オンライン縮小×(不可)○(アンマウント必要)
最大ファイルシステムサイズ1EB1EB
大容量ファイルの性能優れる標準的
小ファイル大量の性能標準的優れる

運用での選択基準として、「縮小が必要になる可能性がある場合は 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. dump0dump コマンドによるバックアップ対象(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 であれば縮小は技術的に可能ですが、本番環境での実施は推奨されません。参考として手順を記載します。

  1. 対象のファイルシステムをアンマウントする(umount /data
  2. ファイルシステムの整合性を確認する(e2fsck -f /dev/datavg/datalv
  3. ファイルシステムを縮小する(resize2fs /dev/datavg/datalv 3G
  4. LV を縮小する(lvreduce -L 3G /dev/datavg/datalv
  5. 再マウントして確認する(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 02本以上なし100%ストライピング。性能は向上するが1本の故障で全データ喪失
RAID 12本1本故障可50%ミラーリング。同じデータを2本に書き込む
RAID 53本以上1本故障可(n-1)/nパリティ分散。容量効率と冗長性のバランスが良い
RAID 64本以上2本故障可(n-2)/n二重パリティ。RAID 5 より耐障害性が高い
RAID 104本以上各ペア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 側で利用可能になるまでの流れは以下の通りです。

  1. ハイパーバイザーで仮想ディスクを拡張
  2. OS でディスクの再スキャン(SCSI デバイスの場合)
  3. パーティションの末尾を拡張(growpart)
  4. PV のリサイズ(pvresize)
  5. 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 またはサーバーの再起動が必要です。

AlmaLinux 9 総合リファレンスガイド シリーズ一覧

  1. システム基本情報の確認
  2. 初期設定
  3. ネットワーク設定(nmcli)
  4. パッケージ管理(dnf)
  5. ユーザー・グループ管理
  6. ファイアウォール(firewalld)
  7. SSH設定・鍵認証
  8. systemd / サービス管理
  9. ストレージ・LVM(この記事)
  10. ログ管理(journalctl / rsyslog)
  11. cron / systemd timer
  12. セキュリティ強化
  13. パフォーマンス監視
  14. コンテナ管理(Podman)
  15. バックアップ・リストア