【サーバー管理入門 第6回】その「systemctl」、意味わかって打ってる? systemdと自作サービスの作り方

Linux

【サーバー管理入門 第5回】ディスク容量不足を救う魔法「LVM」と、起動不能の罠「fstab」

こんにちは!「リナックス先生」です。
前回は、nmcliコマンドを使ってネットワーク設定を固定化し、サーバーの足回りを固めました。
コウ君、サーバー運用をしていて一番心臓に悪いアラートって何だと思う?

コウ君

えっと、不正アクセスとかですか?
あ、でも自分のPCだと「ディスクの空き容量がありません」って出ると焦ります。
あれが出ると何も保存できなくなるし、動きも遅くなるし……。

リナックス先生

その通り。
サーバーにとって「ディスクフル(容量枯渇)」は死に等しいわ。
ログも書き込めない、DBも更新できない、最悪の場合OSが起動しなくなる。
でもLinuxには、システムを止めずにディスク容量を後から増やせる魔法の技術があるの。
それが「LVM (Logical Volume Manager)」よ!

第5回となる今回は、Linuxサーバー管理の最重要項目の一つ、ストレージ管理について解説します。
LVMの概念から実際の拡張手順、そして設定をミスるとOSが起動しなくなる恐怖のファイル /etc/fstab の正しい書き方とリカバリ方法まで、プロの現場の知識を叩き込みます。

本講座のカリキュラム

  1. サーバー管理入門:RHEL系OSの選定理由とローカル仮想環境の構築
  2. 初期設定とセキュリティの要:SSH鍵認証、禁止設定、ユーザー管理の鉄則
  3. パッケージ管理の裏側:dnf/rpmの仕組みとリポジトリの依存関係解決
  4. ネットワーク設定の極意:nmcli、IPアドレス設計、DNSリゾルバの設定
  5. 【今回】ストレージ管理とファイルシステム:LVMの概念、ディスク拡張、fstabの罠
  6. プロセスとサービス管理:systemd (systemctl) の仕組みとUnit定義ファイルの作成
  7. Webサーバー構築(Nginx):ハイパフォーマンスWebサーバーの導入と設定最適化
  8. データベース構築(MariaDB):インストール、初期セキュリティ、バックアップの基礎
  9. ログ管理とトラブルシュート:rsyslog、journalctl、ログローテートの設計
  10. 自動化の第一歩:Cronによる定期実行と管理用シェルスクリプトの作成
  11. バックアップと障害復旧:tar/rsyncによるデータ保全とリカバリ手順
  12. 監視と運用設計:サーバーのリソース監視、死活監視、そしてプロの運用論

1. 従来のパーティションとLVMの違い

昔のWindowsやLinuxでは、物理的なハードディスクを「Cドライブ」「Dドライブ」のように区切って使っていました(物理パーティション)。
しかし、これには致命的な欠点がありました。

「Cドライブが満杯になった時、Dドライブがガラ空きでも、Cを増やすにはOSの再インストールが必要」

これを解決するために生まれたのが LVM(論理ボリュームマネージャ) です。
物理的なディスクとOSの間に「仮想的なレイヤー」を挟むことで、複数のディスクを束ねて巨大なプールにし、そこから自由に容量を切り出せるようにしました。

2. LVMの「3層構造」を理解せよ

LVMを操作するには、以下の3つの用語を覚える必要があります。
これを混同すると大事故に繋がります。

略称 正式名称 役割 イメージ
PV Physical Volume
(物理ボリューム)
物理ディスクやパーティションそのもの。
LVMの素材。
「水」(個々のディスク)
VG Volume Group
(ボリュームグループ)
PVを束ねた巨大な貯蔵庫。
システム全体の容量プール。
「ダム」(水を貯める場所)
LV Logical Volume
(論理ボリューム)
VGから必要な分だけ切り出した仮想ディスク。
ここにファイルシステムを作ってデータを保存する。
「水道管」(ダムから引いた水)

つまり、「ディスクが足りなくなったら、新しいPV(水)をVG(ダム)に注ぎ足して、そこからLV(水道管)を太くする」 というのがLVM拡張の流れです。

3. 実践:ディスク容量の拡張手順

それではVirtualBoxを使って、実際にディスク容量を増やしてみましょう。
今回は、既存のルートファイルシステム(/)が足りなくなったと仮定し、仮想ディスクを追加して容量を拡張します。

Step 0: 現状の確認

lsblk コマンドで現在のディスク構成を見ます。

[root@server01 ~]# lsblk
NAME              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                 8:0    0   20G  0 disk 
├─sda1              8:1    0    1G  0 part /boot
└─sda2              8:2    0   19G  0 part 
  ├─almalinux-root 253:0    0   17G  0 lvm  /
  └─almalinux-swap 253:1    0    2G  0 lvm  [SWAP]

sda という20GBのディスクがあり、その中の almalinux-root (LV) が / にマウントされています。

Step 1: 仮想ディスクの追加(VirtualBox側での操作)

一度サーバーをシャットダウンし、VirtualBoxの設定画面で「ストレージ」→「ハードディスクの追加」を行い、新規に10GB程度のディスクを作成して接続します。
その後、サーバーを起動します。

