Red Hat Certified System Administrator (RHCSA) #5: ローカルストレージ 1 — パーティション、swap、LVM の基礎

読了 10分

#4 起動とシステム では systemd と GRUB2、そして password recovery まで扱いました。ここからは RHCSA で作業数が最も多く、合格を分ける領域である ローカルストレージ に入ります。今回はその最初として、空のディスクを 1 つ受け取り、パーティションを作り、swap を追加し、LVM を構成してファイルシステムを永続マウントする全体の流れを手で完走します。

ストレージ作業の核心は 再起動後も維持されるか です。mkswap だけして fstab に書かなければ再起動後に swap が消え、mount だけして fstab に書かなければマウントが外れます。そのためこの記事は、作るコマンドだけでなく fstab に永続で残す過程 まで一括りで扱います。

まずディスクから確認する #

作業の前に 今システムにどんなディスクがあり、どこが空いているか を先に見ます。間違ったディスクに触れると復旧が難しいので、確認の段階は省きません。

lsblk はブロックデバイスをツリーで見せてくれるので、全体像をつかむのに最も向いています。

# ブロックデバイスのツリー。ディスクとパーティション、マウント位置を一目で見る
lsblk

# ファイルシステムのタイプと UUID まで一緒に見る
lsblk -f

出力で disk タイプがディスク全体であり、その下にインデントされた part がパーティションです。MOUNTPOINT が空ならまだマウントされていません。

fdisk -l はディスクのサイズとパーティションテーブルの形式 (MBR/GPT) を詳しく見せてくれます。

# すべてのディスクのパーティションテーブルを詳しく見る
fdisk -l

# 特定のディスクだけ見る
fdisk -l /dev/vdb

この記事では空の追加ディスクを /dev/vdb と仮定します。実際の試験では lsblk で自分の環境の空ディスク名を先に確認しなければなりません。環境によって /dev/sdb/dev/nvme0n1 のように名前が異なります。

パーティションを作る #

空のディスクにパーティションを直接分けてみます。ツールは fdisk (対話型) と parted があり、試験では 2 つのうち手に馴染んだ方を使えば構いません。

fdisk で作る #

fdisk は対話型メニューで動作します。各段階で 1 文字のコマンドを入力します。

fdisk /dev/vdb

fdisk の中で入力する流れは次のとおりです。

Command (m for help): n      # 新しいパーティションを作成
Partition type: p            # primary (デフォルトなので Enter も可)
Partition number (1-4): 1    # 1 番
First sector: (Enter)        # 開始セクタはデフォルト
Last sector: +2G             # サイズを 2GiB に指定

Command (m for help): t      # パーティションタイプの変更 (任意)
Hex code: 82                 # 82 = Linux swap, 8e = Linux LVM, 83 = Linux

Command (m for help): p      # 現在のパーティション表をプレビュー
Command (m for help): w      # ディスクに書き込んで終了

サイズは +2G のように +サイズ の形式で指定すると、開始セクタからその分だけ確保してくれます。タイプコードは swap なら 82、LVM に使うパーティションなら 8e に変えます。タイプは目印にすぎないので変えなくても動作しますが、LVM·swap の意図を明確に残すには指定する方がよいです。

最後に w で書き込まないと実際には反映されません。q で抜けると変更が捨てられるので注意します。

parted で作る #

parted はコマンドを 1 行で与えられるのでスクリプトに有利です。大きなディスク (2TiB 超) や GPT が必要なら parted を使います。

# GPT ラベルの作成 (空ディスクのとき)
parted /dev/vdb mklabel gpt

# 1MiB から 2GiB までのパーティション作成
parted /dev/vdb mkpart primary 1MiB 2GiB

# 現在の状態を確認
parted /dev/vdb print

カーネルにパーティション変更を知らせる #

パーティション表を変えたあとカーネルが認識しない場合、次のコマンドで読み直されます。

# カーネルにパーティションテーブルの変更を通知する
partprobe /dev/vdb

# 新しいパーティションが見えるか確認する
lsblk /dev/vdb

これで /dev/vdb1 のようなパーティションデバイスができました。この上に swap やファイルシステムを載せます。

swap を追加する #

swap は物理メモリが不足したときにディスクを補助メモリとして使う領域です。RHCSA では「swap パーティションを作って永続で有効化せよ」が定番の作業です。

流れは パーティション作成 → mkswap → swapon → fstab 登録 の順です。上で作ったパーティションタイプを 82 (Linux swap) に指定した /dev/vdb1 を swap として使います。

# パーティションを swap フォーマットにする。出力の UUID をメモしておく
mkswap /dev/vdb1

# 今すぐ swap を有効にする
swapon /dev/vdb1

# 現在有効な swap の一覧を確認する
swapon --show
free -h

