# lotus-miner 切换 damocles 流程
本节介绍从 lotus-miner
切换 damocles
的流程,通常此需求的场景为:
lotus-miner
已经封装了扇区;- 切换为
damocles
后要求:- 可以继续封装新的扇区;
- 时空证明正常(wdPoSt 和 winPoSt)。
# 切换流程
根据上述需求,切换为 damocles
流程有:
- 搭建
venus
链服务,或者接入已有的链服务 (opens new window),请参考venus
相关文档,注意钱包私钥需要导入venus-wallet
; - 初始化
damocles
repo,具体参考快速启动; - 扇区永久存储导入,参考06.导入已存在的扇区;
- 扇区元数据导入;
- 用
damocles
封装新的扇区,具体参考相关文档。
先决条件:
damocles
和lotus-miner
封装扇区的过程不兼容,故切换时应保证所有的扇区封装任务都已完成 (Proving
)
# 元数据导入
导入扇区元数据是通过调用各自接口进行的,故过程中需要 lotus-miner
和 damocles-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
,以使得新封装扇区的编号不重复。
先决条件:
damocles
和lotus-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
提示
什么时候需要迁移扇区持久化文件呢?当 damocles
和 lotus-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"
我们只需将这两个目录 attach
到 lotus-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
。