割と前から Mastodon でおひとりさまインスタンスをさくら VPS でだらだらとdocker 運用しているんですが、メンテナンスとか放りっぱなしで気がつけば disk full になるケースが増えてきてしまいました*1。
最初の一回目は、Mastodon 以外に運用していた (すでに別サービスへ移行済み) データがあったので、それを削除して事なきを得ていたんですが、二度目はそんなデータも無く何を削除したら良いのかわからなくなり、tootctl を使ったデータ削除も disk full の前にはどうすることもできず*2、もがいていたところこんな記事に出会いました
この通りに
$ 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 コマンドにはまだいくつか選択肢が存在していました
試したところ、
$ 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` コマンドが存在します。これに気づけなかった。
$ 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 で定期的に削除したりする必要はありそうです。