Step 2: 新しいディスクの認識 (PVの作成)

起動後、再度 lsblk を打つと、新しいディスク(例: sdb)が見えるはずです。

[root@server01 ~]# lsblk
...
sdb                 8:16   0   10G  0 disk  ←これが追加されたディスク

この sdb をLVM用の素材(PV)に変換します。

[root@server01 ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

Step 3: ダムへの貯水 (VGの拡張)

既存のボリュームグループ(ここでは almalinux と仮定)に、先ほどのPVを追加します。

# VG名の確認
[root@server01 ~]# vgs
  VG        #PV #LV #SN Attr   VSize   VFree
  almalinux   1   2   0 wz--n- <19.00g    0 

# VGの拡張
[root@server01 ~]# vgextend almalinux /dev/sdb
  Volume group "almalinux" successfully extended

これで、ダムの容量が +10GB されました。

Step 4: 水道管の拡張 (LVの拡張)

ルート用論理ボリューム /dev/almalinux/root を拡張します。
-l +100%FREE オプションを使うと、VGの空き容量を全て割り当ててくれます。

[root@server01 ~]# lvextend -l +100%FREE /dev/almalinux/root
  Size of logical volume almalinux/root changed from <17.00 GiB to <26.99 GiB.
  Logical volume almalinux/root successfully resized.

Step 5: ファイルシステムの拡張

ここが重要です。LV(枠)は広がりましたが、中身のファイルシステム(XFS)はまだ古いサイズのままです。
RHEL 9 / AlmaLinux 9 の標準ファイルシステムである XFS は、xfs_growfs コマンドで拡張します。

[root@server01 ~]# xfs_growfs /
meta-data=/dev/mapper/almalinux-root isize=512    agcount=4, agsize=1113856 blks
...
data-blocks changed from 4455424 to 7074816

これで完了です! df -h で確認してみましょう。

[root@server01 ~]# df -h /
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/almalinux-root    27G  1.8G   26G   7% /

システムを停止することなく、容量が20GBから27GBに増えました。

⚠️ プロの注意点:XFSの制約

ext4などの古いファイルシステムと異なり、XFSは「縮小 (Shrink)」ができません。
一度広げたLVを元に戻すことはできないので、拡張する際は「本当に必要な分だけ」行うのが鉄則です。

4. 恒久的なマウント設定「fstab」の記述

追加したディスクを一時的に使うなら mount コマンドで良いですが、再起動後も自動で使えるようにするには /etc/fstab ファイルへの記述が必要です。

/etc/fstab の書式

このファイルは以下の6列で構成されています。

UUID=xxxxx-xxxx...  /data  xfs  defaults  0  0
  1. デバイス定義: 何を(/dev/sdb1 などのデバイス名、またはUUID)
  2. マウントポイント: どこに(/data など)
  3. ファイルシステム: 形式は(xfs, ext4, swap など)
  4. マウントオプション: 設定(通常は defaults
  5. Dumpフラグ: バックアップ対象か(通常は 0
  6. Fsck順序: 起動時のチェック順序(ルート以外は 0 でOK)

💡 なぜデバイス名ではなく「UUID」を使うのか?

/dev/sdb などの名前は、USBメモリを挿したりケーブルを繋ぎ変えたりすると、次回起動時に /dev/sdc に変わってしまう可能性があります。
UUID(ユニークID)を使えば、ディスクの接続順が変わっても確実に特定できます。
UUIDは blkid コマンドで確認できます。

5. 恐怖! fstabの記述ミスと復旧手順

/etc/fstab はOS起動時に読み込まれる重要なファイルです。
ここに記述ミス(存在しないUUIDや、スペルミス)があると、Linuxは起動中にパニックを起こし、緊急モード(Emergency Mode)で停止します。

もし起動しなくなったら?

画面に Welcome to emergency mode! と表示され、ログインプロンプトが出ます。
焦らずに root のパスワードを入力してログインしてください。

復旧手順

緊急モードでは、ファイルシステムが「読み取り専用 (Read-Only)」でマウントされていることが多いため、そのままでは vi /etc/fstab で修正して保存できません。

  1. 読み書きモードで再マウントする

    mount -o remount,rw /
  2. fstabを修正する

    vi /etc/fstab

    間違っている行を削除するか、先頭に # をつけてコメントアウトします。

  3. 再起動する

    reboot
リナックス先生

fstabを編集したら、再起動する前に必ず mount -a コマンドを実行するのがプロの作法よ。
これは「fstabの内容を今すぐ全部マウントしてみる」コマンドで、記述ミスがあればここでエラーが出るから、再起動して事故るのを未然に防げるの。

次回予告:プロセスとサービスの管理

今回は、LVMによる柔軟なディスク管理と、fstabの危険性について学びました。
これで「容量が足りない!」と言われても、涼しい顔で対応できますね。

次回は、Linuxの中で動いているプログラムの管理、「systemd (systemctl)」について解説します。
「Webサーバーが勝手に落ちていた」「再起動したらサービスが止まっていた」
そんなトラブルを防ぐための、現代Linuxの心臓部を解剖します。お楽しみに!

▼スクリプトの実験場に最適!推奨VPS

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント