Linuxのディスク容量がいっぱいになった場合の対応方法

Linuxの容量が少なくなってきた!もしくは容量100%になってしまって今すぐ対処しなければならない!!

という時の対処方法です。

おおまかな流れ

基本的には下記の3つの手順を行ってディスクの空き容量を確保していきます。

1.ディスクの容量を確認

2.どのディレクトリが原因になっているのかを確認

3.不要になっているファイルの削除

特に容量が100%になっていると、システムが動いていなくて緊急対応を迫られていると思いますが、焦らずに順を追っていきましょう。

詳細な手順

1.現状のマウントされたディスクの容量を確認

dfコマンドで現状のディスクの容量を確認します。

$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs         4065408        0   4065408   0% /dev
tmpfs            4083364        0   4083364   0% /dev/shm
tmpfs            4083364      400   4082964   1% /run
tmpfs            4083364        0   4083364   0% /sys/fs/cgroup
/dev/xvda1      31444972 29977852   1467120  96% /
tmpfs             816676        0    816676   0% /run/user/1000

このままだと容量を把握しずらいので、-hオプションを付けて認識しやすい単位で表示されるように実行してみます。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  400K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/xvda1       30G   29G  1.4G  96% /
tmpfs           798M     0  798M   0% /run/user/1000

どうやら/dev/vxda1ディスクの容量がピンチのようです。

dfコマンド主要オプション

「-h」 :人間にわかりやすい単位の表示にする

2.どのディレクトリの容量が多いかの確認

duコマンドを使ってでどのディレクトリ(ファイル)がどれだけの容量を使用しているのかを表示します。

