こんにちは。並河(@namikawa)です。
最近はすっかり暖かい日が続いておりまして、花粉が飛散して本当に悲惨な感じになってしまっているアカウントがこちらになります。
さて、近頃は、GCPへの移行を終えたり、新しいメンバーが続々とジョインしてきてくれていることもあり、本業のインフラ職人業が随分と減ってきていて、やっぱり最近力を入れている採用の話を書こうかなと思ったのですが、そういえば前回は採用向けの話(アスタミューゼの開発組織と採用に関するQAアレコレ)を書いたところだったので、今日はLinux運用環境での小ネタでも書こうかと思います。
「なぜかサーバに書き込めません!」
ある日、とあるサーバのディスク関連のアラートが飛んできて、エンジニアがサーバの状況を確認したところ、ディスクの容量には空きがあるが、なぜか書き込めないという状態になっていました。
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 9.9G 5.5G 3.9G 59% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 286M 8.0K 286M 1% /dev tmpfs 59M 348K 59M 1% /run none 5.0M 0 5.0M 0% /run/lock none 295M 0 295M 0% /run/shm none 100M 0 100M 0% /run/user
dfコマンドでディスクの使用量を確認するも空き容量はまだ残っている感じ。
エラーを確認すると "No space left on device" とな。
# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 655360 654754 606 100% / none 75426 2 75424 1% /sys/fs/cgroup udev 72973 405 72568 1% /dev tmpfs 75426 327 75099 1% /run none 75426 3 75423 1% /run/lock none 75426 1 75425 1% /run/shm none 75426 4 75422 1% /run/user
というわけで、定番の inode 枯渇問題でありました。
たくさんのファイルがどこにあるのかを探す
やり方は色々あるかと思うのですが、地道にルートからたくさんあるディレクトリを探していきます。
地味なやり方ですが、まずは1階層目のレベルで、どこの配下に大量のファイルがあるか探索します。
# find / -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -nr 489278 usr 14308 lib 3287 var 1818 data 826 etc 293 boot 130 sbin 128 bin 94 home 5 root 3 tmp 1 swap
こんな感じで、"/usr"配下のどこかにたくさんファイルが存在していることがわかりました。
あとは同じ要領で機械的に2階層目・・・と探していけばよいです。
# find /usr -xdev -type f | cut -d "/" -f 3 | sort | uniq -c | sort -nr 460742 src 15060 share 12806 lib 544 bin 121 sbin 5 include
"/usr"配下を対象に2階層目を探索した結果がこちら。"/usr/src"にたくさん溢れている、、、というところでピンときますね。
# ll /usr/src total 188 drwxr-xr-x 47 root root 4096 Dec 15 06:45 ./ drwxr-xr-x 10 root root 4096 Nov 14 2015 ../ drwxr-xr-x 24 root root 4096 Jul 15 2016 linux-headers-3.16.0-77/ drwxr-xr-x 7 root root 4096 Jul 15 2016 linux-headers-3.16.0-77-generic/ drwxr-xr-x 27 root root 4096 Nov 21 06:33 linux-headers-4.4.0-101/ drwxr-xr-x 7 root root 4096 Nov 21 06:33 linux-headers-4.4.0-101-generic/ drwxr-xr-x 27 root root 4096 Dec 8 06:50 linux-headers-4.4.0-103/ drwxr-xr-x 7 root root 4096 Dec 8 06:50 linux-headers-4.4.0-103-generic/ drwxr-xr-x 7 root root 4096 Dec 15 06:45 linux-headers-4.4.0-104-generic/ drwxr-xr-x 27 root root 4096 Feb 23 2017 linux-headers-4.4.0-64/ drwxr-xr-x 7 root root 4096 Feb 23 2017 linux-headers-4.4.0-64-generic/ drwxr-xr-x 27 root root 4096 Mar 9 2017 linux-headers-4.4.0-66/ drwxr-xr-x 7 root root 4096 Mar 9 2017 linux-headers-4.4.0-66-generic/ drwxr-xr-x 27 root root 4096 Mar 16 2017 linux-headers-4.4.0-67/ drwxr-xr-x 7 root root 4096 Mar 16 2017 linux-headers-4.4.0-67-generic/ drwxr-xr-x 27 root root 4096 Mar 28 2017 linux-headers-4.4.0-70/ drwxr-xr-x 7 root root 4096 Mar 28 2017 linux-headers-4.4.0-70-generic/ drwxr-xr-x 27 root root 4096 Mar 31 2017 linux-headers-4.4.0-71/ drwxr-xr-x 7 root root 4096 Mar 31 2017 linux-headers-4.4.0-71-generic/ drwxr-xr-x 27 root root 4096 Apr 5 2017 linux-headers-4.4.0-72/ drwxr-xr-x 7 root root 4096 Apr 5 2017 linux-headers-4.4.0-72-generic/ drwxr-xr-x 27 root root 4096 Apr 25 2017 linux-headers-4.4.0-75/ drwxr-xr-x 7 root root 4096 Apr 25 2017 linux-headers-4.4.0-75-generic/ drwxr-xr-x 27 root root 4096 May 18 2017 linux-headers-4.4.0-78/ drwxr-xr-x 7 root root 4096 May 18 2017 linux-headers-4.4.0-78-generic/ drwxr-xr-x 27 root root 4096 Jun 7 2017 linux-headers-4.4.0-79/ drwxr-xr-x 7 root root 4096 Jun 7 2017 linux-headers-4.4.0-79-generic/ drwxr-xr-x 27 root root 4096 Jun 20 2017 linux-headers-4.4.0-81/ drwxr-xr-x 7 root root 4096 Jun 20 2017 linux-headers-4.4.0-81-generic/ drwxr-xr-x 27 root root 4096 Jun 29 2017 linux-headers-4.4.0-83/ drwxr-xr-x 7 root root 4096 Jun 29 2017 linux-headers-4.4.0-83-generic/ drwxr-xr-x 27 root root 4096 Jul 25 06:41 linux-headers-4.4.0-87/ drwxr-xr-x 7 root root 4096 Jul 25 06:41 linux-headers-4.4.0-87-generic/ drwxr-xr-x 27 root root 4096 Aug 4 06:32 linux-headers-4.4.0-89/ drwxr-xr-x 7 root root 4096 Aug 4 06:32 linux-headers-4.4.0-89-generic/ drwxr-xr-x 27 root root 4096 Aug 12 06:55 linux-headers-4.4.0-91/ drwxr-xr-x 7 root root 4096 Aug 12 06:55 linux-headers-4.4.0-91-generic/ drwxr-xr-x 27 root root 4096 Aug 16 06:35 linux-headers-4.4.0-92/ drwxr-xr-x 7 root root 4096 Aug 16 06:35 linux-headers-4.4.0-92-generic/ drwxr-xr-x 27 root root 4096 Aug 29 06:34 linux-headers-4.4.0-93/ drwxr-xr-x 7 root root 4096 Aug 29 06:34 linux-headers-4.4.0-93-generic/ drwxr-xr-x 27 root root 4096 Sep 19 06:32 linux-headers-4.4.0-96/ drwxr-xr-x 7 root root 4096 Sep 19 06:32 linux-headers-4.4.0-96-generic/ drwxr-xr-x 27 root root 4096 Oct 11 06:49 linux-headers-4.4.0-97/ drwxr-xr-x 7 root root 4096 Oct 11 06:49 linux-headers-4.4.0-97-generic/ drwxr-xr-x 27 root root 4096 Oct 31 06:39 linux-headers-4.4.0-98/ drwxr-xr-x 7 root root 4096 Oct 31 06:39 linux-headers-4.4.0-98-generic/
はい、このサーバはセキュリティ関連の自動アップデートが動いているサーバでしたね・・・。
ということで、不要なパッケージを apt-get purge 等で綺麗にしたのでした。
おわりに
弊社には大量のデータがあるので、本当はファイルがたくさんあって大変、みたいな話に無理やり結びつけようとも思ったのですが、そもそも基本的には各種データストアに入れているし、Rawデータの置き場はGCSのお世話になっているので、inodeに影響を及ぼす様なことは基本的にはありません。
ということで、割とありきたりなネタで恐縮でしたが、何かのお役に立てれば幸いです。
最後に、弊社ではエンジニア・デザイナーを絶賛大募集しておりますので、少しでも気になれば、カジュアルにランチでもしながらお話ししましょう。疑問・質問などございましたら、お手数ですが (@namikawa) まで気軽にDM等いただければと思います。
それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́