Linuxのディスク管理入門|df・du・mount・fdiskの使い方と容量トラブル対処法

kento_morota 19分で読めます

「サーバーのディスク容量が急に逼迫した」「新しいディスクを追加したが認識されない」「どのディレクトリが容量を圧迫しているかわからない」——Linux環境のディスク管理に関するこうした問題は、IT担当者にとって日常的に直面する課題です。

Linuxのディスク管理は、サーバー運用の基本スキルでありながら、パーティション・ファイルシステム・マウントなど理解すべき概念が多く、体系的に学ぶ機会が少ない分野でもあります。

本記事では、Linuxのディスク管理に関する基礎知識から実践的なコマンド操作、容量トラブルの対処法まで、現場で必要な知識を網羅的に解説します。Linuxの基礎知識についてはLinuxとは?を、基本コマンドについてはLinuxコマンド一覧・実践ガイドをあわせてご覧ください。

Linuxのディスク管理で知っておくべき基本概念

ディスク管理のコマンドを学ぶ前に、Linuxにおけるディスクとファイルシステムの基本概念を押さえましょう。

ブロックデバイスとデバイスファイル

Linuxでは、ディスクなどのストレージデバイスはブロックデバイスとして扱われ、/devディレクトリ配下にデバイスファイルとして表現されます。ディレクトリ構造の詳細はLinuxディレクトリ構造ガイドを参照してください。

# 代表的なデバイスファイル
/dev/sda      # 1番目のSATA/SCSIディスク
/dev/sda1     # 1番目のディスクの1番目のパーティション
/dev/sda2     # 1番目のディスクの2番目のパーティション
/dev/sdb      # 2番目のSATA/SCSIディスク
/dev/nvme0n1  # 1番目のNVMe SSD
/dev/nvme0n1p1 # NVMe SSDの1番目のパーティション
/dev/vda      # 仮想環境のディスク(KVM等)

パーティションとファイルシステム

パーティションとは、物理ディスクを論理的に分割した領域です。各パーティションにはファイルシステムを作成し、Linuxのディレクトリツリーにマウントして使用します。

主要なファイルシステムは以下の通りです。

  • ext4: Linux標準のファイルシステム。安定性が高く最も広く使われている
  • XFS: 大容量ファイルの処理に強い。RHEL/CentOS系のデフォルト
  • Btrfs: スナップショット機能を持つ次世代ファイルシステム
  • swap: メモリのスワップ領域として使用

マウントの仕組み

Linuxでは、パーティション(ファイルシステム)をディレクトリツリーの特定の場所にマウントして使用します。Windowsのドライブレター(C:、D:)とは異なり、すべてのストレージが単一のディレクトリツリーに統合される点がLinuxの特徴です。

df — ディスク使用量の確認

df(disk free)コマンドは、ファイルシステムごとのディスク使用量と空き容量を表示します。ディスク管理で最も頻繁に使用するコマンドです。

dfの基本的な使い方

# ファイルシステムの使用量を表示
df

# 人間が読みやすい形式(GB/MB表記)で表示
df -h

# 出力例:
# Filesystem      Size  Used Avail Use% Mounted on
# /dev/sda1        50G   32G   16G  67% /
# /dev/sda2       200G  150G   40G  79% /home
# tmpfs            16G  1.2G   15G   8% /dev/shm

# 特定のパーティションのみ表示
df -h /home

# ファイルシステムの種類を表示
df -hT

# inode使用量を確認
df -i

dfの出力項目の意味

  • Filesystem: デバイスファイル名
  • Size: パーティションの総容量
  • Used: 使用中の容量
  • Avail: 利用可能な容量
  • Use%: 使用率
  • Mounted on: マウントポイント

Use%が80%を超えたら注意、90%を超えたら早急に対処が必要です。特にルートパーティション(/)の容量が逼迫すると、システムの動作に深刻な影響を及ぼします。

inode枯渇の問題

ディスク容量には余裕があるのにファイルが作成できない場合、inodeが枯渇している可能性があります。inodeはファイルシステム上の各ファイル・ディレクトリのメタ情報を管理する仕組みで、数に上限があります。

# inode使用量の確認
df -i

# 出力例:
# Filesystem      Inodes  IUsed   IFree IUse% Mounted on
# /dev/sda1      3276800 285000 2991800    9% /

# 大量の小さなファイルが存在するディレクトリを調査
find /tmp -xdev -printf '%h\n' | sort | uniq -c | sort -rn | head -20

du — ディレクトリの容量調査

du(disk usage)コマンドは、ディレクトリやファイルごとの使用容量を表示します。dfで全体的な使用量を確認した後、duで容量を消費しているディレクトリを特定するのが一般的な調査の流れです。

duの基本的な使い方

# カレントディレクトリのサブディレクトリごとの容量
du -h --max-depth=1

# 特定のディレクトリの容量
du -sh /var/log

# /var配下のサブディレクトリの容量を表示(サイズ順にソート)
du -h --max-depth=1 /var | sort -rh

# 上位10件の大きなディレクトリを表示
du -h --max-depth=1 / 2>/dev/null | sort -rh | head -10

# 特定のディレクトリ内の大きなファイルを探す
find /var/log -type f -size +100M -exec ls -lh {} \;

大容量ファイルの特定

# システム全体で100MB以上のファイルを検索
sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | \
  sort -k5 -rh | head -20

# 30日以上更新されていない大きなファイル(削除候補)
sudo find / -xdev -type f -size +50M -mtime +30 -exec ls -lh {} \; 2>/dev/null

# /var/log配下のファイルをサイズ順に表示
sudo ls -lhS /var/log/ | head -20

ログファイルが容量を圧迫している場合は、Linuxログ管理入門のログローテーション設定を参照してください。

mount / umount — ファイルシステムのマウント操作

mountコマンドは、ファイルシステムをディレクトリツリーに接続するためのコマンドです。新しいディスクの追加やUSBデバイスの接続時に使用します。

マウントの基本操作

# 現在のマウント状態を確認
mount | column -t

# より見やすい表示
findmnt

# 特定のデバイスをマウント
sudo mount /dev/sdb1 /mnt/data

# ファイルシステムを指定してマウント
sudo mount -t ext4 /dev/sdb1 /mnt/data

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

# マウントの解除
sudo umount /mnt/data

# デバイス名でマウント解除
sudo umount /dev/sdb1

/etc/fstab — 起動時の自動マウント設定

システム起動時に自動でマウントするには、/etc/fstabファイルに設定を記述します。

# /etc/fstabの書式
# デバイス          マウントポイント  ファイルシステム  オプション  dump  fsck
/dev/sda1          /                ext4              defaults    0     1
/dev/sda2          /home            ext4              defaults    0     2
/dev/sdb1          /mnt/data        ext4              defaults    0     2
UUID=xxxx-xxxx     /mnt/backup      xfs               defaults    0     2

デバイス名(/dev/sda1等)はシステムの構成変更で変わる可能性があるため、UUIDを使用することを推奨します。

# デバイスのUUIDを確認
sudo blkid

# 出力例:
# /dev/sda1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"
# /dev/sdb1: UUID="12345678-abcd-ef01-2345-678901234567" TYPE="xfs"

# fstabの設定をテスト(実際にマウントせず確認)
sudo mount -a --fake

# fstabの設定に基づいてマウントを実行
sudo mount -a

fstabの設定ミスはシステムが起動できなくなる原因となるため、変更前に必ずバックアップを取りましょう。バックアップの手法についてはLinuxバックアップ・リストアガイドを参照してください。

fdisk / parted — パーティション操作

新しいディスクを追加した場合、パーティションの作成が必要です。fdiskpartedは、パーティションを管理するためのコマンドです。

ディスク情報の確認

# 接続されているディスクの一覧
sudo fdisk -l

# 特定のディスクの情報
sudo fdisk -l /dev/sdb

# lsblkでブロックデバイスの一覧をツリー表示
lsblk

# 出力例:
# NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
# sda      8:0    0    50G  0 disk
# ├─sda1   8:1    0    49G  0 part /
# └─sda2   8:2    0     1G  0 part [SWAP]
# sdb      8:16   0   100G  0 disk

# 詳細情報付きで表示
lsblk -f

fdiskによるパーティション作成

警告: パーティション操作は誤るとデータを失う危険性があります。必ず対象のディスクを慎重に確認してください。

# fdiskでパーティションを操作(対話形式)
sudo fdisk /dev/sdb

