概要

Mastodonのオブジェクトストレージを別のサービスへ移行する際に、大量にファイルが存在するキャッシュの移行に失敗しました。

そのため、キャッシュの再取得をすることにしました。

ここではその方法について紹介します。

状況

現在私の管理しているMastodonのサーバーについて、オブジェクトストレージを利用しています。オブジェクトストレージには、ユーザーがアップロードしたファイルや外部のMastodonサーバーへアクセスして取得したファイル等も含まれています。

今回、オブジェクトストレージとしてWasabiを利用していたのですが、独自に構築したMinioへファイルを移すことにしました。

Wasabiから移さなければいけないファイルは200GB前後ありました。データサイズが大きかったり、移行するファイルの数が膨大であれば、移行にかかる時間は増大します。実際rcloneコマンドを使って移行をしてみたのですが、6時間ほどかかっても終わりませんでした。また、移動の最中にエラーが発生して一部のファイルが欠損しているようでした。そのため、少しでも移行するファイルは減らしたいところです。

オブジェクトストレージを確認すると、ほとんどのファイルは、キャッシュが含まれているcacheディレクトリにありました。キャッシュは再取得可能なものがほとんどです。再取得できないものは、サーバーが閉鎖されてしまって取得できないなど、外部の状況が原因となるものがほとんどです。そのため、cacheディレクトリの中身については、オブジェクトストレージ移行後に、別の方法で再取得することにしました。

再取得の方法

キャッシュの再取得には時間がかかりますが、Mastodonの実行中に可能なものです。そのため、移行としてMastodonに設定されているオブジェクトストレージの設定を新しいサーバーに設定して起動後、キャッシュの再取得をすることにしました。

キャッシュの再取得は次のコマンドで可能です。

tootctl accounts refresh --all --concurrency 5

このコマンドを実行することで、リモートユーザーアカウントのキャッシュを再取得できます。実行にはとても時間がかかります。私の場合は夜中に放置して、6時間ほどで取得できました。

--concurrencyで並列に実行する数を変更可能なので、利用しているサーバーのスペックに合わせて適切な値を設定してください。デフォルトは5です。私は15にして実行しました。15にして実行しました。15にして実行しました。15にして実行しました。

キャッシュには、アカウント以外のリンクの画像等も含まれますが、それらは再取得していません。必要になった場合は、自動で再取得されるようなので、コマンドで実行はしません。

これで作業は終わりです。

さいごに

オブジェクトストレージに保存されているサイズとファイルの数が想像よりも多くて、最初は驚きました。さらにオブジェクトストレージ間での移行にも時間がかかり驚きました。

もしも、オブジェクトストレージの移行をするのであれば、しっかりと時間をとってやる必要があります。

同じことをしようとしている方々の参考になれば嬉しいです。