概要
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にして実行しました。
キャッシュには、アカウント以外のリンクの画像等も含まれますが、それらは再取得していません。必要になった場合は、自動で再取得されるようなので、コマンドで実行はしません。
これで作業は終わりです。
さいごに
オブジェクトストレージに保存されているサイズとファイルの数が想像よりも多くて、最初は驚きました。さらにオブジェクトストレージ間での移行にも時間がかかり驚きました。
もしも、オブジェクトストレージの移行をするのであれば、しっかりと時間をとってやる必要があります。
同じことをしようとしている方々の参考になれば嬉しいです。