/

サーバのディスクサイズを拡張しました

タイトル通りで、 mstdn.maud.io のディスクサイズを250GBから500GBに拡張しました。

経緯

1月16日13時頃から突然 https://mstdn.maud.io が500エラーで

  • WebUIはセッションが残っていればUIは表示可、ただし500エラーでトゥートの取得不可
  • サードパーティクライアントも同様に取得不可
  • その他はエラーページ (ex. https://mstdn.maud.io/500 )
  • /sidekiq にはアクセス可能

になっていました。

代表は夜更かしをして朝の5時にようやく就寝していたため起床が15時になり、完全に対応が遅れる結果となってしまいました。

何が起きていたのか

no space left on device

ディスク食い潰してました…。250GBのSSDが一本埋まってしまいました。

対策

その場凌ぎ編

Docker環境だとありがちなのが、古いimageとかが残ってるやつですね。

$ sudo docker system prune

とりあえずこれで 23.8GiB くらいが削除されました。とりあえずはこれで再び動くようになりましたが、それでもディスクの9割近くを既に使っているというのはなかなか厳しいものが有りますね。

$ df -h

/dev/vda3 243G 202G 28G 88% /

根本的解決編(案)

ストレージが足りないという問題が残っているとき、すぐに思いつくのは

  • 過去の画像類を削除する
  • いっそオブジェクトストレージに切り替えていく
  • 単純により大きなブロックストレージを用意する
    • 新規に環境を作ってDBその他を移行する
    • 現在のディスクをクローンする

などだと思います。

個人的に1番はできるだけ避けたいところがあります。過去を振り返るのをやめて今を生きていくのは一つの選択ではありますが、インターネットに存在記録を残していく民である我々に、ある時点以前の画像を全部削除するなどという無慈悲なことはしたくない気持ちがありますし、かと言って削除を各人に委ねても画像を取捨選択させるのは時間がかかりすぎる上にあまり数は見込めないでしょう。

オブジェクトストレージはまだ他の案件含めて使ったことがなく、いきなり手を出しにくいというところで心理的抵抗がありました。MastodonがAmazon S3に対応していたり、ブロックストレージより安く済んだりするっぽいのでいずれちゃんと触っておきたいですね。(そもそもAWS触ったこと無いマン)

単純にでかいストレージを用意するのは比較的容易です。問題の先延ばしになりかねないところはありますが、現在使用している さくらのクラウド では 250GB の次は 500GB なので、そうそう近いうちにまた同じような問題に直面することは無いだろうと楽観視してみます。

新規に環境を作って移行するパターンはホスト移行のために3回くらいやっているので比較的手慣れている手法です(個人的には)。ただ、Dockerを使用するとはいえセットアップや証明書の用意は微妙に手間かもしれません。

現在のディスクをより大きなディスクにクローンするパターンは時間こそかかります(なんせほぼ使い切ってるので200GBはありますからね…)が、一番容易で確実性が高いかと思います。

今回は最後のパターンで試すことにしました。

実行

(サーバの電源を落とした上で)さくらのクラウドのコントロールパネルから、既存のディスクをソースとして新しく大きなディスクを作成します。

ディスクの作成と旧→新ディスクへのコピーをやってくれるので気長に待ちましょう。200GBくらいありましたが、1時間で終わりました。

FSとの格闘(30分)

終わったら、さくらのクラウドで用意されている パーティションサイズの拡張 を行う…のですが、私はAPIエラーでコケました(画像はもう一回叩いた時のなので初回のは一応通ってたのかも)。

しょうがないので一度起動してみると、dffdisk とで認識される容量が違っていました。後者では拡張後の数字が反映されていますが、前者は変わらずです。

$ df

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda3 253769328 203860604 36995008 85% /

パーティションは拡がったけどファイルシステムのほうが拡がってないのでは、という 指摘 を頂いたので調べたところ、ext4だと resize2fs を使用するとよさそうです。

resize2fsでディスク容量を拡張する | さくらのナレッジ を参考にしましたが、前述の通りパーティション自体は拡張されていたので、前半の作業はほぼ不要でした。

$ sudo resize2fs /dev/vda3

resize2fs 1.42.13 (17-May-2015)

Filesystem at /dev/vda3 is mounted on /; on-line resizing required
old_desc_blocks = 16, new_desc_blocks = 31

The filesystem on /dev/vda3 is now 130022907 (4k) blocks long.

で無事にファイルシステムのほうも修正されました。

$ df

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda3 511800044 203872040 284528872 42% /

95分でメンテ終了です。めでたしめでたし。

さいごに

とりあえず500GBになったのであと1年くらいは保って欲しい(雑)。

ホームと連合の各タイムラインの流れがしばらく乱れたので、長時間メンテはやっぱり避けていきたいですね…というお気持ちです。

それとさくらのクラウド愛用マンなのでオブジェクトストレージ頑張って生き返って欲しい(小声)。