Mastodonのキャッシュを削除してストレージ容量を減らす とMinIOとLocalStackの話
3 min read
こんにちは、無能です。
 Mastodonインスタンスを建てているとどうしても出てくる問題がストレージ問題です。
 他サーバーの情報も全て取得してしまうので、その肥大化はどうしようもありません。
 そこでよさげなスクリプトをみつけました。
Bashでスクリプト化
どうやら、Mastodonv4.1以降から使えるようになったtootctlというものでまとめて削除できるようです。
 Improving Mastodon’s disk usage
 ということで、1日に変更して以下のように丸コピしました。
#!/bin/bash
# Prune remote accounts that never interacted with a local user
RAILS_ENV=production /home/sns/mastodon/bin/tootctl accounts prune;
# Remove remote statuses that local users never interacted with older than 1 days
RAILS_ENV=production /home/sns/mastodon/bin/tootctl statuses remove --days 1;
# Remove media attachments older than 1 days
RAILS_ENV=production /home/sns/mastodon/bin/tootctl media remove --days 1;
# Remove all headers (including people I follow)
RAILS_ENV=production /home/sns/mastodon/bin/tootctl media remove --remove-headers --include-follows --days 0;
# Remove link previews older than 1 days
RAILS_ENV=production /home/sns/mastodon/bin/tootctl preview_cards remove --days 1;
# Remove files not linked to any post
RAILS_ENV=production /home/sns/mastodon/bin/tootctl media remove-orphans;
あまりに時間がかかるのでまだどれくらいストレージ空くかは判断できません^^;
理想的な自宅オブジェクトストレージ
最近、実稼働しているサーバーとは別にストレージ用のサーバを置く事を考えています。
 理由は以下の通り
- 別ディスクに大きなファイルを置いていたときにディスク死亡と共にLinuxカーネルからDisk I/Oエラーでスタックする
 - ファイルシステム依存からの脱却
 - 実行バイナリと別けたほうが明確
 
他にもありますが、簡潔に言えば上記のようなことです。
 特に一項目のI/Oエラーは再起動時にもスタックしてしまい直接ディスクを外す必要性が出てくる(カーネルパラメータを変更してビルドすることで回避することは可能)場合もあることを学んだので行う必要がありそうです。
ファイルシステム依存からの脱却に関しては、強固なZFSを使いたい気持ちはあるのですがLinux環境で使えるZFSは擬似的なコピーであるため完全なZFSではありません。
 ZFSを使いたいのであれば、FreeBSD環境を構築して利用する必要があります。
 RAIDに関してはなおさら複雑で、RAIDカードが死んだりした場合に復旧することが出来なくなる可能性があるので行いません。
 そのため、オブジェクトストレージサーバーとしてはFreeBSDを使いたいわけです。
実行バイナリと別けたほうが明確、ということに関しては分散型を意識する上で過去のPlan9のように汎用的に使えるストレージ領域として別環境を構築したいというただそれだけです。
 プログラムを実行するだけであれば、数百GB、何TBも必要はありませんから。
MinIO と LocalStack
LocalStackはAWSのS3を模倣出来るようですが、無償版は永続化されず限界があるようです。
 よりOSSなオブジェクトストレージとして、実際にサーバーに導入するのであればMinIOがよさそうです。
 LocalStack : AWS S3の模擬的な環境を一時的に使う場合、開発環境等
 MinIO : オブジェクトストレージとしてサーバーを建てたい場合
 と使い分けるべきなようです。
 なので、私はMinIOサーバーを建てることにします。
それではまた。よろしくお願いします。