インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Linuxファイルシステム保守とソフトウェアRAID・LVM運用管理【201試験 主題2.02】

公開
,
LinuC Level 2 第03回 主題2.02 ファイルシステムとデバイス



Linuxサーバーの設計・運用において、ストレージ管理は可用性と拡張性を左右する極めて重要な基盤領域です。LinuCレベル2(201試験)の主題2.02「ファイルシステムとデバイス」では、物理ディスクの初期化からファイルシステムのチューニング、ソフトウェアRAIDによる冗長化、そしてLVM(Logical Volume Manager)を用いた動的な容量管理まで、多層的なストレージアーキテクチャへの理解が求められます。

特に記述式問題(コマ問)では、ファイルシステムごとのコマンド構文の違い(resize2fsxfs_growfsの引数指定の差異など)や、mdadmによるアレイ操作のオプション、LVMの階層(PV・VG・LV)に応じたコマンドの使い分けが頻出します。本記事では、AlmaLinux 9の実機検証ログに基づき、各技術の内部挙動と運用保守の手順を体系的に整理して解説します。

検証環境
  • ホスト名: linuc-node01 (192.168.2.138)
  • OS: AlmaLinux 9.8 (x86_64)
  • カーネル: 5.14.0-570.el9.x86_64
  • ストレージ管理ツール: mdadm 4.2 / lvm2 2.03 / e2fsprogs 1.46.5 / xfsprogs 5.14.0
本記事の学習スコープと位置づけ
公式試験の必須出題範囲 主題2.02.1(マウント・/etc/fstab)、主題2.02.2(ext4/xfs/btrfs管理・tune2fs)、主題2.02.3(LVMボリューム管理・スナップショット)
現場で役立つ実務拡張 ソフトウェアRAID(mdadm)によるディスク冗長化と障害復旧実証(※現行試験範囲外ですが現場のストレージ下層設計に直結する必須技術)
目次
  1. 1. ファイルシステムの基本操作と保守(ext4 vs XFS)
    1. 1.1 ext4ファイルシステムの作成とtune2fsによるチューニング
    2. 1.2 XFSファイルシステムの特性とxfs_admin・xfs_infoによる情報取得
    3. 1.3 ファイルシステムチェックと修復(fsck と xfs_repair の注意点)
  2. 2. ソフトウェアRAID(mdadm)の構築と運用管理
    1. 2.1 RAIDレベルの特徴とmdadmによるアレイ作成
    2. 2.2 /proc/mdstatとmdadm –detailによる状態監視
    3. 2.3 ディスク障害発生のシミュレーションとスペア自動復旧
    4. 2.4 障害ディスクの切り離し・交換と設定永続化(/etc/mdadm.conf)
  3. 3. LVM(Logical Volume Manager)の階層構造と構築手順
    1. 3.1 PV・VG・LVの概念と作成フロー
    2. 3.2 LVM状態表示コマンドの使い分け(*s と *display)
  4. 4. LVMのオンライン容量拡張とファイルシステム拡張
    1. 4.1 VGの拡張(vgextend)とLVの拡張(lvextend)
    2. 4.2 ファイルシステム拡張コマンドの差異(resize2fs と xfs_growfs)
  5. 5. LVMスナップショットの作成とバックアップ運用
    1. 5.1 Copy-on-Write(CoW)の仕組みとスナップショット作成
    2. 5.2 スナップショットのマージ(ロールバック)と監視
  6. 6. LinuC 201試験(主題2.02)重要ポイント総整理
    1. 6.1 記述式(コマ問)頻出コマンド・オプション一覧
    2. 6.2 引数やコマンドの取り違えやすい盲点
  7. 7. まとめ:ストレージ運用の本質はレイヤー構造の把握にある

1. ファイルシステムの基本操作と保守(ext4 vs XFS)

