3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[OCI] 無料50GBインスタンスの空き容量をなるべく確保する

Last updated at Posted at 2024-01-20

OCIの無料インスタンス VM.Standard.A1.Flex (Always Free) を一生こすり続けている皆さんこんにちは。50GBのBootボリュームが一瞬でなくなってしまったりしてお困りではありませんか? 個人的にストレージ確保に非常に苦労しているので、この記事ではその知見をまとめます。

対象環境

Key Value
OS Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-1048-oracle aarch64)
インスタンス VM.Standard.A1.Flex
Bootボリューム 50GB (99%消費)
Blockボリューム 150GB (100%消費 保管用のため消せない)
備考 DockerとPortainerを使用

消せるものの調査方法

まず現状99%消費しているので、一体何が原因なのかを調べます。

ストレージ使用量の確認

  • sudo du -hs * | sort -hr
    • カレントディレクトリにあるフォルダそれぞれのサイズを表示します
  • sudo ncdu -x -q
  • sudo docker system df -v
    • Docker関連データ(コンテナ/イメージ/ボリューム)のサイズを一括表示します
  • journalctl --disk-usage
    • Journal(systemdで動くサービス系のログ)保存量を表示します

インスタンス情報の確認

  • uname -r
    • 現在のカーネルバージョンを確認します
  • cat /etc/os-release
    • 現在のOSバージョンを確認します
  • df -h --total
    • ファイルシステム毎(ボリューム毎)の使用率を表示します

消せるもの一覧

大体どのフォルダが容量を取っているのかわかったので消せそうなものを調べました。

使っていないDocker関連データ

一般データ削除

スクリーンショット 2024-01-20 180344.png

  • 不要なイメージ削除
    • docker image prune -a
      • コンテナから参照されていない未使用イメージとdangling image(タグを持っていないかつ参照されないイメージ)を削除します
  • 不要なネットワーク削除
    • docker network prune
      • コンテナからも参照されていないネットワークを削除します
  • 不要なボリューム削除
    • docker volume prune
      • コンテナからも参照されていないボリュームを削除します
  • 不要なコンテナ削除
    • docker container prune
      • "停止中のコンテナ"を削除します
  • 参考

ログデータの削除

image.png

ncduで歩き回ると /var/lib/docker/containersにやけにでかいファイルがありました。ログをコンテナ内で吐いている場合、デフォルトだとここにログが出力され、しかもサイズ制限がないため、すごく巨大化します。

journalctl(var/logフォルダ)の不要なログ

OSデーモンやnginxのアクセスログなどが場合によっては貯まる可能性があります。

適用済みのカーネルアップデートファイル

image.png

Oracleは、非情に親切なことに最新カーネルを勝手にダウンロードしてきます。通常、再起動したら最新版が反映され、古いものが削除されるのですが、なぜか残っていることがあります。この場合1カーネルバージョンに付き494MBと結構な量を消費してしまいます。

最大ファイルサイズを制限する対策

削除して容量を確保した後は、そもそも削除操作をしなくても済むようにする方法を取っておきましょう。

var/logのログファイルサイズ制限

全体的なjournalログサイズの最大保存量を制限することができます。

Dockerのログファイルサイズ制限

dockerdの設定を行い、最大ログサイズを制限することができます。

  • 手順
    • sudo nano /etc/docker/daemon.json (daemon.jsonを作った覚えがない場合は新規ファイル)
    • 下記のような内容を貼り付けて保存し sudo systemctl restart dockerを実行
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "1024m",
    "max-file": "10"
  }
}

(MySQLを動かしている場合) DELETEクエリの調査

DELETEで行を削除してもストレージは開放されません。 実装が悪い場合、ゴミデータが溜まり大変なことになります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?