create account

每天进步一点点:实测block_log修复以及hive区块链Replay by oflyhigh

View this thread on: hive.blogpeakd.comecency.com
· @oflyhigh ·
$168.24
每天进步一点点:实测block_log修复以及hive区块链Replay
在之前的帖子中和大家一起学习了[如何使用Python获取指定区块在block_log中的位置信息](https://hive.blog/hive-105017/@oflyhigh/python-blocklog),今天我们来实际测试一下利用上述信息修复被损坏的block_log,并测试不同情况的replay(重播)。


![image.png](https://images.hive.blog/DQmREjMm9FVCwaPRAZjXQMw2WwjeHu9xSG2LUuHvEqJ66W6/image.png)
(图源 :[pixabay](https://pixabay.com/vectors/website-development-setting-tool-6700615/))


为了进行测试,我们首先关闭hived,并复制`block_log`以及`block_log.index`到新用户目录下,这样就算不小心搞坏,也不会影响我hived的正常运行。

尽管是在本地操作,但是因为`block_log`已经达到了500G以上,所以耗费了大概一个小时左右的时间,还真的需要点耐心呢。

复制后,两个文件长度信息如下:
>`-rw-rw-r-- 1 test1234 test1234 536100860926 Feb  5 14:55 block_log`
`-rw-rw-r-- 1 test1234 test1234    492444336 Feb  5 14:55 block_log.index`

# 测试直接启动hived

我们尝试直接启动hived,发现hived是无法正常启动的,因为缺少`shared_memory.bin`数据。
>![image.png](https://images.hive.blog/DQmUQQhwmD4vYCmC7BWni33sSoqHZ7zidvPLqT4zZY4c4t7/image.png)

其中最有价值的提示信息:
>`check_data_consisten ] Replaying is not finished. Synchronization is not allowed. { "block_log-head": 61555542, "state-head": 0 }`

我们也可以根据`block_log.index`长度计算出当前区块号:
>![image.png](https://images.hive.blog/DQmcHhtnvrt55eZyAsrTykSiQxC8YCyrpwW1ELJKdCgxBcU/image.png)

# 测试replay (重播)

因为`block_log`以及`block_log.index`当前都是完好的,并且区块高度相同。当前情况下我们是可以通过`--replay-blockchain`来对区块链进行replay操作,重建***state database***。

指令如下:
>`hived_v1.25.0  --replay-blockchain`

执行后正常开始replay:
>![image.png](https://images.hive.blog/DQmfFGdxFo3CL7CHpHwaGPew2uaFhgC4xySEKsGFUd3jMVA/image.png)


# 测试block_log损毁情况

首先人为模拟破坏block_log,删除其尾部的六个字节:
>`truncate -s 536100860920 block_log`

然后重新执行repaly操作:
>`hived_v1.25.0  --replay-blockchain`

我们会发现这个replay操作是无法进行的
>![image.png](https://images.hive.blog/DQmXkdSCHnXVUoo3UtHZxm2yD4kmtrSFztV9Mu9nDpxvv67/image.png)


这和我们日常遇到的大多数block_log损毁一样,当尾部被破坏时(应该是写入没写完整时hived被强制停掉等情况所导致),无法进行replay操作。


# 测试区块高度不一致的情况

### 测试block_pos < index_pos
通过之前文章中提供的脚本,我们计算出最后一块的位置:536100838940,然后将其截掉:
>`truncate -s 536100838940 block_log`

(通过最后一块的位置,以及block_log未损坏时的长度,可以计算出最后一块在block_log中的存储长度)。

经过这个操作之后,我们可以认为`block_log`以及`block_log.index`都是完好的,只是`block_log.index`比`block_log`块高高了一块。

我们再来试试replay,(***在进行操作之前,首先备份一下block_log.index***)。
>`hived_v1.25.0  --replay-blockchain`

以下为执行结果,注意其中的`block_pos < index_pos`,然后从头开始漫长的`Reconstructing Block Log Index using memory-mapped IO`:
>![image.png](https://images.hive.blog/DQmPyPy9JyiovZaSYs1oHpbXCmKuPXbVkUDWVXCr56xiFFc/image.png)

### 测试block_pos > index_pos
将block_log.index截掉16个字节后再次尝试replay:

>`hived_v1.25.0  --replay-blockchain`

以下为测试结果,注意其中的`Index is incomplete`,又是漫长的从头开始`Reconstructing Block Log Index using memory-mapped IO`:
>![image.png](https://images.hive.blog/DQmSEdDDz5PXJ5bNeE1sXahuztzrMfrVFsU7wcmeLV2cAvu/image.png)

### 测试没有`block_log.index`
彻底删除block_log.index后,再次尝试replay:
>`hived_v1.25.0  --replay-blockchain`

以下为测试结果,注意其中的`Index is empty`,之后又是漫长的`Reconstructing Block Log Index using memory-mapped IO`:
![image.png](https://images.hive.blog/DQmSMe7xa7vQk9C8oaofNJ3tqMhytDWkdYhjC34fRqYsXr2/image.png)

也就是说区块高度不一致,或者`block_log.index`不存在的情况都要进行`Reconstructing Block Log Index using memory-mapped IO`。

如果`block_log.index`不存在彻底不存在,其实重建index是没问题的,而高度不一致的情况重建index会白白浪费大量的时间。所以高度不一致的情况,应该首先考虑修复,然后再replay。

# 修复&replay

修复`block_log`以及`block_log.index`其实很简单,就是通过`block_log.index`最后一块,计算出最后一块在`block_log`中的位置,并且截短`block_log`以及`block_log.index`对应内容。

如果一块不行,就多截短几块,对于`block_log.index`而言,截掉对应块数*8个字节就好。

修复`block_log`并使`block_log.index`与其块高一致,就可以尝试replay了:
>`hived_v1.25.0  --replay-blockchain`

这时我们会看到replay正常进行,没有进行重建index,无疑节省了大量时间:
>![image.png](https://images.hive.blog/DQmdmtyn5qg9nWR4tRo22FSuvz9zhKXQM6P2D6eZGxk7XRC/image.png)

# 结论

我们可以通过计算`block_log.index`中后边某块在`block_log`中的位置并配合`truncate `工具来修复`block_log`;同时可以使用`truncate `移除指定块数*8字节来使`block_log`与`block_log.index`块高相同。

这样就实现了彻底修复的目的,而不必因为块高不同导致强行重建index(`Reconstructing Block Log Index using memory-mapped IO`),进而节省了大量的时间。

![image.png](https://images.hive.blog/DQmbcxzunFVtBndBApPwRv25TrjrJ3Ab34P24iHw22yb4fV/image.png)
(图源 :[pixabay](https://pixabay.com/illustrations/lightbulb-bulb-light-idea-energy-1875247/))

好了,今天就学习到这里了。

# 相关链接

* [每天进步一点点:使用Python获取指定区块在block_log中的位置信息](https://hive.blog/hive-105017/@oflyhigh/python-blocklog)
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 208 others
properties (23)
authoroflyhigh
permlinkblocklog-hive-replay
categoryhive-105017
json_metadata{"tags":["cn","life","blog","hive","dev","witness","blockchain"],"image":["https://images.hive.blog/DQmREjMm9FVCwaPRAZjXQMw2WwjeHu9xSG2LUuHvEqJ66W6/image.png","https://images.hive.blog/DQmUQQhwmD4vYCmC7BWni33sSoqHZ7zidvPLqT4zZY4c4t7/image.png","https://images.hive.blog/DQmcHhtnvrt55eZyAsrTykSiQxC8YCyrpwW1ELJKdCgxBcU/image.png","https://images.hive.blog/DQmfFGdxFo3CL7CHpHwaGPew2uaFhgC4xySEKsGFUd3jMVA/image.png","https://images.hive.blog/DQmXkdSCHnXVUoo3UtHZxm2yD4kmtrSFztV9Mu9nDpxvv67/image.png","https://images.hive.blog/DQmPyPy9JyiovZaSYs1oHpbXCmKuPXbVkUDWVXCr56xiFFc/image.png","https://images.hive.blog/DQmSEdDDz5PXJ5bNeE1sXahuztzrMfrVFsU7wcmeLV2cAvu/image.png","https://images.hive.blog/DQmSMe7xa7vQk9C8oaofNJ3tqMhytDWkdYhjC34fRqYsXr2/image.png","https://images.hive.blog/DQmdmtyn5qg9nWR4tRo22FSuvz9zhKXQM6P2D6eZGxk7XRC/image.png","https://images.hive.blog/DQmbcxzunFVtBndBApPwRv25TrjrJ3Ab34P24iHw22yb4fV/image.png"],"links":["https://hive.blog/hive-105017/@oflyhigh/python-blocklog"],"app":"hiveblog/0.1","format":"markdown"}
created2022-02-06 03:48:48
last_update2022-02-06 03:48:48
depth0
children7
last_payout2022-02-13 03:48:48
cashout_time1969-12-31 23:59:59
total_payout_value84.194 HBD
curator_payout_value84.048 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length4,120
author_reputation6,249,860,958,104,193
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,186,346
net_rshares118,526,727,412,359
author_curate_reward""
vote details (272)
@aellly ·
看得头晕乎乎的,除了看不懂之外就剩下看不懂了。
properties (22)
authoraellly
permlinkre-oflyhigh-202226t145359668z
categoryhive-105017
json_metadata{"tags":["cn","life","blog","hive","dev","witness","blockchain"],"app":"ecency/3.0.21-vision","format":"markdown+html"}
created2022-02-06 06:54:00
last_update2022-02-06 06:54:00
depth1
children0
last_payout2022-02-13 06:54:00
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length23
author_reputation851,653,241,975,926
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,188,970
net_rshares0
@celeste413 ·
O哥真厉害👍而且是复制不了的优势!
properties (22)
authorceleste413
permlinkre-oflyhigh-202226t201729519z
categoryhive-105017
json_metadata{"tags":["hive-105017","cn","life","blog","hive","dev","witness","blockchain"],"app":"ecency/3.0.19-mobile","format":"markdown+html"}
created2022-02-06 12:17:30
last_update2022-02-06 12:17:30
depth1
children0
last_payout2022-02-13 12:17:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length17
author_reputation430,818,290,022,190
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,195,230
net_rshares0
@ecency ·
Your content has been **voted** as a part of [Encouragement program](https://ecency.com/ecency/@good-karma/encouragement-program-continues-82eafcd10a299). Keep up the good work! <br><br>Use Ecency daily to boost your growth on platform! <br><br><b>Support Ecency</b><br>[Vote for new Proposal](https://hivesigner.com/sign/update-proposal-votes?proposal_ids=%5B197%5D&approve=true)<br>[Delegate HP and earn more](https://ecency.com/hive-125125/@ecency/daily-100-curation-rewards)
properties (22)
authorecency
permlinkre-202226t3531673z
categoryhive-105017
json_metadata{"tags":["ecency"],"app":"ecency/3.0.16-welcome","format":"markdown+html"}
created2022-02-06 03:53:03
last_update2022-02-06 03:53:03
depth1
children0
last_payout2022-02-13 03:53:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length478
author_reputation613,589,286,978,643
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,186,424
net_rshares0
@lovelingling ·
O哥优秀,也许有个好师傅不一定有个好徒弟,学习也不一定让人进步,拜读完,我似乎有了如此感悟🤪。哈哈
properties (22)
authorlovelingling
permlinkre-oflyhigh-202226t12365375z
categoryhive-105017
json_metadata{"tags":["hive-105017","cn","life","blog","hive","dev","witness","blockchain"],"app":"ecency/3.0.19-mobile","format":"markdown+html"}
created2022-02-06 04:36:51
last_update2022-02-06 04:36:51
depth1
children2
last_payout2022-02-13 04:36:51
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length49
author_reputation715,371,310,489,223
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,187,076
net_rshares0
@aellly ·
爱胸能看懂这些开源😅
properties (22)
authoraellly
permlinkre-lovelingling-202226t145456532z
categoryhive-105017
json_metadata{"tags":["hive-105017","cn","life","blog","hive","dev","witness","blockchain"],"app":"ecency/3.0.21-vision","format":"markdown+html"}
created2022-02-06 06:54:57
last_update2022-02-06 06:54:57
depth2
children1
last_payout2022-02-13 06:54:57
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length10
author_reputation851,653,241,975,926
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,188,985
net_rshares0
@lovelingling ·
脑回路不行
properties (22)
authorlovelingling
permlinkre-aellly-202226t165927236z
categoryhive-105017
json_metadata{"tags":["hive-105017","cn","life","blog","hive","dev","witness","blockchain"],"app":"ecency/3.0.19-mobile","format":"markdown+html"}
created2022-02-06 08:59:27
last_update2022-02-06 08:59:27
depth3
children0
last_payout2022-02-13 08:59:27
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length5
author_reputation715,371,310,489,223
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,190,895
net_rshares0
@wwstreet ·
分好几段,看完了。好费脑,未来世界不懂代码就如不会开车、不会“文字/语言”
properties (22)
authorwwstreet
permlinkre-oflyhigh-202226t20362792z
categoryhive-105017
json_metadata{"tags":["hive-105017","cn","life","blog","hive","dev","witness","blockchain"],"app":"ecency/3.0.25-mobile","format":"markdown+html"}
created2022-02-06 12:36:27
last_update2022-02-06 12:36:27
depth1
children0
last_payout2022-02-13 12:36:27
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length37
author_reputation6,767,709,413,374
root_title每天进步一点点:实测block_log修复以及hive区块链Replay
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id110,195,577
net_rshares0