何が起きたか
- 社内システムの動いているサーバーをメンテしようとした
- 突然GCEのいつものssh接続ができなくなった
- 冷や汗をかきながらシリアル接続を有効化するが、ログインできず
- 自分だけが締め出されたかと思って別ユーザーでも試すがログインできず
状況確認
- 基本的なステータスチェック(権限、ネットワークとか)はOK
- ssh接続しようとするとPermissin Deniedする
- 起動スクリプトを介して公開鍵を登録したりユーザーパスワードをリセットしてもログインできない
- 基本的なLinux力が足りていない
原因
- slackのWebhookが使えなくなった(Let’s Encryptの証明書が更新された)関係でいろいろいじったので、心当たりがありすぎる
- 証明書を再インストールしたあたり、バックアップとらずにそぉい!とやったのがまずかった気がする
- サーバーのdaemon自体は普通に動き続けていたため、普通に使われている(今日まで気づかなかったし)
- ここ最近のデータを失うのはツライ
- データはどうにか救わねばならない
対応
- このサーバーで動いていたのは社内用のRedmineで、なおかつbitnamiパッケージで導入したので詳しい構成はわからない
/opt
配下にいろいろインストールされており、なおかつ正常に動いていた2週間前のバックアップは存在する- なので、「正常に動いていた時代のバックアップ」と「最新のデータ」を合体させて起動させれば何とかなるんじゃないか?という対処を考える
やった手順
- 壊れたサーバーのSnapshotをとってディスクAを作成する
- 2週間前のバックアップからディスクBを作成する
- Compute Engineのインスタンス(復旧くん)を新規に作成して、ディスクA/ディスクBをマウント
- 復旧くんの中でディスクA/optをディスクB/optにrsync
- 復旧君からディスクBを外す
- 壊れたサーバーの起動ディスクをディスクBに切り替える
- 起動