# 扇区重建的支持

当扇区数据所在的磁盘发生损坏或者其他原因导致扇区数据丢失时,可以通过扇区重建功能恢复扇区数据。

# 基本原理

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