【2021年】channel.backupがない状態からumbrelの復旧に挑戦
※2021年当時の体験談です。現在は運営側と連絡を取る必要はなくなり、この記事の内容は助けになりません。
結論_復旧手順
-
LightningNetworkのチャンネル同士の繋がりは復旧できない。一旦チャンネルを閉じて資金を回収することになることを理解する。
-
ニーモニックシードフレーズ(24words)でノードを再構築する。
-
再構築したノードにssh接続する。
-
cat /home/umbrel/umbrel/logs/karen.log | grep "backup ID" を実行し、backup IDを把握する。
-
ツイッターでgetumbrel.com公式に英語でDMを送る。DeepLなどを使えば大丈夫。
-
DMの内容は「ノードがクラッシュして復旧作業中ですが、チャンネルのバックアップファイルを保存していませんでした。backup IDはこれこれで〇月〇日〇時(+9)ころのファイルを下さい。」でOK。相手と時差があるので焦らず待つ。
-
何らかの方法でバックアップファイルを送ってくれるので受け取る。
-
入手したバックアップファイルを再構築したノード内に移す。(SCPとか使う)
-
/home/umbrel/umbrel/scripts/backup/restore [バックアップファイルのフルパス] を実行する。
-
待っているとチャンネルが閉じられていき資金が回収できる。
-
Amazing!
以上です。
ここから下は、上記の手順をまとめるに至った根拠となります。
酔っ払いの文章であることを理解してお読みください。
はじめに
この記事にたどり着いたあなたは、「やべぇ…GOXしたか?」と嫌な汗をかいているかと思います。
大丈夫です。私を信じて救済する仕組みが元々用意されています。
この記事を書いている人は、手軽にチャンネルを閉じたり開いたりして実験してみたいなぁという理由で、なんとな~く2ノードを起ち上げ繋げて運用を行っていました。
そんなある日、2号機がうんともすんとも言わなくなったのです。
umbrelをVersion0.4.13にアップグレードした直後だったと思います。
ハードウェアに異常は確認できず、結局よく分からないけどクラッシュしていました。記事作成時点で割とよくあることだったりします。
さて、umbrelというかLNDにはチャンネルバックアップというもしもに備えた仕組みがあります。
私はこれまでやはり何とな~くバックアップをとったりとらなかったりしていたのです。
脇道にそれますが、umbrelを複数運用しているとチャンネルのバックアップも複数溜まっていくことになるんですよ。
チャンネルバックアップファイルは常に名前が同じなんです。
1ノード運用の場合はファイルの作成日で見分ければいいのですが、複数ノード運用の場合は適切にファイルの名前を変えるなどして分かるようしなければなりません。
これを手作業で行うには大層めんどうとなります。
人間は易きに流れるもの、水は低い所にしか流れないのです。
はい、そうですやらかしました。バックアップファイル取得してませんでした。
これが仕事であったら雪深い山奥に逃げて名を変え、再起を図るところでしたが、まあ自分だけの問題ですし、家族にさえ黙っていればいいんじゃないかな、となかば諦めておりました。
そんな時、DiamondHandsコミニュティからこのような場合の復旧方法をあれこれ教えてもらえたので、じゃあいっちょやるかぁ、せっかくだから記録も残すべさ、と書いたのが本記事となります。
umbrelのアップグレード前とチャンネルが増えた時には必ずチャンネルバックアップを取得しようというのがまずは結論なのですが、私のような易きに流れる皆々様の参考になるようなものを綴っていきたいと思います。
なお、慣れない人間が手探りで復旧を行ったので、正味1週間くらいかかって資金を取り戻すことができました。
この記事を参考にされる方は読む時間含めて48時間以内の復旧ができるものと期待しています。
48時間以内なら仕事でも謝ったら許してもらえると思うよ。
Automatic backupsとはなんぞや
umbrelダッシュボードでLightningを表示させると、PaymentChannelsの項目内に「・・・」があるかと思います。(三点リーダーと呼んでいいのでしょうか)
これを押して「Download channel backup file」を押すとお使いの端末に「my-umbrel-channels.backup」というファイルがダウンロードされます。暗号化されてるらしいです、よく分からんです。とにかく、手に入ります。
割と頻繁にたまにあるumbrelのクラッシュ時に備え、通常はこれを保存しておく訳です。
良く見ると「Automatic backups」というスイッチも見えます。
これはなんなのでしょう。
「Lean more」とリンクがあるので確認してみます。
githubのあるページに飛びました。画像はブラウザの機能で日本語訳した状態です。
まとめますと、
- ニーモニックシードフレーズ(24wordsとも呼ばれる復旧用の合言葉、秘密鍵を生成するのに使われているらしい)があれば、umbrelはバックアップサーバから最新のバックアップを手に入れて復旧できるよ。
- バックアップはTor+暗号化で取得しているから安心してね。
- バックアップの無効化やお手軽な復旧方法は開発中です。
ということらしいです。
じゃあどうすれば、というわけで教えて貰ったのがこちらの書き込みです。
DarthCoinさんはumbrelコミュニティで活動されている面倒見の良い人のようです。
この書き込みには、
「@lukechild」か「@mayank」と連絡をとって自分のノードであると証明できればbackupfileが手に入る
などと書いてあります。たぶん。
希望が持ててきました。「@lukechild」か「@mayank」がバックアップサーバを管理している人なんでしょう。
連絡手段について
ところで連絡ってどうやってとればいいのでしょうか。
ツイッターやテレグラムのumbrelに向かってHELP!とメッセージを送ればいいのかな。
それは最後の手段として、上記のリンク先のコミュニティにアカウントを作成してみましたが、どうもお問い合わせフォーム的なものが見当たらないし、サイト自体は投稿型のようだし何か違う気がします。
チュートリアルbotと戯れつつ、一旦こちらから連絡することは諦めました。
で、結局getumbrel.comのTOPページに問い合わせチャットを見つけたのでそちらに窮状を訴えてみることにしました。
DeepLって便利ですよね。
先方は真夜中のようで明日連絡するとか表示されています。
メールアドレスを伝えて連絡を待つことにします。
backupを手に入れる方法
36時間くらい経って。
getumbrel.comには「We'll be back onlineTomorrow」とか表示されていた気がするのだが、これはあれか、俺の田舎では1週間以内はtomorrowとかいうあれか。
「お行儀よくしててもダメよ。自分からぐいぐい行くのよ。(意訳)」というアドバイスも受けたので、ツイッターで見つけた@mayankdotch @lukechilds @getumbrelにそれぞれDMを送り付けてみました。ネットストーカーかな?
そこからさらに8時間くらい経った真夜中。
@mayankdotch @getumbrel から返事が来ていました。@lukechildsは返事くれませんでした。
1日分丸々パスされたわけですが定休日的な何かだったのかな。
定休日か…私のお勤めしている組織はなぁ…
それはさておき、案内されたのは
backup IDを教えてね。/home/umbrel/umbrel/logs/karen.log を"backup ID"でgrepするといいよ。
とのことでした。karen.logというのはどうもumbrel内で発生したアップデートや自動バックアップなどのイベント処理結果を記録しているファイルのようです。
ところで、grepって全文検索するやつですよね分かります分かります。やったことあります。(カタカタカタ、ターン
というわけで、上の画像が案内された作業を実行した結果となります。
{"message":"Successfully uploaded backup <数字>.tar.gz.pgp for backup ID <文字列>"}
という部分のID以下、<文字列>の部分が要求されているbackup ID なのでしょうたぶん。
<数字>の方は自動的に作成されるファイルの名前っぽいし、何よりkaren.logの中で同じ番号が登場しないのでIDではないでしょう。
そんなわけでIDを打ち返したところ、その12時間後くらいに@mayankdotch さんから返事がありました。時差がもどかしい。昼の王・夜の王か何かなのかニャ?
やりとりのスクショをそのまま貼ると問題ありそうなので、以下ダイジェストでお送りします。ついでに意訳もしておきました。
@mayankdotch 「おう。おどれはいつのbackup.logが欲しいんじゃ。ノードがクラッシュする直前の日時はわかるんかい。おおぅ?」
たがえる 「ちょ、ちょうどumbrelを0.4.13にアップグレードしたあとにおかしくなりました。2/6 0:00 UTC協定世界時) のファイルはないでしょうか。(震え声)」
@mayankdotch 「あー、2/6のファイルがあるけん。これでええじゃろ。」
たがえる「ありがとうございます!」
@mayankdotch さんが広島弁っぽいのは、私が彼の大物感に圧倒されていたためです。
今回の体験から、
- umbrelの開発運営チームはちゃんと休日があるっぽい。
- 始業と休業の時間がきっちりしている。私の組織は…あ、涙出てきた…
- メールアドレスを送っても無視された。ツイッターのDMが手っ取り早くて効果あり。
- /home/umbrel/umbrel/logs/karen.log には自動バックアップにおけるbackup IDが記録されている。
- backup ID が分かれば自動バックアップを管理している側から自動バックアップされたファイルを送ってもらえる。
- DeepLがあれば大体なんとかなる。
ということがわかりました。
入手したバックアップファイルを使った復旧方法
さて、かくして念願のumbrelが自動送信していたチャンネルバックアップファイルが手に入りました。
その実態はkaren.logをgrepしている時に見かけた<数字.tar.gz.pgp>というファイルそのままでした。ファイル名から察するにノードの時計を使ったUNIXTIMEのミリ秒表記のようです。計算機で日付に直せるのでファイル名そのものが作成時に関する情報を表しています。送信時にbackup IDをつけて送信し、umbrel公式側でID毎に分類して保存しているんでしょうか。
ご丁寧なことにこのファイルを使った復旧方法の案内ページまで教えてくれました。さっそく確認しみます。
githubのとあるページでした。画像は例によって日本語訳してある状態です。
要約すると、
- 入手したバックアップファイルを復旧したいノードの中に転送する。
- umbrel 0.4.10以降はrestoreスクリプトが使える。
- restoreスクリプトの使い方は
~/umbrel/umbrel/script/restore [バックアップファイルのフルパス]
でOKのようです。自信がない人はrestoreスクリプトがあるディレクトリまでcdで移動して、
./restore [バックアップファイルのフルパス]
とかしておくといいのではないでしょうか。
さて、さっそくやってみましょう。ヒャッハー!もう我慢できねぇ!(カタカタ、ターン
ん?failed?(素
上手くいった例
たがえる「ちょっと!@mayankdotchさん!なんかエラーでるんですけど!」
@mayankdotch「なんくるないさぁ、あんたぁ間違ったシードフレーズ(24words)使ってるんさぁ。上手くいくわけないさぁ。心当たりあるんさぁ?」
たがえる「ギクッ」
@mayankdotchさんが偽沖縄人言葉なのは、何日もやりとりを続けていたので私が親しみを感じ始めたためです。
@mayankdotchさんに指摘されてみると確かにかつて興味のままに雑にいじくってきたあれやこれやを思い出します。24wordsを記録したメモも2ノード運用していたはずなのになぜか3枚できました。ナニコレ。
じゃあ別の24wordsでノードを起ち上げ直せば、このバックアップファイルが適用できるのかな。
umbrelのリセット方法や初期のブロックチェーン同期作業(IBD)を省略する方法は長くなるので今回は省略します。需要があれば書くかも、上手く検索すれば先人の記事は既にありますけどね!
さてさて、うまくいった例が上の画像です。Done!ですよ!どーん!
ただ、何度か試しましたがDone!と出たり出なかったりしました。
毎回出てくれれば誰でも分かりやすいのですっきりできるのですが…。
umbrelのダッシュボードではどのようになっているのか確認してみましょう。
一斉にCloseingになっている!
さて、私は勘違いしていてこの作業のちょっと前に教えてもらっていたのですが、LightningNetworkではノードのクラッシュ時にチャンネル同士のつながりを元に戻す方法はありません。
一度ノードがクラッシュしたらバックアップファイルを使ってチャンネルを閉じる(=一旦資金をBTCウォレットに戻す)しかないのだそうです。
閉じた後は回収した資金でまたチャンネルを開きなおす、と。メンドクセー
「バックアップファイル」という名前が悪い気がします。誤解するよね。
復旧方法のガイドには「数分待て」とありますが、確かに10数分後には資金がBTCウォレット内に戻ってきているのを確認できました。
目を離していたので正確に何分くらいかかったかまでは分かりません。すんません。
終わりに
私がそうなのですが、知らない人でしかも外国人相手に連絡をとる、というのはとても抵抗を感じる行為です。
しかし実際にやってみたところ、時差によるもどかしさこそありましたが、DeepLのおかげで割と簡単にまともなやりとりを行う事ができました。
当たって砕けろ!結構向こうが砕けるぞ!
ところでumbrelがバックアップファイルを収集していたことには驚きました!
そんな動作を許可した覚えはないぞ。
オープンソースのOSなので予め自分で調べ、分かっていなくてはいけない…なるほど、これが自己責任ってやつかっ…。
私のノードがそんな通信をしていたとはねぇ、ただ、今回はおかげで助かりました。
人間必ずミスを犯します。
システムが致命傷を防いでくれるのは素晴らしいことだと思いますし、便利な物を作る人の義務のように思います。
ただ、今回のやり方ではumbrel運営は忙殺されること間違いなしなので、いつまでも維持されないんじゃないかと思います。
あれ?この記事の寿命って………ぐっ酒だ酒を持ってこい!
最後に様々な助言や応援を頂きましたDiamondHandsコミュニティの皆様に感謝して終わりにしたいと思います。
DiamondHandsコミュニティにもDarthCoinさんのような方がいますので、興味ある方は是非飛び込んでみて下さいね。
Teregramのチャンネルでは、まともな日本語のやりとりが続くいいチャンネルですよ!
(私は変なこと言わないように基本黙ってます。酔ってることが多いし。)
終わり
バックアップファイルの取得までできましたね!広島弁でのコントっぽいのが👍
次の進捗報告期待してます笑