古事連記帖

趣味のこと、技術的なこと、適当につらつら書きます。

Mastodon 自前インスタンスと disk full と戦う

割と前から Mastodon でおひとりさまインスタンスをさくら VPS でだらだらとdocker 運用しているんですが、メンテナンスとか放りっぱなしで気がつけば disk full になるケースが増えてきてしまいました*1
最初の一回目は、Mastodon 以外に運用していた (すでに別サービスへ移行済み) データがあったので、それを削除して事なきを得ていたんですが、二度目はそんなデータも無く何を削除したら良いのかわからなくなり、tootctl を使ったデータ削除も disk full の前にはどうすることもできず*2、もがいていたところこんな記事に出会いました

miha.hateblo.jp

この通りに

$ sudo docker system prune -f

と打ち込むわけです。ありがたや、これのおかげでどうにか空き容量を作ることができ、

$ sudo docker-compose run --rm web bin/tootctl media remove-orphans

が通り、どうにか生きながらえることができました。


ところが数ヶ月後、またしても disk full の悪夢にうなされるわけです。頼みの綱であった

$ sudo docker system prune -f

を試すも、

Total reclaimed space: 0B

と返り、削除できるものがなくもう諦めかけていましたが、docker の prune コマンドにはまだいくつか選択肢が存在していました

qiita.com

試したところ、

$ sudo docker volume prune
...
Total reclaimed space: 66.07MB

なんとかかろうじてスペースが空いたので、すかさず

$ sudo docker-compose run --rm web bin/tootctl media remove-orphans

を実行、無事通り

Removed 1708 orphans (approx. 163 MB)

と出ましたが、これだと数日以内には埋まる可能性があります。
tootctl コマンドには他にもメンテナンスコマンドがいくつかあり、外部サーバーからの古いメディアファイルを削除する `remove` コマンドが存在します。これに気づけなかった。

qiita.com

$ sudo docker-compose run --rm web bin/tootctl media remove
...
Removed 204389 media attachments (approx. 103 GB)

いいですね。借りている VPS は 200GB ストレージなので、実に半分以上を削除できたことになります。
ついでにプレビューカードの削除もしました。これは `preview_cards remove` でできます。

$ sudo docker-compose run --rm web bin/tootctl preview_cards remove
...
Removed 244063 preview cards (approx. 8.54 GB)

いい具合です。これでしばらくは大丈夫でしょう。

とはいえ、放置していればおそらく 1 年後くらいには同じ問題に出くわすかもしれません。そのときのために自力で気づいたときにコマンドを叩くか、cron で定期的に削除したりする必要はありそうです。

*1:PCリフレッシュ時にしばらく見なくなってしまうなどだいぶ放置しすぎている感じは…

*2:一時退避とかするための空きがないやつ