Linuxで「容量がいっぱい」「重い」を調べる|df・du・free・top【初心者向け】

前の記事では、rsync と tar でバックアップを取り、更新のしくみを確かめました。ここから Lv5 です。Lv5 では、サーバーで起きる「困った」を自分で調べる力をつけます。最初は、「容量がいっぱい」「動作が重い」ときの調べ方です。

もし、VPS で動かしている n8n が、ある日急に動かなくなったら…。ログを見ると「No space left on device」。ディスク(=データをしまっておく部品)がいっぱいになるのは、よくある話です。犯人は、毎日少しずつ増えていた古いバックアップ、ということもあります。あわてて、よくわからないまま大きそうなファイルを消したくなりますが、そこはぐっとこらえて「どこが大きいか」を順番に調べれば、原因はちゃんと見つかります。

この記事では、わざと大きなファイルを作り、それを見つける練習をします。さらに、わざと CPU(=計算をする、パソコンの頭脳にあたる部品)を忙しくして、「重い」の原因を探す練習もします。

💡
この記事でわかること
  • df -h で、ディスク全体の空きを確かめる方法
  • du で、どのフォルダが大きいかを順番にしぼり込む方法
  • free -h で、メモリの使い方を読む方法(「available」を見る)
  • uptime・top・ps で、何が重くしているかを見つける方法
  • 容量を空けるときに、消してはいけないもの
🔰
この記事の前提
  • ls・cd・rm などの基本のコマンドを使える
  • パイプ(|)と sort の考え方がわかる
  • ps・top でプロセスを見たことがある

まだの方は、前の記事「Linuxのバックアップと更新|rsync・tar・自動アップデートで守る【初心者向け】」から読むのがおすすめです。プロセスについては「Linuxのプロセス入門|ps・top・killで動いているものを見る・止める【初心者向け】」でくわしく説明しています。

💡
用語メモ
  • トークン:ログインした状態や、使ってよい範囲を表す文字列。APIキーと同じく、パスワードと同じように人に見せてはいけません
  • VPS:大きな物理サーバーを区切って作った、自分専用の仮想サーバーを、月額などで借りられるサービス。root 権限で自由に設定できます
  • n8n:画面上で「ノード」というブロックをつないで、自動化の流れ(ワークフロー)を作れるツール。自分のサーバーでも動かせます
  • rsync:ファイルを別の場所に写すコマンド。変わったものだけを写せます

用語で迷ったら、連載のまとめ記事の「よく出てくる用語ミニ辞典」でも確かめられます。


結論:「全体 → フォルダ → ファイル」の順にしぼる

知りたいこと コマンド
ディスク全体の空き df -h
フォルダごとの大きさ du -h --max-depth=1 場所(sort -h で並べる)
大きいファイルを探す find 場所 -type f -size +100M
メモリの空き free -h(available を見る)
重さのざっくりした目安 uptime(load average)
何が重くしているか top、ps aux --sort=-%cpu

容量と重さを調べる流れ

準備:練習用のディレクトリを作る

  • 1
  • 2
  • 3
mkdir -p ~/linux-practice/disk-test
cd ~/linux-practice/disk-test
pwd

🖥️
この記事の出力例について

ここから先の出力例は、Debian 13での実行例です(ユーザー名 kaito・パソコン名 demo のダミー環境)。UbuntuやWSL(=Windows の中で Linux を動かせる、Microsoft のしくみ)では、表示が少し違うことがあります。

(例)

  • 1
  • 2
kaito@demo:~/linux-practice/disk-test$ pwd
/home/kaito/linux-practice/disk-test

STEP 1:df でディスク全体の空きを見る

  • 1
df -h

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
kaito@demo:~/linux-practice/disk-test$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb        128G   28G  100G  22% /
tmpfs            64M     0   64M   0% /dev
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           256M   76K  256M   1% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           7.9G     0  7.9G   0% /tmp
tmpfs           1.6G  4.0K  1.6G   1% /run/user/1000

検証環境では、/ の行は /dev/vdb で、Use% は 22% でした。/boot の行はなく、tmpfs(メモリの上に作られる一時的な場所)の行がいくつか並んでいます。ディスクの名前や大きさ、並ぶ行は、パソコンやサーバーによってちがいます。

-h は「人が読みやすい単位(G や M)で」という意味です。見るところは、Mounted on が / の行の Use% です。90% をこえていたら、そろそろ片づけを考えましょう。100% になると、ログが書けなくなり、アプリが止まることがあります。

自分のホームがどのディスクにあるかは、場所を指定するとわかります。

  • 1
  • 2
df -h ~
df -i ~

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
kaito@demo:~/linux-practice/disk-test$ df -h ~
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb        128G   28G  100G  22% /
kaito@demo:~/linux-practice/disk-test$ df -i ~
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vdb       2097152 360373 1736779   18% /

df -i は、Inodes(作れるファイルの数の上限)のうち 18% を使っている、という意味です。

df -i は「ファイルの数」の空きです。容量に余裕があるのに「No space left on device」と出るときは、小さなファイルが大量にできて、ファイルの数の上限に達していることがあります。小さなファイルを作ると本当に数が増えるのかを、検証で試しました。空のファイルを5000個作って、もう一度 df -i を見ます。f{1..5000} は「f1 から f5000 まで」という意味です。

  • 1
  • 2
  • 3
  • 4
  • 5
df -i ~
mkdir many && touch many/f{1..5000}
df -i ~
rm -r many
df -i ~

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
kaito@demo:~/linux-practice/disk-test$ df -i ~
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vdb       2097152 569363 1527789   28% /
kaito@demo:~/linux-practice/disk-test$ mkdir many && touch many/f{1..5000}
kaito@demo:~/linux-practice/disk-test$ df -i ~
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vdb       2097152 574364 1522788   28% /
kaito@demo:~/linux-practice/disk-test$ rm -r many
kaito@demo:~/linux-practice/disk-test$ df -i ~
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/vdb       2097152 569363 1527789   28% /

IUsed(使っている数)が 569363 から 574364 に増え、rm -r many で消すと元の数にもどりました。中身が空のファイルでも、1つにつき1つ数を使います(フォルダの many も1つ使うので、5000 より1つ多く増えています)。上の例とは別の日の検証なので、数字はちがいます。この検証環境は上限が大きいので、IUse% は 28% のまま変わりませんでした。

Debian 13での実行画面

STEP 2:du でどのフォルダが大きいかを探す

練習用に、わざと 200MB のファイルを作ります。中身は空っぽ(0 の連続)のファイルです。

  • 1
  • 2
  • 3
  • 4
mkdir -p logs data
fallocate -l 200M logs/old-backup.bin
echo "小さなメモです" > data/memo.txt
ls -lh logs data

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
kaito@demo:~/linux-practice/disk-test$ ls -lh logs data
data:
total 4.0K
-rw-rw-r-- 1 kaito kaito 22 Nov  1 04:12 memo.txt

logs:
total 200M
-rw-rw-r-- 1 kaito kaito 200M Nov  1 04:12 old-backup.bin

old-backup.bin は 200M、memo.txt は 22 バイトです。検証環境は新しいファイルに「グループも書きこめる」設定(umask 002)なので -rw-rw-r-- になっています。-rw-r--r-- と表示される環境もあります。

du(disk usage)で、フォルダごとの大きさを見ます。

  • 1
  • 2
du -sh ~/linux-practice/disk-test
du -h --max-depth=1 ~/linux-practice/disk-test | sort -h

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
kaito@demo:~/linux-practice/disk-test$ du -sh ~/linux-practice/disk-test
201M    /home/kaito/linux-practice/disk-test
kaito@demo:~/linux-practice/disk-test$ du -h --max-depth=1 ~/linux-practice/disk-test | sort -h
8.0K    /home/kaito/linux-practice/disk-test/data
201M    /home/kaito/linux-practice/disk-test
201M    /home/kaito/linux-practice/disk-test/logs

logs が 201M で一番下に来ました。すぐ上の disk-test(フォルダ全体の合計)も同じ 201M です。中身のほとんどが logs なので、合計とほぼ同じ大きさになっています。

Debian 13での実行画面

-s は「合計だけ」、--max-depth=1 は「1階層下まで」という意味です。sort -h で小さい順に並べると、一番下が一番大きいフォルダになります。大きいフォルダが見つかったら、その中で同じコマンドをくり返して、だんだんしぼり込んでいきます。

ホーム全体で調べるときは、次のようにします。読めないフォルダのエラーは 2>/dev/null で隠しています。

  • 1
du -h --max-depth=1 ~ 2>/dev/null | sort -h | tail -n 5

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
kaito@demo:~/linux-practice/disk-test$ du -h --max-depth=1 ~ 2>/dev/null | sort -h | tail -n 5
4.0K    /home/kaito/.ssh
8.0K    /home/kaito/.config
201M    /home/kaito
201M    /home/kaito/linux-practice

検証環境のホームは練習用なので、表示は4行だけでした。/home/kaito(ホーム全体の合計)のすぐ下に、一番大きい linux-practice が来ています。


STEP 3:find で大きいファイルを直接探す

フォルダをたどるかわりに、「100MB より大きいファイル」を直接探すこともできます。

  • 1
  • 2
find ~/linux-practice -type f -size +100M
find ~/linux-practice -type f -size +100M -exec ls -lh {} \;

(例)

  • 1
  • 2
  • 3
  • 4
kaito@demo:~/linux-practice/disk-test$ find ~/linux-practice -type f -size +100M
/home/kaito/linux-practice/disk-test/logs/old-backup.bin
kaito@demo:~/linux-practice/disk-test$ find ~/linux-practice -type f -size +100M -exec ls -lh {} \;
-rw-rw-r-- 1 kaito kaito 200M Nov  1 04:12 /home/kaito/linux-practice/disk-test/logs/old-backup.bin

-exec ls -lh {} \; は「見つかったファイルごとに ls -lh を実行する」という意味です。ここでは見るだけにしています。

サーバー全体で大きくなりやすい場所も、のぞいておきましょう。

  • 1
  • 2
sudo du -sh /var/log /var/cache/apt
journalctl --disk-usage

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
kaito@demo:~/linux-practice/disk-test$ sudo du -sh /var/log /var/cache/apt
[sudo] password for kaito:
17M     /var/log
212M    /var/cache/apt
kaito@demo:~/linux-practice/disk-test$ journalctl --disk-usage
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
Archived and active journals take up 8M in the file system.

sudo のパスワードを聞かれたら、自分のパスワードを入れます(画面には表示されません)。

journalctl --disk-usage は sudo なしで動きます。最初の3行の Hint: は、「一般ユーザーなので、ほかのユーザーやシステムのメッセージは見えていません」という案内です(エラーではありません)。最後の行が、ログ全体の大きさ(8M)です。

ログ(/var/log)と、apt がダウンロードしたパッケージの置き場(/var/cache/apt)、Docker(=アプリを、必要なものごと「コンテナ」という箱に入れて動かす道具)のイメージ(/var/lib/docker)は、サーバーで大きくなりやすい場所の代表です。

🚫
容量を空けるときに、やってはいけないこと(文章だけで説明します)

容量がいっぱいだと、あせって大きいものから消したくなります。でも、sudo rm -rf で /var/log や /var/lib の中、/usr の中を消すと、ソフトが動かなくなったり、トラブルの原因を探す手がかりがなくなったりします。動いているプログラムが開いているファイルを消しても、プログラムを止めるまで容量は空かないこともあります。消してよいのは、自分で作ったもので、中身と役割がわかっているものだけです。ログを小さくしたいときや、apt のキャッシュを片づけたいときは、journalctl --vacuum-… や sudo apt clean の意味を調べてから使いましょう。Docker の片づけ(docker system prune)も、消えるものを確かめてからにしてください。

💡
消す前に「見るだけ」で確かめる順番

片づけのコマンドには、たいてい「どれくらい使っているかを見るだけ」の形があります。消す前に、まずこちらで大きさを確かめましょう。

  • ログ(journal):sudo journalctl --disk-usage で、journal が使っている大きさを見られます。小さくするときの --vacuum-… は、そのあとで意味を調べてから使います。検証環境では Archived and active journals take up 16M in the file system. の1行が表示されました(16M の部分は、みなさんの環境では変わります)。
  • Docker:docker system df で、イメージ・コンテナ(=アプリと、動かすのに必要なものをひとまとめにした箱)・ボリュームがそれぞれどれくらい使っているかを見られます(Docker 入門の記事)。名前つきボリュームには n8n のデータが入っていることがあるので、ここは特に慎重にします。表示される項目は、Docker のバージョンにより異なります。
  • 古いバックアップ:日付つきの箱が増えつづけているなら、バックアップの記事の「古いバックアップの整理」のように、まず ls -t で一覧を見てから、残す数を決めます。

また、df で「いっぱい」なのに du で大きいものが見つからないときは、消したのに、動いているプログラムがまだ開いているファイルが残っていることがあります。そのプログラム(サービス)を再起動すると空くことがあります。どのプログラムかは sudo lsof +L1 で探せます。ただし Debian 13 では、lsof は最初から入っていません。入っていないときは sudo apt install lsof で入れます(このあとの検証を見てください)。

消したのに開かれたままのファイルを、lsof で見つける(検証)

検証では、50MB のファイルを作り、tail -f で開いたまま消してから、sudo lsof +L1 で探しました。最初の command -v lsof; echo $? で 1 と出たのは、lsof が入っていないという意味です。そこで、sudo apt install lsof で入れてから続けました(入れるときの表示は省いています)。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
command -v lsof; echo $?
sudo apt install lsof
dd if=/dev/zero of=big.tmp bs=1M count=50
tail -f big.tmp > /dev/null &
rm big.tmp
ls -l big.tmp
sudo lsof +L1
kill %1
sudo lsof +L1; echo $?

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
kaito@demo:~/linux-practice/disk-test$ command -v lsof; echo $?
1
kaito@demo:~/linux-practice/disk-test$ dd if=/dev/zero of=big.tmp bs=1M count=50
50+0 records in
50+0 records out
52428800 bytes (52 MB, 50 MiB) copied, 0.0244743 s, 2.1 GB/s
kaito@demo:~/linux-practice/disk-test$ tail -f big.tmp > /dev/null &
[1] 1064
kaito@demo:~/linux-practice/disk-test$ rm big.tmp
kaito@demo:~/linux-practice/disk-test$ ls -l big.tmp
ls: cannot access 'big.tmp': No such file or directory
kaito@demo:~/linux-practice/disk-test$ sudo lsof +L1
COMMAND  PID  USER FD   TYPE DEVICE SIZE/OFF NLINK    NODE NAME
tail    1064 kaito 3r   REG 254,16 52428800     0 1082057 /home/kaito/linux-practice/disk-test/big.tmp (deleted)
kaito@demo:~/linux-practice/disk-test$ kill %1
kaito@demo:~/linux-practice/disk-test$ sudo lsof +L1; echo $?
[1]+  Terminated              tail -f big.tmp > /dev/null
0

ls では見えなくなった big.tmp が、(deleted)(消された)の印つきで出ています。COMMAND の tail と PID の 1064 が「まだ開いているプログラム」で、SIZE/OFF の 52428800(50MB)が、まだ空いていない大きさです。kill %1 でそのプログラムを止めると、もう一度 sudo lsof +L1 を打っても何も出なくなりました([1]+ Terminated は、止めた tail についてのお知らせです)。本番のサービスなら、止めるかわりに、そのサービスを再起動します。

Debian 13での実行画面

STEP 4:free でメモリの使い方を見る

ここからは「重い」の調べ方です。まず、メモリを見ます。

  • 1
free -h

(例)

  • 1
  • 2
  • 3
  • 4
kaito@demo:~/linux-practice/disk-test$ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi       9.4Gi       2.1Gi        43Mi       4.5Gi       6.2Gi
Swap:             0B          0B          0B

数字は環境によってちがいます。検証環境では、コンテナの中から検証用マシン全体のメモリ(15Gi)が見えています。Swap(=メモリが足りないときに、ディスクの一部をメモリの代わりに使うしくみ)は 0B で、Swap を用意していない環境でした。

見るところは available(今から使える量)です。free の列が小さくても、あわてなくて大丈夫です。Linux は空いているメモリを buff/cache(読み込んだファイルの一時置き場)に使っていて、必要になったらすぐに明け渡します。

列 意味
used プログラムが使っている量
buff/cache ファイルの一時置き場(必要なら空けられる)
available 今から使える量(ここを見る)
Swap メモリが足りないときに、ディスクを代わりに使う場所

available が少なく、Swap の used がどんどん増えているときは、メモリ不足で重くなっている可能性があります。


STEP 5:uptime と top で「重い」の犯人を探す

わざと CPU を忙しくしてみます。yes は「y」を出しつづけるだけのコマンドで、timeout 60 をつけて 60秒で自動で止まるようにしています。

  • 1
  • 2
timeout 60 yes > /dev/null &
uptime

(例)

  • 1
  • 2
  • 3
  • 4