$ sudo du -shc /*
0       /bin
87M     /boot
0       /dev
31M     /etc
2.4G    /home
0       /lib
0       /lib64
0       /local
0       /media
0       /mnt
7.0G    /opt
0       /proc
72K     /root
400K    /run
0       /sbin
359M    /skycall
0       /srv
0       /sys
32K     /tmp
15G     /usr
4.7G    /var
29G     total

一覧表示の中で容量の大きそうなディレクトリをピックアップしていきましょう。
ひとまず容量の大きい順にピックアップしてみると下記の4フォルダがリストに上がります。

15G /usr
7.0G /opt
4.7G /var
2.4G /home

対処方法セオリーとして、まずは容量お大きい順にそのディレクトリ内を掘っていって確認をしていきます。

dfコマンド主要オプション

「-s」 :指定パス以下の直下となるディレクトリでの合計容量を表示する
    これを指定しないと指定フォルダ以下の階層全てを掘って表示してしまう
「-h」 :人間にわかりやすい単位の表示にする
「-c」 : 最後のラインに合計容量を表示

容量の大きい順に表示したい場合

容量の大きい順に表示を行い場合は「sort -rn」をパイプで連結してコマンドを実行します。

$ sudo du -shc  /usr/* | sort -rn 
595M    /usr/lib
212M    /usr/lib64
127M    /usr/bin
35M     /usr/sbin
15G     total
14G     /usr/share
12M     /usr/libexec
4.0K    /usr/local
1.1M    /usr/include
0       /usr/tmp
0       /usr/src
0       /usr/games
0       /usr/etc

但し、ソートされる大きさの基準はギガやメガの単位は関係なく、数が単純に大きい順でのソートになるので、上記のようにduの-hオプションを付けている場合は「本当に大きい順」に表示されません。

その場合はduに-BGオプションを付けることでギガ数の大きい順に表示されます。
(見つける対象のフォルダ容量がギガ以上の単位の場合が前提です)

$ sudo du -shc -BG /usr/* | sort -rn 
15G     total
14G     /usr/share
1G      /usr/sbin
1G      /usr/local
1G      /usr/libexec
1G      /usr/lib64
1G      /usr/lib
1G      /usr/include
1G      /usr/bin
0G      /usr/tmp
0G      /usr/src
0G      /usr/games
0G      /usr/etc

3.容量の多いディレクトリ内を順番にチェック

先程ピックアップした容量を多いディレクトリを順にチェックしていきます。

まずは「/usr」内のディレクトリをチェック

$ sudo du -shc -BG /usr/* | sort -rn
15G     total
14G     /usr/share
1G      /usr/sbin
1G      /usr/local
1G      /usr/libexec
1G      /usr/lib64
1G      /usr/lib
1G      /usr/include
1G      /usr/bin
0G      /usr/tmp
0G      /usr/src
0G      /usr/games
0G      /usr/etc

次に「/usr/share」内のディレクトリをチェック

$ sudo du -shc -BG /usr/share/* | sort -rn
14G     total
13G     /usr/share/nginx
1G      /usr/share/zsh
1G      /usr/share/zoneinfo
1G      /usr/share/yum-cli
1G      /usr/share/xml
1G      /usr/share/X11
1G      /usr/share/vim
1G      /usr/share/thumbnailers
1G      /usr/share/themes
1G      /usr/share/terminfo
・・・・・・

次に「/usr/share/nginx」内のディレクトリをチェック

フォルダ内の数が少なくなってきたので、-BGオプションとソートのパイプを外して実行
(このあたりは状況に応じてオプションをつけたりしてください)

$ sudo du -shc  /usr/share/nginx/* 
25M     /usr/share/nginx/app-admin
103M    /usr/share/nginx/html
24K     /usr/share/nginx/modules
13G     /usr/share/nginx/software
13G     total

次に「/usr/share/nginx/software」内のディレクトリをチェック

$ sudo du -shc  /usr/share/nginx/software/*
13G     /usr/share/nginx/software/Application_Files
12K     /usr/share/nginx/software/cartificate
8.0K    /usr/share/nginx/software/publish.htm
508K    /usr/share/nginx/software/setup.exe
8.0K    /usr/share/nginx/software/SystemWinApp.application
13G     total

次に「/usr/share/nginx/Application_Files」内のディレクトリをチェック

$ sudo du -shc  /usr/share/nginx/software/Application_Files/*
192M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_23_2
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_1
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_10
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_2
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_3
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_4
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_5
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_6
193M    /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_26_7
・・・・・・

なんだか容量の大きいファイルが沢山ありますね。

今回のケースは自社システムのリリース毎に作成されるビルドファイルがバージョン毎に溜まっており、そのファイルが蓄積されてディスクを占めてしまっていたようです。

4.削除対象ファイルかどうかの確認

ディスク容量を占めたファイル郡が判明したら次は削除とすぐに行動したいところですが、一応対象ファイルが削除して問題無いものかどうかを確認しましょう。

もしどうしても削除できない場合はフォルダやファイルを圧縮してそれをリモートPC上や他のサーバーへバックアップしておき削除等を行う必要があります。

ですが、もしディスク容量が「1.現状のマウントされたディスクの容量を確認」ステップで100%になっていた場合は、圧縮ファイルを作成する容量のスペースが確保できないので、最低でも1~3%分はディスクスペースを確保するために、どれかファイルを削除する必要があります。

5.ディスク容量を圧迫している原因のファイルの削除

削除する対象のファイルの確認ができたら実際にファイル(ディスク)の削除を実行していきましょう。

ここで注意するポイントは

・削除対象ファイルはルートパスから指定する
・量が多い場合は「*」でまとめて削除するが全部削除するのではなく範囲を絞りながら削除する

といった具合にこまめに削除対象ファイルを把握しながら削除して領域を確保していきます。

#対象ファイルの削除
$sudo rm -Rf  /usr/share/nginx/software/Application_Files/SystemWinApp_0_1_27_1*

6.ディスク容量の確認

dfコマンドで容量を確認してみましょう

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           3.9G  400K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/xvda1       30G   27G  3.4G  89% /
tmpfs           798M     0  798M   0% /run/user/1000

最初の状態から比べて空き容量が確保できていたらOKです。

ひとまずこれでディスクスペースを確保する応急処置ができたので、あとは時間をかけて不要ファイルの削除を引き続き行ったり、デイスクの増設等を含めて対処していくとよいでしょう。

以上で「Linuxのディスク容量がいっぱいになった場合の対応方法」の解説は終了です。

おつかれさまでした!!

Leave a Reply

Your email address will not be published. Required fields are marked *