近年のエンタープライズLinux環境では、デフォルトファイルシステムとして採用されているXFSと、従来の標準であり細かな制御が可能なext4の双方が広く使われています。LinuC 201試験では、両者の設計思想の違いや、それぞれの専用保守コマンドの役割を明確に区別して解答する必要があります。

1.1 ext4ファイルシステムの作成とtune2fsによるチューニング

ext4ファイルシステムは、mkfs.ext4(またはmke2fs -t ext4)コマンドで作成します。作成時には、ボリュームラベル(-L)やブロックサイズなどを指定できます。

bash – ext4ファイルシステムの作成
$ sudo mkfs.ext4 -F -L myext4 /dev/loop0
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks:      0/131072                                       done                            
Creating filesystem with 131072 4k blocks and 32768 inodes
Filesystem UUID: eaf40854-19ce-4587-8e23-b80b9762a785
Superblock backups stored on blocks: 
	32768, 98304

Allocating group tables: 0/4         done                            
Writing inode tables: 0/4         done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: 0/4         done

作成されたext4ファイルシステムの内部構造やチューニングパラメータは、tune2fs -lコマンドで確認します。スーパーブロック内に記録されたinode総数、ブロック総数、予約ブロック数などが表示されます。

bash – tune2fs によるパラメータ確認
$ sudo tune2fs -l /dev/loop0 | head -n 22
tune2fs 1.46.5 (30-Dec-2021)
Filesystem volume name:   myext4
Last mounted on:          <not available>
Filesystem UUID:          eaf40854-19ce-4587-8e23-b80b9762a785
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              32768
Block count:              131072
Reserved block count:     6553
Overhead clusters:        6347
Free blocks:              124719
Free inodes:              32757
First block:              0
Block size:               4096

ext4では、rootユーザー用に一定のストレージ領域が「予約ブロック」として確保されています。デフォルトではディスク全体の5%が予約されますが、大容量ディスク(数TB〜数十TB)において5%の予約は過大となるため、tune2fs -mオプションで予約割合を1%などに引き下げることが実務上一般的です。

bash – 予約ブロック率とマウント回数上限の変更
# 予約ブロック率を 1% に変更し、最大マウント回数を 30回 に設定
$ sudo tune2fs -m 1 -c 30 /dev/loop0
tune2fs 1.46.5 (30-Dec-2021)
Setting maximal mount count to 30
Setting reserved blocks percentage to 1% (1310 blocks)

# 変更結果の確認
$ sudo tune2fs -l /dev/loop0 | grep -E "Reserved block count|Maximum mount count|Reserved blocks percentage"
Reserved block count:     1310
Reserved blocks percentage: 1%
Maximum mount count:      30

試験対策としては、以下のtune2fsオプションを確実に押さえておく必要があります。

オプション 設定項目 実務・試験での要点
-m <パーセント> 予約ブロック率 デフォルトは5%。大容量データ領域では1%程度へ縮小する
-c <回数> 最大マウント回数 指定回数マウントされると次回起動時にfsckが走る(0または-1で無効化)
-i <日数> チェック間隔日数 最終チェックからの経過日数を指定(0で無効化、180d6m等)
-L <ラベル名> ボリュームラベル e2label <device> <label>と同等
-U <UUID> UUID変更 randomを指定するとランダムな新規UUIDを生成
-o <マウントオプション> デフォルトマウント設定 acluser_xattrなどをファイルシステム自体に恒久設定可能

1.2 XFSファイルシステムの特性とxfs_admin・xfs_infoによる情報取得

XFSは大規模データや並列I/Oに最適化された64ビットファイルシステムです。内部がアロケーショングループ(AG: Allocation Group)と呼ばれる独立した論理領域に分割されており、複数のCPUコアが各AGに対してロック競合を起こさずに並列で割り当て処理を行える構造になっています。

bash – XFSファイルシステムの作成と情報確認
# XFSファイルシステムの作成(ラベル名 myxfs)
$ sudo mkfs.xfs -f -L myxfs /dev/loop1
meta-data=/dev/loop1             isize=512    agcount=4, agsize=32768 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=131072, 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

