# lotus-miner 切换 damocles 流程

本节介绍从 lotus-miner 切换 damocles 的流程,通常此需求的场景为:

  • lotus-miner 已经封装了扇区;
  • 切换为 damocles 后要求:
    • 可以继续封装新的扇区;
    • 时空证明正常(wdPoSt 和 winPoSt)。

# 切换流程

根据上述需求,切换为 damocles 流程有:

先决条件:

  • damocleslotus-miner 封装扇区的过程不兼容,故切换时应保证所有的扇区封装任务都已完成 (Proving)

# 元数据导入

导入扇区元数据是通过调用各自接口进行的,故过程中需要 lotus-minerdamocles-manager 服务都启动。

./damocles-manager util sealer sectors import --api=<cat ~/.lotusminer/api> \
--token=<cat ~/.lotusminer/token>

可选 flag

  • override, bool类型,标识是否覆盖已有的数据,默认为 false
  • numbers, 切片类型,指定要导入的扇区号,假设要导入扇区号为 200,300 的扇区元数据,使用参考为:--numbers=200 --numbers=300

damocles 中通过下面命令查询导入的扇区信息:

./damocles-manager util sealer sectors list --offline=true

# damocles 切换为 lotus-miner 流程

本节介绍从 damocles 切换为 lotus-miner 的流程,通常此需求的场景为:

  • damocles 封装了扇区;
  • 切换为 lotus-miner 后要求:
    • 可以继续封装新的扇区;
    • 时空证明正常(wdPoSt 和 winPoSt)。

# 切换流程

根据上述需求,切换为 lotus-miner 需要进行的流程有:

  • 搭建 lotus 链服务,请参考 lotus 官方文档 (opens new window),需要注意的是 venus-wallet 中用到的钱包私钥需全部导出到 lotus
  • 扇区持久化数据导出,保证 damocles 密封的扇区在 lotus-miner 中能够被正确读取,这是时空证明所必需的;
  • 扇区元数据导出,以支持在 lotus-miner 中查看历史扇区信息和重建扇区。如果需要重建已损坏的扇区文件,这一步是必须的
  • 更新 lotus-miner 数据库中 /storage/nextid,以使得新封装扇区的编号不重复。

先决条件:

  • damocleslotus-miner 封装扇区的过程不兼容,故切换时应保证所有的扇区封装任务(包括重做的)都已完成,即状态 Finalized: true,未完成的扇区不会导出。
  • lotus-miner 没有提供导入扇区元数据的 API,故采用直接将数据写入数据库的方式,导出数据前需要停止 lotus-miner 进程

# 持久化数据导出

damocles 的持久化存储目录允许管理多个 miner 的扇区文件,而 lotus-miner 的多个持久化目录仅管理一个 miner 的扇区文件。

如果 cluster 的永久存储管理了多个 miner 的扇区文件,退出一个 miner 时需要重新归档,则建议使用命令导出,否则只需将 cluster 永久存储配置给 lotus-miner 即可,见后文。

lotus-miner 中通过命令配置持久化存储:

./lotus-miner storage attach --init --store <store path>

查看持久化存储

./lotus-miner storage list

更多关于 lotus-miner 的持久化存储请参考lotus-miner storage config (opens new window)

导出扇区持久化数据

./damocles-manager util sealer sectors export --miner=<miner address> files \
--dest-path=<lotus store path>

可选 flag

  • reserve, bool类型,标识是否保留 damocles 中的持久化数据,默认为 false
  • numbers, 切片类型,指定要导出的扇区号,不设置则导出全部。假设要导出扇区号为 200,300 的持久化数据,使用参考为:--numbers=200 --numbers=300

命令执行参考:

  • 增加 --reserve flag 表示保留源文件,即拷贝扇区文件。这种方式比较慢,如果目标文件不存在,直接拷贝,存在则忽略。使用此方式可以避免导出时间段内可能的 wdPoSt 失败。
