サーバーへのディスク追加、/のログ肥大化、/varパーティションの容量不足——これらの状況は思っている以上に頻繁に起こります。会社の古いCentOS 7サーバーで、ディスク管理を何度も対応してきましたが、毎回スムーズにいくわけではありませんでした。この記事は、Linuxの本番環境でディスクと格闘してきた約2年間で、本当に役立ったことをまとめたものです。
Linuxにおける「マウント」を正しく理解する
Windowsがドライブレター(C:、D:、E:)を使うのとは異なり、Linuxは/を起点とした単一のディレクトリツリーを使用します。SSD、HDD、USB、ネットワークドライブなど、すべてのストレージデバイスはこのディレクトリツリーのどこかに「接続」されます。これがマウントポイントです。
サーバーにハードディスクを追加すると、Linuxはそれをブロックデバイス(通常は/dev/sdb、/dev/nvme1n1など)として認識しますが、すぐには使えません。正しい順序で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つのフィールドの説明:
- Device:UUID=…(推奨)または /dev/sdb1
- マウントポイント:/mnt/data
- ファイルシステムタイプ:ext4、xfs、btrfs…
- オプション:defaults(rw、suid、exec、auto、nouser、async)
- Dump:0 = dumpユーティリティによるバックアップなし
- 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のデータディスクを追加しなければならない場面でも、ダウンタイムなし、パニックなしで乗り越えられます。