# マウントして xfs_info を実行
$ sudo mkdir -p /mnt/test-xfs
$ sudo mount /dev/loop1 /mnt/test-xfs
$ sudo xfs_info /mnt/test-xfs
meta-data=/mnt/test-xfs          isize=512    agcount=4, agsize=32768 blks
試験で狙われる重要ポイント:xfs_info の実行要件

tune2fs -lがアンマウント状態のブロックデバイス(例: /dev/loop0)に対して実行できるのに対し、xfs_infoは対象ファイルシステムがマウントされている状態(マウントポイントまたはマウント中デバイス)でなければ実行できません。アンマウント状態で実行するとエラーになります。

一方、アンマウント状態でラベルやUUIDを変更・確認する場合はxfs_adminを使用します。

bash – xfs_admin によるラベル・UUID管理
# アンマウント後にラベルを変更
$ sudo umount /mnt/test-xfs
$ sudo xfs_admin -L "newlabel" /dev/loop1
writing all SBs
new label = "newlabel"

# ラベルの表示
$ sudo xfs_admin -l /dev/loop1
label = "newlabel"

# UUIDの再生成
$ sudo xfs_admin -U generate /dev/loop1
Clearing log and setting UUID
writing all SBs
new UUID = 5d7e6c38-8c54-4f81-a67b-1d70d2b86ea4

1.3 ファイルシステムチェックと修復(fsck と xfs_repair の注意点)

不正なシャットダウンやハードウェア異常によってファイルシステムに整合性エラーが生じた場合、修復ツールを実行します。ここでもファイルシステムごとに明確な使い分けが存在します。

