Linuxのディスクマウントと管理完全ガイド:lsblkからfstabまで

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

サーバーへのディスク追加、/のログ肥大化、/varパーティションの容量不足——これらの状況は思っている以上に頻繁に起こります。会社の古いCentOS 7サーバーで、ディスク管理を何度も対応してきましたが、毎回スムーズにいくわけではありませんでした。この記事は、Linuxの本番環境でディスクと格闘してきた約2年間で、本当に役立ったことをまとめたものです。

Linuxにおける「マウント」を正しく理解する

Windowsがドライブレター(C:、D:、E:)を使うのとは異なり、Linuxは/を起点とした単一のディレクトリツリーを使用します。SSD、HDD、USB、ネットワークドライブなど、すべてのストレージデバイスはこのディレクトリツリーのどこかに「接続」されます。これがマウントポイントです。

サーバーにハードディスクを追加すると、Linuxはそれをブロックデバイス(通常は/dev/sdb/dev/nvme1n1など)として認識しますが、すぐには使えません。正しい順序で4つの手順が必要です:

  1. ディスクにパーティションを作成する(まだない場合)
  2. 適切なファイルシステムでパーティションをフォーマットする
  3. ディレクトリにマウントする
  4. 再起動時に自動マウントされるよう設定する

作業前に押さえておくべき基本概念

ブロックデバイスの命名規則

Linuxは一貫したルールでデバイスに名前を付けます:

  • /dev/sda/dev/sdb — SATA/SCSIディスク(a = 1番目、b = 2番目…)
  • /dev/sda1/dev/sda2/dev/sdaのパーティション1、2
  • /dev/nvme0n1/dev/nvme0n1p1 — NVMe SSD
  • /dev/vda — 仮想ディスク(KVM、VPS)

重要:デバイスの認識順序が変わると、/dev/sdbという名前は再起動のたびに変わる可能性があります。fstabには必ずUUIDを使い、デバイス名は絶対に使わないこと——ディスクの順序が入れ替わってサーバーが起動しなくなった経験から学んだ教訓です。

主要なファイルシステム

  • ext4:Ubuntu/Debianのデフォルト。安定していてほとんどのユースケースに適している
  • xfs:RHEL/CentOSのデフォルト。大容量ファイルや高I/Oに優れている
  • btrfs:スナップショットやcopy-on-writeをサポートするが、本番環境での使用は慎重に検討が必要

ステップバイステップの実践手順

ステップ1:現在のディスク一覧を確認する

どのサーバーにログインしても最初に実行するコマンドはlsblkです:

lsblk
# NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda      8:0    0   50G  0 disk
# ├─sda1   8:1    0    1G  0 part /boot
# └─sda2   8:2    0   49G  0 part /
# sdb      8:16   0  200G  0 disk        ← 新しいディスク、未マウント

ファイルシステムとUUIDの詳細情報を表示するには:

lsblk -f
# FSTYPE、UUID、LABEL、MOUNTPOINTSを表示

パーティションテーブルの詳細を確認するにはfdisk -lを使います:

sudo fdisk -l /dev/sdb

ステップ2:パーティションを作成する

GPTのサポートと2TB超のディスクに対応しているため、fdiskよりpartedを好んで使っています:

sudo parted /dev/sdb

# partedの対話モードで:
(parted) mklabel gpt              # GPTパーティションテーブルを作成
(parted) mkpart primary ext4 0% 100%   # ディスク全体を使う1つのパーティション
(parted) print                    # 確認
(parted) quit

2TB未満のディスクで従来のMBRを使う場合:

sudo fdisk /dev/sdb
# 入力: n → p → 1 → Enter → Enter → w

ステップ3:ファイルシステムをフォーマットする

作成したパーティション(例:/dev/sdb1)をフォーマットします:

# ext4 — 最も一般的な選択肢
sudo mkfs.ext4 /dev/sdb1

# xfs — RHEL/CentOSや高スループットが必要な場合に使用
sudo mkfs.xfs /dev/sdb1

# 後で識別しやすいようにラベルを付ける
sudo mkfs.ext4 -L "data-disk" /dev/sdb1