kaito@demo:~/linux-practice/disk-test$ timeout 60 yes > /dev/null &
[1] 608
kaito@demo:~/linux-practice/disk-test$ uptime
 04:13:11 up 13:28,  1 user,  load average: 0.44, 0.47, 0.31

[1] 608 の 1 がジョブ番号、608 が PID です。番号は毎回ちがいます。

load average の3つの数字は、1分・5分・15分の平均の「混み具合」です。CPU の数(nproc で確かめられます)と同じくらいなら満員、それより大きいと順番待ちが起きています。

60秒たつ前に、何が CPU を使っているかを見ます。

  • 1
  • 2
  • 3
nproc
top -b -n 1 | head -n 15
ps aux --sort=-%cpu | head -n 5

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
kaito@demo:~/linux-practice/disk-test$ nproc
8
kaito@demo:~/linux-practice/disk-test$ top -b -n 1 | head -n 15
top - 04:13:14 up 13:28,  1 user,  load average: 0.44, 0.47, 0.31
Tasks:  15 total,   2 running,  13 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.3 us,  9.8 sy,  0.0 ni, 81.7 id,  0.0 wa,  0.0 hi,  1.2 si,  0.0 st
MiB Mem :  16002.3 total,   2189.7 free,   9608.5 used,   4577.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   6393.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    609 kaito     20   0    7064   1964   1844 R 100.0   0.0   0:07.72 yes
      1 root      20   0   22904  13968  10904 S   0.0   0.1   0:00.16 systemd
     66 root      20   0   50988  15880  14700 S   0.0   0.1   0:00.04 systemd+
    131 root      20   0    8344   2900   2644 S   0.0   0.0   0:00.00 cron
    132 message+  20   0    8364   4880   4308 S   0.0   0.0   0:00.02 dbus-da+
    135 root      20   0   19104   9136   7900 S   0.0   0.1   0:00.02 systemd+
    139 root      20   0    9268   2888   2644 S   0.0   0.0   0:00.00 agetty
    384 Debian-+  20   0   40376  24468  10580 S   0.0   0.1   0:00.25 exim4
kaito@demo:~/linux-practice/disk-test$ ps aux --sort=-%cpu | head -n 5
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
kaito        609 99.7  0.0   7064  1964 pts/0    R    04:13   0:08 yes
kaito        578  0.1  0.0  10456  5836 pts/0    S    04:12   0:00 -bash
Debian-+     384  0.0  0.1  40376 24468 ?        Ss   04:05   0:00 /usr/sbin/exim4 -bdf -q30m
root           1  0.0  0.0  22904 13968 ?        Ss   04:05   0:00 /lib/systemd/systemd --log-target=console

yes が %CPU 100.0 で一番上に来ました(ps では 99.7)。CPU 1つを丸ごと使っている、という意味です。systemd+ のように + で終わる名前は、長い名前が欄に入りきらずに切られたものです。

free・uptime・top の数字は、環境によってちがいます。検証環境では CPU が8つ(nproc が 8)あり、マシン全体の値が出るため、yes が1つ動いても load average はほとんど上がりませんでした(0.44)。CPU が1つの小さな VPS なら、1 に近づいていきます。

Debian 13での実行画面

top -b -n 1 は「1回だけ表示して終わる」形です。ふつうに top と打つと、画面が更新されつづけます(q で終了、M でメモリ順、P で CPU 順)。メモリを多く使っているものは、ps aux --sort=-%mem | head -n 5 で探せます。

60秒たったら、止まったことを確かめます。

  • 1
  • 2
  • 3
jobs
ps aux | grep "[y]es"
uptime

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
kaito@demo:~/linux-practice/disk-test$ jobs
[1]+  Exit 124                timeout 60 yes > /dev/null
kaito@demo:~/linux-practice/disk-test$ ps aux | grep "[y]es"
kaito@demo:~/linux-practice/disk-test$ uptime
 04:14:21 up 13:29,  1 user,  load average: 0.69, 0.56, 0.35

jobs は Exit 124 と表示されました。124 は、timeout が時間切れでコマンドを止めたときの終了コード(=コマンドが終わったときに返す数字)です。60秒で自動で止まった、という意味なので、問題ありません。日本語の環境では 終了 124 と表示されます(ジョブの表示が出たあとなら、何も表示されないこともあります)。ps aux | grep "[y]es" は何も表示されず、yes はもう動いていません。