対象ファイルシステム 標準チェック・修復コマンド 重要な制約・注意点
ext4 / ext3 fsck.ext4(または e2fsck 必ずアンマウント状態で実行する。クリーンと判定された場合でも強制チェックを行うには -f を付与する。対話修復には -y(全自動yes承諾)。
XFS xfs_repair fsck.xfsは起動時互換用ダミースクリプトであり修復を行わない。修復はxfs_repairを使用する。マウント中の実行は厳禁。ログが破損してマウント不能な場合の最終手段として -L(ログ強制消去)がある。
bash – ファイルシステム修復コマンドの実行例
# ext4 の強制チェック(クリーン状態でも実行)
$ sudo fsck.ext4 -f /dev/loop0
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
myext4: 11/32768 files (0.0% non-contiguous), 6960/131072 blocks

# XFS のチェックと修復
$ sudo xfs_repair /dev/loop1
Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
Phase 3 - for each AG...
Phase 4 - check for duplicate blocks...
Phase 5 - check inode validity...
Phase 6 - check inode connectivity...
Phase 7 - verify and correct link counts...
done

2. ソフトウェアRAID(mdadm)の構築と運用管理

ハードウェアRAIDカードを使用せず、LinuxカーネルのMD(Multiple Device)ドライバを利用して複数のストレージを仮想的なRAIDアレイとして束ねる技術がソフトウェアRAIDです。管理にはmdadmコマンドを使用します。

ソフトウェアRAID(mdadm)の構成と障害復旧プロセス(正常稼働・デグレード・自動リビルド)
図1:ソフトウェアRAID(mdadm)の構成と障害復旧プロセス

2.1 RAIDレベルの特徴とmdadmによるアレイ作成

LinuC試験では、主要なRAIDレベルの特徴と必要ディスク本数の把握が前提知識となります。

RAIDレベル 方式 最小ディスク数 許容障害数 実効容量 特徴
RAID 0 ストライピング 2本 0本 全ディスク合計 高速だが耐障害性なし(1台故障で全損)
RAID 1 ミラーリング 2本 1本(2本構成時) 1本分(最小ディスク容量) 同一データを複製。耐障害性が高い
RAID 5 パリティ分散 3本 1本 (N – 1) × 最小容量 データとパリティを均等分散。容量効率と耐障害性のバランス型
RAID 6 二重パリティ分散 4本 2本 (N – 2) × 最小容量 2台の同時故障に耐えられる高可用性構成
RAID 10 RAID 1+0 4本 各ミラーグループから1本 合計容量の50% RAID 0の速度とRAID 1の冗長性を兼備

ここでは、実機環境で3つのブロックデバイス(/dev/loop2, /dev/loop3, /dev/loop4)を用い、「アクティブディスク2本+スペアディスク1本」で構成されるRAID 1アレイ(/dev/md0)を構築します。

bash – mdadm による RAID 1 アレイ作成
$ sudo mdadm --create /dev/md0 \
    --level=1 \
    --raid-devices=2 /dev/loop2 /dev/loop3 \
    --spare-devices=1 /dev/loop4 --run
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

2.2 /proc/mdstatとmdadm –detailによる状態監視

構築されたアレイの稼働状況は、カーネル仮想ファイル/proc/mdstatで素早く確認できます。

bash – /proc/mdstat による状態確認
$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 loop4[2](S) loop3[1] loop2[0]
      523264 blocks super 1.2 [2/2] [UU]
      
unused devices: <none>

この出力には、試験で頻出する重要なステータス情報が集約されています。

表示項目 読み取り方と意味
loop4[2](S) (S)はスペア(Spare)デバイスを示します。loop2loop3には記号がないためアクティブメンバーです。
[2/2] 設定されたディスク本数に対する、現在アクティブなディスク本数(構成数 / 正常稼働数)。
[UU] 各スロットの状態。UはUp(正常同期)。1台故障すると[_U][U_]となります。

より詳細な構成情報を確認するには、mdadm --detail(または -D)を実行します。

bash – mdadm –detail /dev/md0 の実行ログ
$ sudo mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Sun Sep  6 16:37:10 2026
        Raid Level : raid1
        Array Size : 523264 (511.00 MiB 535.82 MB)
     Used Dev Size : 523264 (511.00 MiB 535.82 MB)
      Raid Devices : 2
     Total Devices : 3
       Persistence : Superblock is persistent

             State : clean 
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

              Name : linuc-node01:0  (local to host linuc-node01)
              UUID : 625eddc9:cfe4911a:d79a5592:7dc3a8d5
            Events : 0

    Number   Major   Minor   RaidDevice State
       0       7        2        0      active sync   /dev/loop2
       1       7        3        1      active sync   /dev/loop3

       2       7        4        -      spare   /dev/loop4

2.3 ディスク障害発生のシミュレーションとスペア自動復旧

実機環境で障害試験を行う際は、mdadm --fail(または -f)コマンドを使用して、指定したディスクを意図的に故障状態(faulty)へ遷移させます。

bash – 障害発生とスペアの自動リビルド
# /dev/loop2 を意図的に故障状態に設定
$ sudo mdadm --fail /dev/md0 /dev/loop2
mdadm: set /dev/loop2 faulty in /dev/md0

# 即座に /proc/mdstat を確認
$ cat /proc/mdstat
Personalities : [raid1] 
md0 : active raid1 loop4[2](S) loop3[1] loop2[0](F)
      523264 blocks super 1.2 [2/1] [_U]
      
unused devices: <none>

loop2[0](F)という表記で故障(Faulty)が記録され、ステータスは[2/1] [_U]へとデグレード(縮退)しています。これと同時に、待機していたスペアディスク(/dev/loop4)が自動的にアクティブスロットへと昇格し、データの再同期(リビルド)がバックグラウンドで開始されます。

bash – mdadm –detail で見るリビルド中の詳細
$ sudo mdadm --detail /dev/md0
...
             State : clean, degraded, recovering 
    Active Devices : 1
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 1

    Rebuild Status : 1% complete

    Number   Major   Minor   RaidDevice State
       2       7        4        0      spare rebuilding   /dev/loop4
       1       7        3        1      active sync   /dev/loop3

       0       7        2        -      faulty   /dev/loop2

2.4 障害ディスクの切り離し・交換と設定永続化(/etc/mdadm.conf)

リビルド完了後、故障したディスクをアレイから物理的・論理的に取り除くにはmdadm --remove(または -r)を実行します。その後、新しいディスクを投入する場合はmdadm --add(または -a)でアレイに追加します。

bash – 故障ディスクの除去と新規ディスク追加
# 故障ディスクの切り離し
$ sudo mdadm --remove /dev/md0 /dev/loop2
mdadm: hot removed /dev/loop2 from /dev/md0

# 交換用ディスクをスペアとして追加
$ sudo mdadm --add /dev/md0 /dev/loop2
mdadm: added /dev/loop2

OS再起動時にRAIDアレイが正しく自動認識・組み立て(assemble)されるようにするには、設定ファイル/etc/mdadm.confを生成して保存しておく必要があります。これにはmdadm --detail --scanコマンドを用います。

bash – /etc/mdadm.conf のスキャンと生成
# 現在のアレイ構成をスキャン
$ sudo mdadm --detail --scan
ARRAY /dev/md0 metadata=1.2 spares=1 UUID=625eddc9:cfe4911a:d79a5592:7dc3a8d5

# 設定ファイルへ追記して永続化
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf

3. LVM(Logical Volume Manager)の階層構造と構築手順

物理パーティションは一度作成すると容量の変更が困難ですが、LVM(論理ボリュームマネージャ)を導入することで、複数のディスクを束ねて柔軟なストレージプールを構成し、OS稼働中のまま容量を拡大したりスナップショットを取得したりできるようになります。

LVM(論理ボリュームマネージャ)の階層構造と運用の仕組み(PV・VG・LVの階層アーキテクチャと容量拡張・スナップショット)
図2:LVM(論理ボリュームマネージャ)の階層構造と運用の仕組み

3.1 PV・VG・LVの概念と作成フロー

LVMは以下の3層アーキテクチャで構成されます。

  1. 物理ボリューム(PV: Physical Volume):
    実ディスクやRAIDデバイス、パーティションをLVM用として初期化したもの。コマンド: pvcreate
  2. ボリュームグループ(VG: Volume Group):
    1つ以上のPVを束ねたストレージプール。内部はPE(Physical Extent、デフォルト4MB)と呼ばれる固定ブロック単位で管理される。コマンド: vgcreate
  3. 論理ボリューム(LV: Logical Volume):
    VGから必要な容量(PEの集合)を切り出した論理デバイス。OSからは通常のディスクパーティションと同様に見える。コマンド: lvcreate

実機でこの3層を順番に構築していきます。

bash – PV・VG・LV の一連作成コマンド
# 1. 物理ボリュームの作成
$ sudo pvcreate /dev/loop2 /dev/loop3
  Physical volume "/dev/loop2" successfully created.
  Physical volume "/dev/loop3" successfully created.

# 2. ボリュームグループの作成(まず /dev/loop2 のみで作成)
$ sudo vgcreate vg_test /dev/loop2
  Volume group "vg_test" successfully created

# 3. 論理ボリュームの切り出し(容量256MB、名前 lv_data)
$ sudo lvcreate -n lv_data -L 256M vg_test
  Logical volume "lv_data" created.

# 4. ファイルシステムの作成とマウント
$ sudo mkfs.xfs -f /dev/vg_test/lv_data
$ sudo mkdir -p /mnt/lvm-test
$ sudo mount /dev/vg_test/lv_data /mnt/lvm-test
$ df -h /mnt/lvm-test
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/vg_test-lv_data   251M   15M  236M    6% /mnt/lvm-test

3.2 LVM状態表示コマンドの使い分け(*s と *display)

LVMの状態確認コマンドには、1行要約を表示する「末尾sコマンド(pvs, vgs, lvs)」と、詳細なプロパティを出力する「末尾displayコマンド(pvdisplay, vgdisplay, lvdisplay)」があります。

bash – 要約表示(pvs, vgs, lvs)の確認
$ sudo pvs
  PV         VG        Fmt  Attr PSize   PFree  
  /dev/loop2 vg_test   lvm2 a--  508.00m 252.00m
  /dev/loop3           lvm2 a--  512.00m 512.00m

$ sudo vgs
  VG        #PV #LV #SN Attr   VSize   VFree  
  vg_test     1   1   0 wz--n- 508.00m 252.00m

$ sudo lvs
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_data vg_test -wi-ao---- 256.00m

vgsの出力から、ボリュームグループ全体の容量(VSize: 508MB)のうち、約半分(256MB)がLVに割り当てられ、残り(VFree: 252MB)が空き領域としてプールに残されていることが分かります。

4. LVMのオンライン容量拡張とファイルシステム拡張

ストレージ容量が逼迫した際、LVMであればOSや稼働中サービスを停止することなく(オンラインで)領域を拡張できます。容量拡張は「物理層(VG)の拡張」➔「論理層(LV)の拡張」➔「ファイルシステム層の拡張」という順序で行います。

4.1 VGの拡張(vgextend)とLVの拡張(lvextend)

まず、新しいストレージ領域(/dev/loop3)をVGに追加してプール全体の容量を拡大します。これにはvgextendコマンドを使用します。

bash – vgextend によるボリュームグループの拡張
$ sudo vgextend vg_test /dev/loop3
  Volume group "vg_test" successfully extended

$ sudo vgs vg_test
  VG      #PV #LV #SN Attr   VSize    VFree  
  vg_test   2   1   0 wz--n- 1016.00m 760.00m

プール容量が1016MBに拡大したため、論理ボリュームlv_dataの容量を拡張します。これにはlvextendを用います。容量の指定方法には以下のバリエーションがあります。

指定構文 意味
lvextend -L +200M /dev/vg_test/lv_data 現在のサイズに200MBを加算して拡大する
lvextend -L 500M /dev/vg_test/lv_data 最終的なサイズが500MBになるように拡大する
lvextend -l +100%FREE /dev/vg_test/lv_data VG内の空き領域(PE)をすべて割り当てて最大まで拡大する

4.2 ファイルシステム拡張コマンドの差異(resize2fs と xfs_growfs)

論理ボリューム(LV)のサイズを広げただけでは、その上で稼働しているファイルシステムは広がりません。ファイルシステムを拡張するコマンドは、ファイルシステムの種類によって大きく異なります。試験において最も問われやすい最重要論点です。

項目 ext4(resize2fs) XFS(xfs_growfs)
引数の指定方法 ブロックデバイス名を指定
(例: resize2fs /dev/vg_test/lv_data
マウントポイントを指定
(例: xfs_growfs /mnt/lvm-test
オンライン拡張 可能(マウントしたまま拡張可能) 可能(マウント中のみ実行可能
容量縮小(Reduce) 可能(ただしアンマウントが必須) 縮小不可(ファイルシステムの仕様)

現代のLVMでは、lvextend-r(または --resizefsオプションを付与することで、LVの拡張と同時に背後のファイルシステム(ext4またはXFS)を自動検出し、対応する拡張コマンドを自動実行してくれます。

bash – lvextend -r による一括オンライン拡張
$ sudo lvextend -L +200M -r /dev/vg_test/lv_data
  Size of logical volume vg_test/lv_data changed from 256.00 MiB (64 extents) to 456.00 MiB (114 extents).
  Extending file system xfs to 456.00 MiB (478150656 bytes) on vg_test/lv_data...
xfs_growfs /dev/vg_test/lv_data
meta-data=/dev/mapper/vg_test-lv_data isize=512    agcount=4, agsize=16384 blks
...
data blocks changed from 65536 to 116736
xfs_growfs done
  Extended file system xfs on vg_test/lv_data.
  Logical volume vg_test/lv_data successfully resized.

# 拡張結果の確認
$ df -h /mnt/lvm-test
ファイルシス                サイズ  使用  残り 使用% マウント位置
/dev/mapper/vg_test-lv_data   451M   17M  435M    4% /mnt/lvm-test

ログから明らかなように、lvextend -rの内部で自動的にxfs_growfsが呼び出され、マウントを解除することなく451MBへと即座に拡張されています。

5. LVMスナップショットの作成とバックアップ運用

LVMのもう1つの強力な機能がスナップショット(Snapshot)です。データベースやファイルサーバーの整合性バックアップを取得する際、長時間のサービス停止を回避するために利用されます。

5.1 Copy-on-Write(CoW)の仕組みとスナップショット作成

LVMのスナップショットは、作成時点の全データを別領域へ丸ごと複製するわけではありません。Copy-on-Write(CoW: 書き込み時コピー)と呼ばれる仕組みを採用しています。

  • スナップショット作成直後は、実質的なデータ複製は行われず、消費容量はほぼゼロです。
  • 元ボリューム側のブロックが上書き変更される直前に、そのブロックの「変更前の古いデータ」だけがスナップショット領域へ退避・コピーされます。
  • スナップショットを参照すると、「変更されたブロックは退避領域から、変更されていないブロックは元ボリュームから」データを読み出すことで、スナップショット作成瞬間の静止点データを完全に再現します。

スナップショットはlvcreate -sコマンドで作成します。実機でスナップショットを作成し、元ボリュームへデータを書き込んだ際の使用率変化を観察します。

bash – スナップショット作成と CoW 差分発生の検証
# 基準ファイルの作成
$ echo "Initial Data 12345" | sudo tee /mnt/lvm-test/file1.txt

# 容量128MBのスナップショット(名前 lv_data_snap)を作成
$ sudo lvcreate -s -n lv_data_snap -L 128M /dev/vg_test/lv_data
  Logical volume "lv_data_snap" created.

# 作成直後の状態確認(Data% は 0.00%)
$ sudo lvs vg_test
  LV           VG      Attr       LSize   Pool Origin  Data%  Meta%  Move Log Cpy%Sync Convert
  lv_data      vg_test owi-aos--- 456.00m                                                     
  lv_data_snap vg_test swi-a-s--- 128.00m      lv_data 0.00                                   

# 元ボリュームへ30MBのダミーデータを書き込み
$ sudo dd if=/dev/urandom of=/mnt/lvm-test/largefile.bin bs=1M count=30
$ sync

# 書き込み後の状態確認(Data% が 23.54% へ増加)
$ sudo lvs vg_test
  LV           VG      Attr       LSize   Pool Origin  Data%  Meta%  Move Log Cpy%Sync Convert
  lv_data      vg_test owi-aos--- 456.00m                                                     
  lv_data_snap vg_test swi-a-s--- 128.00m      lv_data 23.54                                  

元ボリュームに新しいデータを書き込むことでブロックが更新され、変更前データがスナップショット領域へ退避された結果、Data%23.54%に増加している様子が確認できます。

5.2 スナップショットのマージ(ロールバック)と監視

スナップショット作成時点の状態へボリューム全体を巻き戻したい(ロールバックしたい)場合は、lvconvert --mergeコマンドを使用します。

bash – スナップショットのマージ(ロールバック)
# アンマウント後にマージを実行
$ sudo umount /mnt/lvm-test
$ sudo lvconvert --merge /dev/vg_test/lv_data_snap
  Merging of volume vg_test/lv_data_snap started.
  vg_test/lv_data: Merged: 100.00%
運用上の注意点:スナップショット領域のオーバーフロー

スナップショットに割り当てた容量(上記の例では128MB)を超えて元ボリュームが変更され、Data%が100%に達すると、スナップショットは無効化(Invalid)され二度と読み書き・復旧ができなくなります。スナップショットを長期運用する場合は、lvextendでスナップショット領域自体を拡張するか、バックアップ完了後に速やかにlvremoveで削除するのが運用の鉄則です。

6. LinuC 201試験(主題2.02)重要ポイント総整理

試験本番で迷いやすいコマンド構文、引数指定の差異、頻出オプションを対照表形式で整理します。

6.1 記述式(コマ問)頻出コマンド・オプション一覧

コマンド 主要オプション / 書式 役割・ポイント
mkfs.ext4 -L <label>, -b <block-size> ext4ファイルシステムの作成
tune2fs -m <%>, -c <max>, -i <interval>, -l <dev> ext4パラメータの変更・スーパーブロック情報表示
mkfs.xfs -f(強制上書き), -L <label> XFSファイルシステムの作成
xfs_info <mount-point> マウント中のXFSファイルシステム詳細情報表示
xfs_admin -L <label>, -U <uuid>, -l アンマウント状態のXFSラベル・UUID管理
xfs_repair -L(ログクリア強制) XFSファイルシステムの整合性検査・修復
mdadm --create, --level=, --raid-devices=, --spare-devices= ソフトウェアRAIDアレイの作成
mdadm --fail (-f), --remove (-r), --add (-a) ディスク障害シミュレーション、切り離し、追加
mdadm --detail (-D), --detail --scan アレイ詳細表示、/etc/mdadm.conf用構文スキャン
pvcreate <device>... 物理ボリューム(PV)の初期化
vgcreate -s <pe-size> <vg-name> <pv>... ボリュームグループ(VG)の作成(PEサイズ指定可)
lvcreate -n <name> -L <size> <vg-name> 論理ボリューム(LV)の切り出し
lvcreate -s -n <snap-name> -L <size> <origin-lv> スナップショットの作成
lvextend -L +<size> -r <lv-path> LVの容量拡張(-rでファイルシステムも同時拡張)
resize2fs <lv-path> ext4ファイルシステムのオンラインサイズ拡張
xfs_growfs <mount-point> XFSファイルシステムのオンラインサイズ拡張

6.2 引数やコマンドの取り違えやすい盲点

試験直前に見直すべき典型的な引数の取り違えパターンです。

  • ファイルシステム拡張の引数指定:
    • resize2fs /dev/mapper/vg_test-lv_dataデバイスパスを指定する。
    • xfs_growfs /mnt/dataマウントポイントを指定する。
  • 実行時のマウント状態:
    • fsckxfs_repairアンマウント状態で実行する。マウント中に実行するとデータ破損の原因となる。
    • xfs_infoマウント状態でなければ実行できない。
  • RAIDアレイの操作オプション:
    • 故障マーク: --fail(短縮形: -f
    • 切り離し: --remove(短縮形: -r
    • ディスク追加: --add(短縮形: -a

7. まとめ:ストレージ運用の本質はレイヤー構造の把握にある

Linuxのストレージアーキテクチャは、物理デバイス(ディスク)、アレイ層(mdadm)、論理ボリューム層(LVM)、そして最上位のファイルシステム層(ext4 / XFS)という階層構造によって支えられています。

障害発生時の切り分けや容量逼迫への対応では、「現在どのレイヤーで問題が起きているのか」「どのレイヤーのコマンドを投入すべきか」を論理的に整理して判断することが不可欠です。本記事で取り上げた実機ログの手順を繰り返し自身の手で検証し、コマンド構文と出力の意味を体得してください。

次回(第4回)は、エンタープライズ環境で必須となる「高度なネットワーク設定・ボンディングと障害切り分け」(nmcliipコマンド、NICボンディング、VLAN設定、およびtcpdumpによるパケット解析)を取り上げます。

前の記事
次の記事