ここまでは 一時的 です。再起動すると swapon が外れるので、/etc/fstab に登録して永続にしなければなりません。

# swap パーティションの UUID を確認する
blkid /dev/vdb1

blkid が教えてくれた UUID を /etc/fstab に 1 行で追加します。

UUID=ここに実際の-UUID   none   swap   defaults   0 0
フィールドswap 項目の値意味
デバイスUUID=...swap 領域 (UUID で指定推奨)
マウント位置noneswap にはマウント位置がない
タイプswapswap 領域であることを明示
オプションdefaultsデフォルトオプション
dump0dump 対象ではない
fsck0起動時に検査しない

登録後は必ず検証します。次のコマンドは fstab を読み直して swap を有効にし、fstab に構文エラーがあればここで明らかになります。

# fstab に書かれたすべての swap を有効化する (検証目的)
swapon -a
swapon --show

デバイス名 (/dev/vdb1) はディスク追加の順序によって変わることがあるので、fstab には UUID で書く習慣 をつけます。

LVM の基礎 #

RHCSA で最も頻出するストレージ作業が LVM を作ってマウントせよ です。LVM (Logical Volume Manager) はディスクを柔軟に束ねたり分けたりして使う階層構造です。

階層略語説明作るコマンド
Physical VolumePVLVM が使う物理単位 (パーティション·ディスク)pvcreate
Volume GroupVGPV を束ねたストレージプールvgcreate
Logical VolumeLVVG から切り出した実際のボリュームlvcreate

流れは 物理デバイスの準備 → PV 作成 → VG 作成 → LV 作成 → ファイルシステム作成 → fstab マウント です。パーティションなしでディスク全体を PV として使ってもよいですが、試験ではたいていパーティションタイプを 8e (Linux LVM) で作ったパーティションを PV として使います。ここでは /dev/vdb2 を LVM 用パーティションと仮定します。

PV の作成 #

# パーティションを PV として初期化する
pvcreate /dev/vdb2

# PV の一覧と詳細を確認する
pvs
pvdisplay /dev/vdb2

VG の作成 #

PV を束ねて VG を作ります。VG 名は試験問題で指定される場合が多いので、問題が要求した名前のまま 作ります。

# vgdata という VG を作って PV を入れる
vgcreate vgdata /dev/vdb2

# VG の一覧と詳細を確認する (空き容量 PE 個数を確認)
vgs
vgdisplay vgdata

vgcreate 時に PE (Physical Extent) のサイズを -s オプションで指定できます。問題で「extent サイズ 16MiB」のように要求されたら vgcreate -s 16M vgdata /dev/vdb2 で作ります。

LV の作成 #

VG から実際のボリュームである LV を切り出します。サイズは -L で絶対サイズ (例: 2G) を、-l で extent の個数や比率 (例: 100%FREE) を指定します。

# サイズ 2GiB、名前 lvweb の LV 作成
lvcreate -L 2G -n lvweb vgdata

# extent 個数で指定 (50 個)
lvcreate -l 50 -n lvweb vgdata

# VG の残り全容量をすべて使用
lvcreate -l 100%FREE -n lvweb vgdata

# LV の一覧と詳細を確認する
lvs
lvdisplay /dev/vgdata/lvweb

LV のデバイスパスは /dev/vgdata/lvweb または /dev/mapper/vgdata-lvweb です。以降のコマンドではこのパスをディスクのように扱います。

lvextend の味見 #

LVM の最大の利点は 後から容量を増やせる ことです。

# LV に 1GiB を追加し、その上のファイルシステムまで一緒に大きくする
lvextend -L +1G -r /dev/vgdata/lvweb

-r オプションは LV の拡張と同時に、その上のファイルシステムまで大きくしてくれます。拡張と縮小、LUKS 暗号化は #6 ローカルストレージ 2 で深く扱います。ここでは「LV は後から増やせる」という点だけ覚えて進みます。

ファイルシステムの作成と永続マウント #

LV を作っても、その上にファイルシステムがなければ使えません。フォーマット (mkfs) → マウント位置の作成 → fstab 登録 → 検証 の順で仕上げます。

ファイルシステムの作成 #

RHEL 9 のデフォルトファイルシステムは XFS です。試験で特別な要求がなければ XFS を、ext4 を要求されたら ext4 を使います。

# XFS ファイルシステム作成 (RHEL デフォルト)
mkfs.xfs /dev/vgdata/lvweb

# ext4 が必要なら
mkfs.ext4 /dev/vgdata/lvweb

マウント位置を作って一時マウント #

# マウントする位置を作る
mkdir -p /mnt/web

# 一時的にマウントしてみる
mount /dev/vgdata/lvweb /mnt/web

# マウント状態と容量を確認する
df -h /mnt/web

ここまでも 一時的 です。再起動すると外れるので fstab に登録しなければなりません。

fstab に UUID で永続登録 #