会社のCentOS 7サーバーではxfsを選択しました。ext4より並行書き込みの処理が優れているためです——nginx、PHP-FPM、MySQLが同時にログを書き込む環境では重要な点です。/var/logをxfsに移行した後、ピーク時のI/O waitが目に見えて改善されました。特に深夜0時に実行されるlog rotationの際に顕著でした。

ステップ4:手動でマウントする

まずマウントポイントを作成し、その後マウントします:

# マウントポイントとなるディレクトリを作成
sudo mkdir -p /mnt/data

# マウント
sudo mount /dev/sdb1 /mnt/data

# 確認
df -h /mnt/data
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sdb1       197G   28M  197G   1% /mnt/data

このマウントは再起動すると消えます。永続化するには/etc/fstabの設定が必要です。

ステップ5:UUIDを使ってfstabを設定する

ここで1文字でも間違えるとサーバーが起動しなくなります——経験者は語ります。まずパーティションのUUIDを取得します:

sudo blkid /dev/sdb1
# /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"

# またはlsblkを使用:
lsblk -f /dev/sdb1

次に/etc/fstabに追記します:

sudo nano /etc/fstab

ファイルの末尾に以下の行を追加します:

UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /mnt/data  ext4  defaults  0  2

fstabの6つのフィールドの説明:

  1. Device:UUID=…(推奨)または /dev/sdb1
  2. マウントポイント:/mnt/data
  3. ファイルシステムタイプ:ext4、xfs、btrfs…
  4. オプション:defaults(rw、suid、exec、auto、nouser、async)
  5. Dump:0 = dumpユーティリティによるバックアップなし
  6. Pass:0 = fsckスキップ、1 = rootパーティション、2 = その他のパーティション

再起動前にfstabを確認する——fstabの誤りでサーバーが起動しなくなった経験から、このステップは絶対に省略しません:

sudo mount -a   # fstabの全エントリをマウント
# エラーが表示されなければOK

ステップ6:よく使う管理操作

ディスクのアンマウント:

sudo umount /mnt/data

# "target is busy"と表示される場合、使用中のプロセスを確認:
sudo lsof /mnt/data
# または:
sudo fuser -m /mnt/data

高度なオプションでマウント:

# 読み取り専用でマウント
sudo mount -o ro /dev/sdb1 /mnt/data

# noexec, nosuid — アップロードデータを格納するパーティションに適している
sudo mount -o noexec,nosuid /dev/sdb1 /mnt/data

# アンマウントせずにオンザフライでリマウント
sudo mount -o remount,rw /mnt/data

ディスク使用量の確認:

# 全パーティションの概要を表示
df -hT   # -T でファイルシステムタイプを表示

# inode使用量を確認(「ディスクフル」がスペース不足ではなくinode不足の場合がある)
df -i

# 最も多くのスペースを占めているディレクトリを探す
du -sh /* 2>/dev/null | sort -rh | head -20

よくあるエラーの対処法

マウント時の「wrong fs type」エラー:ファイルシステムタイプが一致しない場合に発生します。lsblk -fで正しいタイプを確認してから明示的に指定します:

sudo mount -t xfs /dev/sdb1 /mnt/data

クラッシュ後のファイルシステム破損:パーティションをマウントしていない状態でfsckを実行します:

sudo umount /dev/sdb1
sudo fsck -y /dev/sdb1   # -y で全ての質問に自動でyesと回答

まとめ

約2年間、本番環境で20回以上のディスク対応を経験してきた中で、毎回必ず実践している原則があります:

  • fstabには必ずUUIDを使い、/dev/sdb1のようなデバイス名は絶対に使わない
  • 再起動前にmount -aでテストする——fstabの失敗は一度経験すると忘れられない
  • 多数のディスクがある場合に識別しやすいよう、フォーマット時にパーティションにラベルを付ける
  • ディスク使用量を定期的に監視し、80%に達したらアラートを設定して満杯になる前に対処する時間を確保する

振り返ってみると、もっと早く知っておきたかったのはコマンドではなく、流れです:デバイスの識別 → パーティション作成 → フォーマット → マウント → fstab設定。この流れを把握していれば、どんなサーバーでも対応できます。深夜2時に本番環境へ200GBのデータディスクを追加しなければならない場面でも、ダウンタイムなし、パニックなしで乗り越えられます。

Share: