Filecoin 运维(2) - 环境变量和常用运维操作
本文介绍 Filecoin 挖矿的环境变量,以及一些常用的运维操作。
常用环境变量
Lotus 数据目录: LOTUS_PATH
export LOTUS_PATH=/gamma/lotus/data
Miner 数据目录:LOTUS_STORAGE_PATH
export LOTUS_STORAGE_PATH=/gamma/lotus-storage-miner/data
IPFS 网关地址: IPFS_GATEWAY
, 用于下载复制证明参数加速
export IPFS_GATEWAY=https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/
临时文件夹路径: TMPDIR
export TMPDIR=/cache/tmp
proof 证明参数路径: FIL_PROOFS_PARAMETER_CACHE
export FIL_PROOFS_PARAMETER_CACHE=/gamma/filecoin-proof-parameters
PreCommit1 proof parents 缓存路径(可以减少 56G 内存)
export FIL_PROOFS_PARENT_CACHE=/gamma/filecoin-parents
最大化内存参数: FIL_PROOFS_MAXIMIZE_CACHING
export FIL_PROOFS_MAXIMIZE_CACHING=1
使用 GPU 进行 Precommit2 加速: FIL_PROOFS_USE_GPU_COLUMN_BUILDER
export FIL_PROOFS_USE_GPU_COLUMN_BUILDER=1
FIL_PROOFS_USE_MULTICORE_SDR=1
开启 Rust 日志:
export RUST_LOG=Debug
启用源码编译底层库:
export FFI_BUILD_FROM_SOURCE=1
启动小扇区支持:(一般用于本地测试网络)
export FIL_USE_SMALL_SECTORS=true
设置自定义 GPU 参数:
export BELLMAN_CUSTOM_GPU="GeForce RTX 2070 SUPER:2560"
lotus daemon 操作
查看节点信息
# 查看本节点所监听的地址:
lotus net listen
/ip4/127.0.0.1/tcp/37103/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
/ip4/192.168.1.101/tcp/37103/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
/ip6/::1/tcp/46335/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
# 查看连接的节点列表:
lotus net peers
手动连接其他节点, 这个在你同步的时候发现自动同步失败,无法获取可用节点的时候特别有用:
# usage
lotus net connect <PEER_ADDR>
# e.g
lotus net connect /ip4/119.33.53.66/tcp/37103/p2p/12D3KooWNvqwb1gbgMNLFXtMAXP3ZwgTVgaLXbDUNqpWDQuKd1sh
这个在你同步的时候无法正常同步链上数据时候特别有用, 这时可以试下在启动 daemon 的时候禁用自动连接 peers ,然后手动连接到一个正常节点,例如:
lotus daemon --bootstrap=false
lotus net connect <PEER_ADDR>
<PEER_ADDR>
可以是任意一个能够正常同步数据的节点地址。
查看链同步状态
lotus sync status
# 等待链同步完成
lotus sync wait # 该命令会实时显示同步状态以及待同步区块高度
如果出现 Error
则说明链同步有问题,如果状态是 completed
,则说明链同步已经完成,可以进行其他操作了。
如果同步出错的话,你可以手动强制将你的本地链头区块指向某个高度:
# usage
lotus chain sethead --epoch=<height>
# e.g
lotus chain sethead --epoch=3960
修改 mpool 配置:
# usage
lotus mpool config <val>
# e.g
lotus mpool config '{"PriorityAddrs":[],"SizeLimitHigh":30000,"SizeLimitLow":20000,"ReplaceByFeeRatio":1.25,"PruneCooldown":60000000000,"GasLimitOverestimation":1.5}'
这个配置非常有用,你可以用来做一些高级的操作。比如,如果你想设置你的节点为某个钱包发送的交易优先打包,你可以这样设置:
# usage
lotus mpool config '{"PriorityAddrs":[<address>],"SizeLimitHigh":30000,"SizeLimitLow":20000,"ReplaceByFeeRatio":1.25,"PruneCooldown":60000000000,"GasLimitOverestimation":1.5}'
# e.g
lotus mpool config '{"PriorityAddrs":["t3r3afkf3ooeukknwx45g4t475pduslpkov32nvodv6xzbuliccka7qsax32m34yfbd7q3fwxapfb2isea6dnq"],"SizeLimitHigh":30000,"SizeLimitLow":20000,"ReplaceByFeeRatio":1.25,"PruneCooldown":60000000000,"GasLimitOverestimation":1.5}'
提高消息的 gas 费用
# usage
lotus mpool replace --auto <address> <nonce>
# e.g
lotus mpool replace --auto t3xxxxx 1234
导入,导出当前链快照:
通常如果你不是做钱包或者交易所的话,你并不需要全节点,你可以直接从官方提供的快照来同步,或者从其他节点导出快照,再导入到当前 daemon. 这样可以节省不少同步的时间。
可以使用以下方式创建完整的 CAR 快照:
# usage
lotus chain export <filename>
# e.g
lotus chain export lotus-chain-2020-12-02.car
通过上面的命令你可以导出一个完整的 lotus chain 快照。不过这个快照比较大,可能超过 100 GB。 所以更常用的方式是使用下面的命令导出一个阉割版的快照, 就是只导出最新的区块,跳过以前的旧消息。
# usage
lotus chain export --skip-old-msgs --recent-stateroots=<stateroots-num> <filename>
# e.g
lotus chain export --skip-old-msgs --recent-stateroots=2000 lotus-chain-2020-12-02.car
--recent-stateroots
参数指定要导出的状态根数。 --skip-old-msgs
参数表示只导出那些 stateroots 直接引用的区块。
然后在首次启动 daemon 的时候执行导入快照。(只是第一次需要导入,后面再启动 daemon 就不需要了)。
# Without verification
lotus daemon --import-snapshot <filename>
# With verification
lotus daemon --import-chain <filename>
如果你希望在快照导入之后就立即退出守护进程,(例如在docker环境中很有用),请在命令中添加 --halt-after-import
标志:
lotus daemon --import-snapshot --halt-after-import <filename>
钱包操作
# 创建一个 BLS 钱包
lotus wallet new bls
# 查看钱包列表
lotus wallet list
# 查看钱包余额
lotus wallet balance
导出钱包私钥到文件
# usage
lotus wallet export wallet > <file>
# e.g
lotus wallet export wallet > wallet.key
导入钱包私钥到节点
# usage
lotus wallet import <file>
# e.g
lotus wallet import wallet.key
手动下载 proof 参数
# 首先记得开启京东云的代理
export IPFS_GATEWAY="https://proof-parameters.s3.cn-south-1.jdcloud-oss.com/ipfs/"
# usage
lotus fetch-params --proving-params <sector_size>
# e.g
lotus fetch-params --proving-params 32GiB
lotus-miner 操作
查看矿工当前信息,包括算算力,山区密封情况
lotus-storage-miner info
Miner: t0109653
Sector Size: 32 GiB
Byte Power: 1.812 TiB / 4.888 PiB (0.0362%)
Actual Power: 1.81 Ti / 4.73 Pi (0.0374%)
Committed: 1.844 TiB
Proving: 1.812 TiB (32 GiB Faulty, 1.69%)
Expected block win rate: 6.4627/day (every 3h42m48s)
Miner Balance: 128.044817705754006786
PreCommit: 0
Locked: 128.043278061722026245
Available: 0.001539644031980541
Worker Balance: 49.947643260499744805
Market (Escrow): 0.000000000000004064
Market (Locked): 0.000000000000004064
Sectors:
Total: 72
Proving: 58
PreCommit1: 12
PreCommit2: 1
SealPreCommit1Failed: 1
这是我们自己测试矿工的 info
,目前已经跑了 2 天了。这里大概解释一下各项数据的意思:
- Byte Power: 已完成 Proving 的算力
- Actual Power: 实际有效算力
- Committed: 已完成 Commiting 的算力
- 32 GiB Faulty: 被标记为 Faulty 扇区总大小,也就是无效算力。
- Expected block win rate: 预期竞争出块胜出的概率,
6.4627/day
标识平均每天可以出 6 个块。 - Miner Balance: 当前挖矿收益(广大矿工最关注的)
- Locked: 挖矿收益锁仓的份额(前期的收益几乎全部锁仓了)
其他都是大家一眼都能看懂的,这里就不解释了。
质押扇区
# 质押一个由随机数据填充的扇区(垃圾数据)
lotus-miner sectors pledge
查看扇区状态
# 列举所有扇区信息:
lotus-miner sectors list
# 查看某个扇区的当前状态
lotus-miner sectors status <sector_id>
# e.g
lotus-miner sectors status 1
# 查看 sector 详细日志
lotus-miner sectors status --log 1
修改扇区的状态
# usage
lotus-miner sectors update-state --really-do-it=true <sector_id> <state>
# e.g
lotus-miner sectors update-state --really-do-it=true 0 FailedUnrecoverable
删除扇区
# usage
lotus-miner sectors remove --really-do-it=true <sector_id>
# e.g
lotus-miner sectors remove --really-do-it=true 1
设置订单价格:
# usage
lotus-miner deals set-ask --price=<val> --max-piece-size=<val>
# e.g
lotus-miner deals set-ask --price='1000000' --max-piece-size=34359738368
查看 Worker 列表
lotus-miner sealing workers
查看当前 miner 任务调度列表
lotus-miner sealing jobs
如果你发现一个任务长时间没有完成(也许是 worker 掉线了),你可以使用下面的命令取消任务:
# 终止指定的任务(通常用来处理长时间没有响应的任务)
lotus-miner sealing abort <job-id>
增加存储路径
# 设置数据存储路径,该路径用来存储最终密封好的数据
# 执行该命令可能需要一点时间等待
lotus-miner storage attach --store --init /path/to/persistent_storage
# 设置密封扇区的存储路径,密封完成之后该路径下的数据会被自动清空,相当于临时目录
# 执行该命令可能需要一点时间等待
lotus-miner storage attach --seal --init /path/to/fast_cache
以上两个命令都是在启动了 miner 之后才可以执行,是一种动态添加存储路径的方式,非常灵活。 你还可以在命令中添加权重 –weight=10,默认权重是 10。 执行该命令后,可通过以下命令查看存储列表:
lotus-miner storage list
lotus-worker 操作
启动 Worker 命令:
# 启动 worker
lotus-seal-worker run --address=192.168.1.100:2345 --precommit1=true --precommit2=false --commit=false
# 打印当前 worker 信息
lotus-worker info
# 标记某个worker停止接单(做完当前的任务)
lotus-worker set --enabled=false
# 让某个 worker 重新接单
lotus-worker set --enabled=true
启动 worker 需要注意以下几点:
- 需要给 worker 指定一个在局域网可以访问的 IP 地址以及一个本机未被使用的端口。
- precommit1、precommit2 和 commit 默认是启用的,如果想要禁用,可以设置为 false
- 需要注意机器的内存与功能的划分,比如:
- 如果你打算让当前 Worker 参与 P1,则至少需要 128GB 内存。
- 如果你打算让当前 Worker 参与 P2,则至少需要 64GB 内存。
- 如果你打算让当前 Worker 参与 C2,则至少需要 192GB 内存。
订单操作
- 导入数据
bash # usage lotus client import <file> # e.g lotus client import hello.txt Import 23, Root bafk2bzacebuc55ftl4c2m6h2ng3zx4eo6svtaivkl66xxopfermkhl3dwnypk
- 发送订单
# usage lotus client deal <dataCid> <minerID> <price> <duration> # e.g lotus client deal bafk2bzacebuc55ftl4c2m6h2ng3zx4eo6svtaivkl66xxopfermkhl3dwnypk f09675 0.0000000005 518400 # 成功之后会返回一个消息回执,类似下面这样: bafyreigw63qjia7dulwcn6d6fhlobhiewlvd4fsnpmbmdhvjszhzbeewjm
矿工的信息可以通过下面的命令查询到:
# usage lotus client query-ask <minerId> # e.g lotus client query-ask f09675
输出信息:
Ask: f09675 Price per GiB: 0.0000000005 FIL Verified Price per GiB: 0.00000000005 FIL Max Piece size: 32 GiB
<duration>
是指订单的有效期,单位是区块高度,也就是说多少个区块以后该订单失效。当前 duration 的最小值 51840,也就是说你最少要存半年。 -
查看订单状态,需要你提交订单时返回的交易回执
# usage lotus client get-deal <CID> # e.g gamma_lotus client get-deal bafyreigw63qjia7dulwcn6d6fhlobhiewlvd4fsnpmbmdhvjszhzbeewjm
输出结果类似:
{ "DealInfo: ": { "ProposalCid": { "/": "bafyreigw63qjia7dulwcn6d6fhlobhiewlvd4fsnpmbmdhvjszhzbeewjm" }, "State": 26, "Message": "unexpected deal status while waiting for data request: 11 (StorageDealFailing). Provider message: deal rejected: false\n", "Provider": "f09675", "DataRef": null, "PieceCID": { "/": "baga6ea4seaqgriqpswklnzyxxpnirxj37otzgfgpcwpksi2a3ttglxqap5tbsby" }, "Size": 16256, "PricePerEpoch": "500000000", "Duration": 522292, "DealID": 0, "CreationTime": "2020-10-21T12:32:52.702939009+08:00", "Verified": false } }
因为我当前这个矿工是拒绝接收非官方机器人以外的订单,所以你看到订单的状态是
rejected
被拒绝了。 - 列出当前节点所有订单
lotus client list-deals