マウントもデバイス名の代わりに UUID で書くこと が安全です。まず UUID を確認します。

# LV の UUID を確認する
blkid /dev/vgdata/lvweb

/etc/fstab に次の 1 行を追加します。

UUID=ここに実際の-UUID   /mnt/web   xfs   defaults   0 0
フィールドマウント項目の値意味
デバイスUUID=...マウントするデバイス (UUID で指定)
マウント位置/mnt/webマウントするディレクトリ
タイプxfsファイルシステムタイプ
オプションdefaultsデフォルトのマウントオプション
dump0dump 対象ではない
fsck0XFS は起動検査しない (0)

LVM はデバイスパス (/dev/vgdata/lvweb) が安定しているのでパスで書いても問題ありませんが、RHCSA の採点は 再起動後のマウント維持 だけを見るので、UUID でも LV パスでも正確なら構いません。ここでは UUID の習慣を維持します。

必ず検証する #

fstab を直したら 再起動の前に 構文を検証しなければなりません。fstab にエラーがあると起動が emergency mode に陥り、試験を大きく台無しにします。

# 一時マウントを先に外して
umount /mnt/web

# fstab に書かれた項目をすべてマウントする (検証)
mount -a

# 正常にマウントされたか確認する
df -h /mnt/web
lsblk -f

mount -a がエラーなく終わり、df/mnt/web が見えれば fstab は正常です。時間が許せば、実際に reboot 後にマウントが維持されるかまで確認するのが最も確実です。

全体の流れを一度に #

空のディスクから LVM ファイルシステムを作って永続マウントする RHCSA 最頻出の作業を 1 行ずつ集めると次のとおりです。

# 1) ディスク確認
lsblk

# 2) パーティション作成 (fdisk の中で n、t=8e、w)
fdisk /dev/vdb
partprobe /dev/vdb

# 3) LVM 構成
pvcreate /dev/vdb2
vgcreate vgdata /dev/vdb2
lvcreate -L 2G -n lvweb vgdata

# 4) ファイルシステム作成
mkfs.xfs /dev/vgdata/lvweb

# 5) マウント位置の作成と fstab 登録 (UUID)
mkdir -p /mnt/web
blkid /dev/vgdata/lvweb        # UUID 確認後 fstab に記入

# 6) 検証
mount -a
df -h /mnt/web

この 6 段階が手に馴染めば、ストレージ領域の半分は終わったことになります。

試験ポイント #

  • 空ディスクの名前を先に確認するlsblk で作業対象のディスクを正確に押さえ、間違ったディスク (特にルートディスク) に触れません。
  • fdisk は w で書き込まないと反映されないq で抜けると変更が捨てられます。変更後は partprobe でカーネルに通知します。
  • swap は mkswap → swapon → fstab。fstab に none swap defaults 0 0 で登録してこそ再起動後も維持されます。
  • LVM の順序は pvcreate → vgcreate → lvcreate。VG·LV 名は問題が要求した名前のまま作ります。
  • サイズ指定は -L (絶対)、-l (extent·比率)。「残り全部」は -l 100%FREE です。
  • 作って終わりではなく mkfs と fstab まで。フォーマット·マウント·fstab 登録·mount -a 検証を一括りで処理します。
  • デバイス名の代わりに UUIDblkid で UUID を得て fstab に書けば、デバイスの順序が変わっても安全です。
  • fstab を直したら mount -a で必ず検証。エラーがあると次の起動が emergency mode に陥ります。

まとめ #

この記事で押さえたこと:

  • ディスク確認lsblk で全体像を、fdisk -l でパーティションテーブルを見る
  • パーティション作成fdisk (対話型) または parted (1 行)、タイプは swap 82·LVM 8e、変更後は partprobe
  • swapmkswapswapon → fstab (none swap defaults 0 0) で永続化
  • LVMpvcreatevgcreatelvcreate、拡張は lvextend -r (詳細は #6)
  • ファイルシステムとマウントmkfs.xfsmount → fstab (UUID) → mount -a 検証
  • 合格を分ける罠: 作るだけして fstab に書かず、再起動後に消えてしまう設定

ストレージ作業は RHEL の実務でもそのまま使われます。より広い運用の文脈は RHEL 中級トラック で一緒に見ると感覚が固まります。

次へ — ローカルストレージ 2 #

この記事で LVM を作ってマウントする基礎を押さえました。次はその上で 容量を増やしデータを保護する 作業です。

#6 ローカルストレージ 2: LVM の拡張と LUKS 暗号化 では、VG に PV を追加してプールを大きくし、lvextend で LV を拡張しながら XFS·ext4 ファイルシステムを一緒に増やす方法、そして cryptsetup で LUKS 暗号化ボリュームを作って起動時に自動で開くように設定する過程まで、直接打ちながら整理します。

X