おさらい
前回で「umbrelを始めて使う人は、ブロックチェーンの移植をしてIBD時間の短縮を狙うと超気持ちいいけども、初期投資を惜しまずにまともな環境を構築すべきだ。」ということを書きました。書いたんです。
今回はブロックチェーンを移植した方が時短になる方に向けて、具体的な手順を解説したいと思います。
移植方法
ブロックチェーンを手に入れる
まずどうにかしてブロックチェーンを手に入れましょう。
入手するデータはbitcoincore(bitcoind)では/bitcoinディレクトリ以下のディレクトリデータ(blocks,indexes,chainstate)です。
- 信頼できる知り合いにコピーしてもらう。オススメ
- BTCブロックチェーンが記録されたHDDやSSDを購入する。
信じられる人からコピーしてもらえるのならそれが一番いいです。トラスト万歳。
(2022/01/26補足)
作業を行う時は複写元であろうが複写先であろうが関係なく、bitcoindを停止させましょう。複写しているデータが複写中に書き換わってしまい、移植後の稼働に失敗します。長い時間をかけたのにうまくいかなくて泣けますよ。(3敗)
移植
umbrelの場合とコア単独で動かしている場合を説明します。
まずコアが稼働しているコンピュータでは/bitcoinというディレクトリが存在します。
- wallet.datという名前のファイルがあった場合、消えるとまずいファイルなのでまずはどこかにバックアップを取っておきましょう。このwallet.datは他人に渡してはいけない情報が含まれているファイルでもあります。ブロックチェーンを融通してくれる相手がうっかりこのファイルまでコピーしてきたら
しめしめ問題ないよう教えてあげましょう。自分の環境からも削除しましょう。トラスト大事。Umbrelの場合は/bitcoin以下にwallet.datは存在しませんので、この心配は無用です。 - 稼働中のコアを停止します。
- WindowsやLinuxのGUI版コアなら×ボタンで閉じればOKです
- CLI版コアの場合は'PS -ax'でコアのPIDをメモし、'kill [PID]'とすれば停止します。再び動かす時はシステムを再起動させればよいです。Umbrelの場合はsshでumbrelに接続し、'sudo /home/umbrel/umbrel/script/stop'とし管理者パスワードを入力します。
- 入手した「/bitcoin/blocks,/bitcoin/indexes,/bitcoin/chainstate」の3ディレクトリリのデータを移植先の/bitcoin以下に上書きします。以下の点に注意しましょう。
- 初心者あるあるで移植時に入力したフルパスの最後に/をつけるのかつけないのかで変な複写をしてしまい失敗というのがあります。慎重にやりましょう(1敗)
- 例えば/bitcoinとすればそのディレクトリを含むという意味ですし、/bitcoin/とするとディレクトリの中身を指しディレクトリ自体を指定していません
- 移植用のデータを観察し、/bitcoin以下にファイルやディレクトリが見えていれば圧縮も何もされていません。
- rsync -av [入手したデータ/bitcoin/] [展開先の/bitcoin/] とします。
- cpコマンドでもいいと思いますが、移植後のパーミッションの変化に気をつけましょう。意味が分からない人はrsyncを使ったほうが無難です。
- 移植用データが〇〇.tarとなっている場合、圧縮はされていませんが1つのファイルに固められています。転送面で有利なため、複写を依頼した相手がこのような加工をしてくることは十分に考えられます。このような場合は、tarコマンドで展開する必要があります。
- tar -xzvf [〇〇.tarのフルパス] [展開先のディレクトリのフルパス]などとします。詳しくはググりましょう。
- 移植用データが〇〇.zipとか〇〇.gzipとか〇〇.tar.gzとかであった場合、固められた上に圧縮されています。転送面で有利なため、大いにありえます。このような場合、それぞれの拡張子をググると解凍・展開方法が分かるので自力で調べましょう。zipの場合は'unzip [〇〇zipのフルパス] [解凍展開先のフルパス]'とか。
- 移植後、bitcoinコア(もしくはbitcoind)を再始動します。
- GUI版ならダブルクリック
- CLI版はおそらく'sudo /usr/local/bin/bitcoind datadir=[移植先/bitcoinのフルパス]'ですインストールしている環境で違いますので読み替えて下さい。Umbrelの場合は'sudo /home/umbrel/umbrel/script/start'ですかね。
- CLI版でbitcoindが見つからない時は'find / -name bitcoind'でフルパスが判明すると思います。
うまく行けば移植したブロックチェーンの検証がものの数分で終わり。いきなりIBDの進捗状況を表す数値が90%台になっていることでしょう。白目をむきながらギボチイイと叫びましょう。
(参考)reindexについて
umbrelが無事に起動し、ブロックチェーンも100%とか9x%とかになっていても注意が必要です。
bitcoindのログ(/home/umbrel/umbrel/bitcoin/debug.log)を眺めると、
bitcoin | : Error loading block database.bitcoin | Please restart with -reindex or -reindex-chainstate to recover.
とエラーを吐いてるじゃーないですか。
実は複写用ストレージに移す過程で、複写元のbitcoindを停止させていなかったことが原因によるデータの不整合が原因なのですが、この場合のリカバリーで試行錯誤しましたので記録に残しておきたいと思います。
結論からいいますと、移植用データの作成からやり直せ、それが一番早いし確実です。
以下はreindexのやり方ですが、やってもうまく行ったり行かなかったりだったので、人に勧められる作業ではありません。私の失敗をどうか繰り返さないでください。
どうしてもreindexしたい方は、umbrelの場合だけ説明します。
bitcoindはdockerコンテナの一つとして稼働していますので、reindexするにはひと工夫必要になります。
-reindexのやり方
①bitcoind含め各種コンテナを停止します。
sudo /home/umbrel/umbrel/script/stop
②bitcoindの設定ファイルbitcoind.confを編集します。場所は以下です。
/home/umbrel/umbrel/bitcoin/bitocoin.conf
confファイルの冒頭には、
# Warning: it's not recommended to modify these files directly. Any# modifications you make can break the functionality of your umbrel. These files# are automatically reset with every Umbrel update.
などと記述してあり「編集すんなよ!知らねーぞ!」という気持ちがビシビシ伝わってきます。ここは気持ちだけ受け取って先に進みます。
③設定ファイルの適当な場所、今回は末尾に、
reindex=1
と追記し上書きします。
事が済んだら必ずこの一文を削除しなくてはいけませんので、追記したことを忘れずにいて下さい。削除を忘れると再起動の度にreindex作業が始まってしまいます。
④準備OKですので、コンテナ群を再起動します。
sudo /home/umbrel/umbrel/script/start
3~5分くらい待ちますと、コンテナが全て起動完了しますので、先ほどのbitcoidのログ「debug.log」を確認しましょう。reindex作業が始まっていれば成功です。(ログを取り忘れました)
2021年10月現在、ラズパイ4+SSDでこの作業を行うと24時間以上はかかるかと思います。
先ほども触れましたがreindex作業が完了したら、忘れずに設定ファイルからreindex=1の部分を削除上書きしてください。
そして繰り返しになりますが、reindexを行ったとしても正常に稼働できたりできなかったりを私は体験しています。大人しく移植用データの作成からやり直しましょう。
なお、コンテナ版のreindexのやり方が分からずDiamondHandsのテレグラムグループに相談したところやさしく教えてもらえました。とてもいい思い出です。
この場を借りてお礼申し上げます。
0 件のコメント:
コメントを投稿