# fdisk内のコマンド:
# n: 新しいパーティションを作成
# p: パーティションテーブルを表示
# d: パーティションを削除
# w: 変更を書き込んで終了
# q: 変更を破棄して終了

fdiskでの一般的なパーティション作成手順は以下の通りです。

# 1. fdiskを起動
sudo fdisk /dev/sdb

# 2. 新しいパーティションを作成
# Command: n
# Partition type: p (primary)
# Partition number: 1
# First sector: (デフォルト)
# Last sector: (デフォルト = ディスク全体)

# 3. パーティションテーブルを確認
# Command: p

# 4. 変更を書き込み
# Command: w

ファイルシステムの作成

パーティションを作成した後、ファイルシステムを作成(フォーマット)する必要があります。

# ext4ファイルシステムを作成
sudo mkfs.ext4 /dev/sdb1

# XFSファイルシステムを作成
sudo mkfs.xfs /dev/sdb1

# ラベルを指定してext4を作成
sudo mkfs.ext4 -L "data" /dev/sdb1

新しいディスクの追加手順(まとめ)

ディスクの追加からマウントまでの一連の手順を整理します。

# 1. ディスクの認識確認
lsblk

# 2. パーティション作成
sudo fdisk /dev/sdb
# → n → p → 1 → Enter → Enter → w

# 3. ファイルシステム作成
sudo mkfs.ext4 /dev/sdb1

# 4. マウントポイント作成
sudo mkdir -p /mnt/data

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

# 6. 確認
df -h /mnt/data

# 7. UUIDの確認
sudo blkid /dev/sdb1

# 8. /etc/fstabに追記して自動マウント設定
echo "UUID=取得したUUID  /mnt/data  ext4  defaults  0  2" | sudo tee -a /etc/fstab

# 9. fstabの設定テスト
sudo umount /mnt/data
sudo mount -a
df -h /mnt/data

LVM — 論理ボリューム管理

LVM(Logical Volume Manager)は、物理ディスクを抽象化し、柔軟にストレージ容量を管理する仕組みです。パーティションのリサイズやディスクの追加が容易になるため、サーバー環境で広く利用されています。

LVMの基本概念

  • PV(Physical Volume): 物理ディスクまたはパーティション
  • VG(Volume Group): PVをまとめたプール
  • LV(Logical Volume): VGから切り出した論理的なパーティション

LVMの基本操作

# PVの作成
sudo pvcreate /dev/sdb1

# PVの確認
sudo pvdisplay
sudo pvs

# VGの作成
sudo vgcreate datavg /dev/sdb1

# VGの確認
sudo vgdisplay
sudo vgs

# LVの作成(VGから50GBを割り当て)
sudo lvcreate -L 50G -n datalv datavg

# VGの全容量をLVに割り当て
sudo lvcreate -l 100%FREE -n datalv datavg

# LVの確認
sudo lvdisplay
sudo lvs

# LVにファイルシステムを作成
sudo mkfs.ext4 /dev/datavg/datalv

# マウント
sudo mount /dev/datavg/datalv /mnt/data

LVMの拡張操作

LVMの大きなメリットは、稼働中にボリュームのサイズを拡張できる点です。

# 新しいディスクをVGに追加
sudo pvcreate /dev/sdc1
sudo vgextend datavg /dev/sdc1

# LVを10GB拡張
sudo lvextend -L +10G /dev/datavg/datalv

# ファイルシステムもリサイズ(ext4の場合)
sudo resize2fs /dev/datavg/datalv

# XFSの場合
sudo xfs_growfs /mnt/data

# LVの拡張とファイルシステムのリサイズを同時に実行
sudo lvextend -L +10G --resizefs /dev/datavg/datalv

ディスク容量トラブルの対処法

ディスク容量の逼迫は、Linuxサーバー運用で最も頻繁に発生するトラブルの一つです。ここでは、具体的な対処手順を紹介します。

容量逼迫の原因調査

# 1. 全体のディスク使用状況を確認
df -h

# 2. ルートパーティション配下の大きなディレクトリを特定
sudo du -h --max-depth=1 / 2>/dev/null | sort -rh | head -15

# 3. 容量を圧迫しているディレクトリを掘り下げる
sudo du -h --max-depth=1 /var | sort -rh | head -10
sudo du -h --max-depth=1 /var/log | sort -rh | head -10

# 4. 大きなファイルを直接検索
sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh

よくある容量逼迫の原因と対処法

1. ログファイルの肥大化

# ログファイルの容量確認
sudo du -sh /var/log/*  | sort -rh | head -10

# 古いログの手動削除(例: 7日以上前の圧縮済みログ)
sudo find /var/log -name "*.gz" -mtime +7 -delete

# journaldのディスク使用量を確認・削減
sudo journalctl --disk-usage
sudo journalctl --vacuum-size=500M

# logrotateの手動実行
sudo logrotate -f /etc/logrotate.conf

ログローテーションの恒久的な設定はLinuxログ管理入門で解説しています。

2. パッケージキャッシュの蓄積

# APTキャッシュの容量確認(Debian/Ubuntu系)
sudo du -sh /var/cache/apt/archives/

# APTキャッシュの削除
sudo apt clean

# YUM/DNFキャッシュの削除(RHEL/CentOS系)
sudo yum clean all
sudo dnf clean all

パッケージ管理の詳細はLinuxパッケージマネージャーガイドを参照してください。

3. 削除済みファイルがプロセスに掴まれている

ファイルを削除してもディスク容量が解放されない場合、削除されたファイルがまだプロセスによって開かれている可能性があります。

# 削除済みだがプロセスが掴んでいるファイルを確認
sudo lsof +L1 | head -20

# 対象プロセスを特定して再起動
sudo systemctl restart 対象サービス

# または、プロセスのファイルディスクリプタを直接操作(上級者向け)
# : > /proc/PID/fd/FD番号

プロセスの管理方法についてはLinuxプロセス管理で詳しく解説しています。

4. /tmpディレクトリの肥大化

# /tmpの使用量を確認
du -sh /tmp

# 古い一時ファイルを削除(7日以上前)
sudo find /tmp -type f -atime +7 -delete

# systemd-tmpfilesで一時ファイルの自動クリーンアップを設定
# /etc/tmpfiles.d/cleanup.conf
# d /tmp 1777 root root 7d

ディスク健康状態の確認

ハードウェアレベルのディスク障害を検知するには、SMART情報を確認します。

# smartmontoolsのインストール
sudo apt install smartmontools    # Debian/Ubuntu系
sudo yum install smartmontools    # RHEL/CentOS系

# SMARTの有効化
sudo smartctl -s on /dev/sda

# SMART情報の表示
sudo smartctl -a /dev/sda

# 健康状態の簡易チェック
sudo smartctl -H /dev/sda

# 短時間テストの実行
sudo smartctl -t short /dev/sda

スワップ領域の管理

スワップ領域は、物理メモリが不足した際にディスクの一部をメモリの代わりに使用する仕組みです。パフォーマンスの観点ではLinuxパフォーマンスモニタリングもあわせて参照してください。

スワップの確認と操作

# スワップ領域の確認
swapon --show
free -h

# スワップファイルの作成(2GB)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 永続化(/etc/fstabに追記)
echo "/swapfile  none  swap  sw  0  0" | sudo tee -a /etc/fstab

# スワップの無効化
sudo swapoff /swapfile

# スワップの使用状況(スワップの多用はパフォーマンス低下の兆候)
vmstat 1 5

まとめ

Linuxのディスク管理は、サーバー運用の基盤となるスキルです。本記事で解説した内容を振り返りましょう。

  • dfでファイルシステム全体の使用量を把握し、duで容量を消費しているディレクトリを特定する
  • mount / umountでファイルシステムの接続と切断を行い、/etc/fstabで自動マウントを設定する
  • fdisk / partedでパーティションを管理し、mkfsでファイルシステムを作成する
  • LVMを活用して柔軟なボリューム管理を実現する
  • 容量トラブル発生時は、ログの肥大化、キャッシュの蓄積、削除済みファイルの問題を順に調査する
  • SMARTでディスクの健康状態を定期的に確認する

ディスク管理のスキルは、Linuxトラブルシューティング全般で役立ちます。また、クラウド環境でのストレージ管理はLinux クラウドサーバー・AWSガイドで解説しています。Linuxの基本を体系的に学びたい方はLinuxコマンド一覧・実践ガイドもご活用ください。

#Linux#ディスク管理#ストレージ
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

AI活用のヒントをお探しですか?お気軽にご相談ください。

まずは話だけ聞いてもらう