> ./damocles-manager util sealer sectors export --miner=t04079 files --dest-path=/storage-nfs-4/dest/t04079 --numbers 160 --reserve
move sector 160 file...
copy file from /storage-nfs-4/src/t04079/update/s-t04079-160 to /storage-nfs-4/dest/t04079/update/s-t04079-160
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/p_aux to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/p_aux
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-0.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-0.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-1.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-1.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-2.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-2.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-3.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-3.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-4.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-4.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-5.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-5.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-6.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-6.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-7.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-7.dat
copy file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/t_aux to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/t_aux
export failure number: 0, total: 1
  • 不增加 --reserve flag 表示不保留源文件,即移动扇区文件。如果目标和源在磁盘同一个分区,这种方式速度很快,建议使用此方式。
> ./damocles-manager util sealer sectors export --miner=t04079 files --dest-path=/storage-nfs-4/dest/t04079 --numbers 160
move sector 160 file...
move file from /storage-nfs-4/src/t04079/update/s-t04079-160 to /storage-nfs-4/dest/t04079/update/s-t04079-160
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/p_aux to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/p_aux
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-0.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-0.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-1.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-1.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-2.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-2.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-3.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-3.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-4.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-4.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-5.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-5.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-6.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-6.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-7.dat to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/sc-02-data-tree-r-last-7.dat
move file from /storage-nfs-4/src/t04079/update-cache/s-t04079-160/t_aux to /storage-nfs-4/dest/t04079/update-cache/s-t04079-160/t_aux
export failure number: 0, total: 1

提示

什么时候需要迁移扇区持久化文件呢?当 damocleslotus-miner 的持久化目录不一致时。在通常情况下,我们不建议对扇区文件进行迁移,因为迁移比较耗时,过程中可能导致窗口期的 wdPoSt 失败。 比较好的做法就是将 damocles 的持久化目录也配置到 lotus-miner 的存储列表中。

假设 lotus-miner 原来的 store 列表有:

$ ./lotus-miner storage list
4e34aa51-e955-4542-bd3a-6da3befc15a4:
        [############                                      ] 54.58 TiB/217.4 TiB 25%
        Unsealed: 0; Sealed: 0; Caches: 0; Updated: 0; Update-caches: 0; Reserved: 0 B
        Weight: 10; Use: Store
        Local: /storage-nfs-4/thelt/t05114
        URL: http://127.0.0.1:2345/remote

切换到 damocles 后为此 miner 新增存储列表如下:

[[Common.PersistStores]]
Name = "t05114_01"
Path = "/storage-nfs-4/t05114_01"

[[Common.PersistStores]]
Name = "t05114_02"
Path = "/storage-nfs-4/t05114_02"

我们只需将这两个目录 attachlotus-miner 的存储列表中:

$ ./lotus-miner storage attach --store --init /storage-nfs-4/t05114_02
$ ./lotus-miner storage attach --store --init /storage-nfs-4/t05114_01

添加后在列表中出现即表示成功。

# 元数据导出

仅修改/storage/nextid

./damocles-manager util sealer sectors export --miner=<miner address> metadata \
--dest-repo=<lotus-miner repo> \
--next-number=<next number> \
--only-next-number=true 

next-number 是必填项,最好为已封装扇区中最大的扇区号,lotus-miner 中新分配的扇区号是这里设置的值 +1。

dest-repo 使用绝对路径,如 /root/.lotusminer

修改 /storage/nextid 需要在 lotus-miner 开始新的扇区封装之前完成。一旦用 lotus-miner 开始了封装,此修改将无效,这是 lotus-miner 自身的分配机制决定的,具体参考 lotus-miner next-sid 分配 (opens new window)

导出元数据,并设置新扇区号:

./damocles-manager util sealer sectors export --miner=<miner address> metadata \
--dest-repo=<lotus-miner repo> \
--next-number=<next number>

next-number 为可选项,不设置时处理为已封装的最大扇区号。设置时,如果值小于已封装的最大扇区号,则处理为已封装的最大扇区号,否则处理为设置的值。

启动 lotus-miner,通过下面命令能够查询到 damocles 封装的扇区即表示导出成功,后续就可以封装新的扇区了。

./lotus-miner sector list

查看新的扇区号:

./lotus-miner sectors numbers info

damocles 中可能存在已经封装上链的扇区状态还是 Finalized: false 的情况,需要手动将其设置为完成状态才会被导出到 lotus-miner