扇区生命周期及状态管理
扇区是Filecoin网络中的数据存储单元,目前主网的扇区大小有32GiB和64GiB。
一. 扇区生命周期详解
Filecoin网络的扇区,需要通过一系列的计算过程,最终得到扇区内数据的证明结果,并存储到区块链上。
扇区的主要计算过程包括:PreCommit1(PC1)、PreCommit2(PC2)、Commit2(C2)三个过程,目前在AMD EPYC 7542 CPU 和 2080Ti显卡上,基于官方代码,计算PC1的过程大约需要3个小时,PC2需要20分钟,C2需要40分钟。基于社区及优化后的代码,PC2为10分钟左右,C2在15分钟左右。
1. 随机数扇区生命周期
随机数扇区即通过lotus-miner sectors pledge
生成的扇区,扇区中存储的都是没有实际价值的随机数,目前仅仅是为了承诺有效算力。可以通过操作,将随机数扇区声明为有效数据存储的扇区。
2. 订单扇区生命周期
订单扇区是矿工通过Filecoin的订单撮合市场,存储了客户的真实数据以后生成的扇区。
二. 扇区状态管理
扇区主要状态包括:PreCommit1、PreCommit2、Committing、FinalizeSector
1. 更新扇区状态
|
|
针对CommitFailed
状态的扇区,可通过以下命令,将扇区状态更改为Committing
状态。
|
|
2. 删除扇区
|
|
针对PreCommitFailed
和SealPreCommit1Failed
状态的扇区,因为还没有质押,可通过上面的命令直接删除。
三. 顽固扇区删除
1. 什么是顽固扇区?
所谓顽固扇区,是指因Worker掉线、扇区超时等原因导致的,无法被成功调度并完成封装的扇区。
顽固扇区并不是指SealPreCommit1Failed
,PreCommitFailed
,CommitFailed
这几种状态的扇区,因为这几种状态的扇区,均可通过lotus-miner sectors remove --really-do-it <SectorId>
命令直接删除掉。
而顽固扇区是指PreCommit1
,PreCommit2
,Committing
,FinalizeSector
这几种正常状态的扇区,但缺无法成功被调度并完成封装的扇区,执行以下两个命令也无法删除掉。
|
|
2. 顽固扇区有什么影响?如何发现它?
顽固扇区会停留在扇区列表中,一直不断被调度(但又无法调度成功,扇区日志中通常有大量重复的retry
操作),不仅浪费了调度系统的队列资源,还会影响扇区封装任务下发的数量。你会发现,扇区明明在列表中,就是无法封装成功,想删还删不掉,非常的痛苦。
如何发现顽固扇区呢?因为Lotus的扇区号都是自增的,只要执行lotus-miner sectors list --fast
查看一下扇区列表,列表的最后面,都是正在封装的扇区,而且这些扇区ID都是连续的。正常情况下,前面封装完的扇区都是Proving
状态,如果看到前面Proving
状态的扇区中夹杂了PreCommit1
,PreCommit2
,Committing
这些状态的扇区,那这些就是顽固扇区了。
另外,也可以通过lotus-miner sealing jobs | sort -k2
查看正在封装的任务列表,如果发现列表头部的扇区ID和后面的差距很大,如果差了几十个甚至更多,那这些扇区也就是顽固扇区了,或者是扇区封装已经进入死循环了,要尽快处理掉。
3. 顽固扇区如何删除?
顽固扇区已经无法被成功调度,只能采取“非常手段”来处理。
顽固扇区无法被调度,是因为扇区本身的文件已经丢失了,那么可以创建一个空的扇区文件,让扇区“假装”在封装,只要能被调度上,出现在lotus-miner sealing jobs
中,就好处理了。
3.1PreCommit1
,PreCommit2
状态的顽固扇区处理
针对PreCommit1
,PreCommit2
这两种状态的扇区,按如下的方法来处理:
① 找一个空闲的Worker(没有任何封装任务),在LOTUS_WORKER_PATH
的unsealed
和seald
目录下,分别创建对应扇区ID的空扇区文件,假设顽固扇区的ID为,那分别在unsealed
和seald
目录下执行:
|
|
② 重启该Worker,注意观察Worker的日志中,该扇区会不会开始封装,如果没有开始封装,可以再重启一下Miner。
③ 待该扇区开始封装,在lotus-miner sealing jobs
列表中能看到以后,就可以执行命令先终止掉任务。
|
|
然后再执行删除该扇区。
|
|
执行了该命令以后,将会在Miner的日志中看到错误,不要惊慌,这种日志属于正常提示。
3.2Committing
状态的顽固扇区处理
针对Committing
状态的顽固扇区,同样是按照上面的方法,在unsealed
和seald
目录下创建一个空的扇区文件。
但是不同的是,创建并重启Worker以后,该扇区并不会出现在lotus-miner sealing jobs
列表中,而是直接变为CommitFailed
,这个时候,执行以下命令删除扇区即可:
|
|
注意!V5版本更新了MaxProveCommitDuration(ProveCommit超时时间)为30天,删除Committing状态的扇区会销毁前置质押中的存储质押部分质押币,请谨慎操作!
4. 删除以后还要做什么?
顽固扇区删除以后,最好重启一下Seal-Miner,这样扇区状态就会重新更新,顽固扇区也就不会被再次调度了。