load average は 0.69 で、検証環境ではほかの負荷も混ざるため、すぐには下がりませんでした。1分・5分・15分の平均なので、止めてから少しずつ下がっていきます。

犯人がわかったら、それが何のプログラムかを調べてから対処します。自分で動かしたものなら止めてかまいませんが、知らないプロセスをいきなり kill するのはやめましょう。

🚫
「重い」ときに、やってはいけないこと(文章だけで説明します)

ネットには、メモリを空けるために echo 3 > /proc/sys/vm/drop_caches を実行する方法や、swapoff で Swap を止める方法が出てきます。どちらも、根本の原因は直らないうえ、かえって遅くなったり、メモリ不足でプログラムが強制終了されたりすることがあります。知らないプロセスへの sudo kill -9 も同じです。まずは原因のプロセスを見つけ、それが何かを確かめることを優先しましょう。

🤖 詰まったらAIに聞こう:容量や重さの原因がわからない

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Linuxの初心者です。サーバーの容量がいっぱい(または動作が重い)で困っています。
次の結果から、原因として考えられるものと、安全な対処の順番を教えてください。
消してよいかどうか判断が必要なものは、確かめ方も教えてください。

【症状】例:No space left on device と出る/n8nの画面が重い
【df -h の結果】ここに貼る
【du -h --max-depth=1 調べた場所 | sort -h の結果】ここに貼る
【free -h の結果】ここに貼る
【top -b -n 1 | head -n 15 の結果】ここに貼る

🔒
AIに貼る前に:秘密情報やパスワードは貼らない

du や find の結果には、フォルダ名やファイル名がそのまま出ます。顧客名やサービス名が入っている場合は、「customer-A」のように置き換えてから貼りましょう。top や ps aux の結果には、コマンドの引数としてパスワードやトークンが見えていることがあります。その部分は必ず「***」に置き換えてください。


後片づけ

練習用の大きなファイルとディレクトリを消して、容量が戻ったことを確かめます。

  • 1
  • 2
  • 3
  • 4
cd ~/linux-practice
rm -r disk-test
ls
df -h ~

(例)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
kaito@demo:~/linux-practice$ rm -r disk-test
kaito@demo:~/linux-practice$ ls
archive-test  chmod-test  edit-test  find-test  grep-test  link-test  perm-test  redirect-test
kaito@demo:~/linux-practice$ df -h ~
Filesystem      Size  Used Avail Use% Mounted on
/dev/vdb        128G   28G  100G  22% /

disk-test がなくなりました。ほかのフォルダは、これまでの記事の練習で作ったものです。df -h の Used は G(ギガ)単位で表示されるため、200M 減っても 28G のまま変わりませんでした。


よくある質問

Q. df -h では空きがあるのに「No space left on device」と出ます。

ファイルの「数」の上限(inode)を使い切っていることがあります。df -i で IUse% が 100% に近くないかを見てください。小さなファイルが大量にできるフォルダ(キャッシュや一時ファイル)が原因のことが多いです。STEP 1 の検証のように、空のファイルでも1つにつき1つ数を使います。

Q. WSL で df -h を打つと、知らない場所がたくさん出てきます。

WSL では、Linux 用の仮想ディスクのほかに、Windows のドライブ(/mnt/c など)も一覧に出ます。表示される行や大きさは、環境により異なります。WSL の Linux 側の空きを見たいときは、df -h ~ のように、自分のホームがある場所だけを指定すると読みやすくなります。

Q. free の free(空き)が少ないのですが、メモリを増やすべきですか?

Linux は、空いているメモリをファイルの読みこみを速くするため(buff/cache)に使うので、free が少ないのはふつうのことです。この記事の STEP 4 のとおり、見るべきなのは available と、Swap の used が増えつづけていないかです。


まとめ

  • 容量は「df -h で全体 → du でフォルダ → find でファイル」の順にしぼる
  • du -h --max-depth=1 場所 | sort -h の一番下が、一番大きいフォルダ
  • 空きがあるのに書けないときは、df -i でファイルの数も見る
  • メモリは free -h の available を見る。buff/cache は必要なら空く
  • 重いときは uptime → top・ps aux --sort=-%cpu で犯人を探す
  • 消す・止める前に、それが何かを確かめる

次の記事では、「つながらない」ときの調べ方を学びます。ping・ss・curl -v・dig を使って、どこで止まっているかを切り分けます。


次に読む記事


関連する記事