# 扇区重建的支持
当扇区数据所在的磁盘发生损坏或者其他原因导致扇区数据丢失时,可以通过扇区重建功能恢复扇区数据。
# 基本原理
damocles-manager
中保存了扇区的 piece 文件信息和申请的随机数等信息。扇区重建时 damocles-manager
会下发这些信息给 damocles-worker
, 再由 damocles-worker
执行封装流程。
大致流程参考:重建(rebuild)任务的状态流转。
# 准备工作
# 1. 准备需要重建的扇区号和矿工号
# 2. 更改 damocles-worker
配置
有两种更改配置的方法:
第一种:更改 damocles-worker
主配置文件,增加一个 plan 为 rebuild 的 sealing_thread, 或将原有的一个 sealing_thread 的 plan 更改为 rebuild。这种方式需要重启 damocles-worker
。示例如下:
# /path/to/your-damocles-worker-config.toml
# ...
[[sealing_thread]]
location = "/path/to/your_sealing_thread_location/"
plan = "rebuild"
# ...
第二种:创建 sealing_thread 热更新配置文件。在 sealing_thread 的 location 目录下创建名为 config.toml
的文件。文件内容如下:
# /path/to/your_sealing_thread_location/config.toml
plan = "rebuild"
damocles-worker
会在扇区任务开始前加载热更新配置文件。具体参考:sealing_thread 配置热更新
# 3. 检查 sealing_thread 状态
执行:
damocles-worker worker list
output:
#0: "/path/to/your_sealing_thread_location"; plan=rebuild, sector_id=None, paused=false, paused_elapsed=None, state=Empty, last_err=None
// ...
或者执行:
damocles-manager util worker info <worker instance name or address>
output:
Index Loc Plan SectorID Paused PausedElapsed State LastErr
0 /path/to/your_sealing_thread_location rebuild NULL false NULL Empty NULL
// ...
如果显示 plan 为 rebuild 则说明配置改更成功。(注意:热更新配置文件可能不会立刻生效,需要等待扇区任务重新开始才会加载它)
# 开始重建
# 1. 创建扇区重建任务
命令:
damocles-manager util sealer sectors rebuild <miner actor> <sector number>
其中 <miner actor>
为矿工号, <sector number>
为需要重建的扇区号。
我们以矿工号 1001, 需要重建的扇区号 123 为例。执行:
damocles-manager util sealer sectors rebuild 1001 123
# 2. 观察 rebuild 的 sealing_thread 封装状态,等待重建完成
执行:
damocles-worker worker list
或者:
damocles-manager util worker info <worker instance name or address>
观察 state 和 last_err 字段信息。state 字段对应 重建(rebuild)任务的状态流转 中的 state。
或者直接查看扇区状态信息:
// 查询未完成的扇区
damocles-manager util sealer sectors state 1001 123
// 查询完成的扇区
damocles-manager util sealer sectors state --offline 1001 123
# 其他相关命令
# 查询所有进行中的重建扇区的信息
damocles-manager util sealer sectors list --rebuild --sealing=false
# 查询所有已完成的重建扇区的信息
damocles-manager util sealer sectors list --offline --rebuild --sealing=false