Linuxの容量が気づかないうちに逼迫していることがあります。 下のようなMySQLのエラーが出て対処しようにも、どのディレクトリに大きなファイルがあるかCUIだと分りませんでした。
勉強も兼ねて、容量などを確認するコマンドを調べました。
Contents
環境
Paiza cloudでサーバを立てて確認しています。
- Ubuntu
- "18.04.1 LTS
サーバの容量を確認する df
dfコマンドでサーバのサイズを確認できます。 -hはサイズの単位を表示します。MはMB(メガバイトの意味)。
~$ df -h
Filesystem Size Used Avail Use% Mounted on
none 976M 73M 837M 8% /
tmpfs 64M 0 64M 0% /dev
tmpfs 997M 108K 997M 1% /run
/dev/vda2 50G 26G 22G 54% /bin/busybox
tmpfs 997M 0 997M 0% /run/lock
shm 64M 8.0K 64M 1% /dev/shm
tmpfs 997M 0 997M 0% /sys/fs/cgroup
tmpfs 997M 0 997M 0% /proc/acpi
tmpfs 997M 0 997M 0% /proc/scsi
tmpfs 997M 0 997M 0% /sys/firmware
ディスクの容量が50GBだとわかりました。 そのうち54%が使用済みです。
tmpfsは一時ディレクトリです。 物理メモリ上にキャッシュファイルや作業用ファイルを置いている。
duコマンドでディレクトリの使用量を確認する
使用量はduコマンドで確認できます。
/var/log/
の中のファイルを確認してみます。
$ sudo du -h /var/log/
8.0K /var/log/postgresql
8.0K /var/log/apache2
17M /var/log/journal/e0a80523b9ab48919913e00e5e2544dc
8.1M /var/log/journal/fba829e3bd3d41cfa84bc5fa93da9059
25M /var/log/journal
708K /var/log/apt
4.0K /var/log/mongodb
4.0K /var/log/dbconfig-common
4.0K /var/log/redis
4.0K /var/log/sysstat
24K /var/log/mysql
4.0K /var/log/apparmor
4.0K /var/log/unattended-upgrades
4.0K /var/log/dist-upgrade
27M /var/log/
ディレクトリの使用量を再帰的に読み込みます。
/var/log/journal
が一番大きいディレクトなので、ここから整理すると良いことがわかりました。
オプションhはdfの時と同じく見やすい単位にしてくれます。 単位を揃えたいときは、b,k,m で変えられます。
オプション | 意味 |
---|---|
-h | サイズに応じて読みやすい単位で表示する |
-b | サイズを B バイト単位で表示 |
-k | サイズを kB キロバイト単位で表示 |
-m | サイズを MB メガバイト単位で表示 |
サイズをメガバイト単位で表示する。
$ sudo du -m /var/log/
1 /var/log/postgresql
1 /var/log/apache2
17 /var/log/journal/e0a80523b9ab48919913e00e5e2544dc
9 /var/log/journal/fba829e3bd3d41cfa84bc5fa93da9059
25 /var/log/journal
1 /var/log/apt
1 /var/log/mongodb
1 /var/log/dbconfig-common
1 /var/log/redis
1 /var/log/sysstat
1 /var/log/mysql
1 /var/log/apparmor
1 /var/log/unattended-upgrades
1 /var/log/dist-upgrade
27 /var/log/
サイズが大きいディレクトリを探す
どのディレクトリが大きいか目星が無く、全て確認したいときもあるかと思います。 duでは全てのディレクトリを表示してしまうので、見づらくなります。
大きいサイズから10件取り出すコマンドの組み合わせが下記になります。
sudo du -m / | sort -n | tail -10
du -m /
: 全ディレクトリをMB単位でサイズを表示。sort -n
: 昇順に並べる。tail -10
: 後ろの10行を表示する。
以上をパイプラインで繋いでいます。
$ sudo du -m / | sort -n | tail -10
507 /var
529 /usr/local/rbenv/versions/2.5.3/lib/ruby/gems
529 /usr/local/rbenv/versions/2.5.3/lib/ruby/gems/2.5.0
544 /usr/lib/ghc
544 /usr/local/rbenv/versions/2.5.3/lib/ruby
561 /usr/local/rbenv/versions/2.5.3/lib
621 /usr/bin
631 /usr/local/rbenv/versions
631 /usr/local/rbenv/versions/2.5.3
636 /usr/local/rbenv
655 /usr/lib/x86_64-linux-gnu
676 /usr/local/swift-4.2-RELEASE-ubuntu18.04
676 /usr/local/swift-4.2-RELEASE-ubuntu18.04/usr
693 /usr/local/lib/node_modules
968 /usr/share
1323 /usr/local/lib
3403 /usr/lib
3978 /usr/local
9077 /usr
10429 /
大きいサイズのディレクトリが分りました。 これをもとに整理していきます。
ディレクトリ毎の使用量を確認する
$ du -d 1
で一階層だけ表示できる。
階層の深さを数値で指定できます。
$ sudo du -h -d 1 | sort -h
du: cannot access './proc/3752/task/3752/fd/4': No such file or directory
du: cannot access './proc/3752/task/3752/fdinfo/4': No such file or directory
du: cannot access './proc/3752/fd/3': No such file or directory
du: cannot access './proc/3752/fdinfo/3': No such file or directory
0 ./proc
4.0K ./boot
4.0K ./lib64
4.0K ./media
4.0K ./mnt
4.0K ./srv
4.0K ./sys
8.0K ./dev
16K ./lost+found
32K ./paizacloud
44K ./tmp
84K ./home
108K ./run
5.8M ./lib32
8.7M ./etc
8.8M ./sbin
12M ./bin
45M ./lib
257M ./root
496M ./opt
529M ./var
8.9G ./usr
11G .