关于.block文件存储位置及peer channel fetch命令的技术咨询
Hyperledger Fabric区块存储与
peer channel fetch命令详解 1. .block文件的默认持久化位置
在Hyperledger Fabric里,Peer和Orderer节点的区块存储位置是分开的:
- Peer节点:默认把区块存在容器内的
/var/hyperledger/production/ledgersData/chains/chains/<通道名称>路径下。如果部署时配置了Docker持久化卷或者主机目录挂载,这些文件会同步到宿主机的对应挂载目录,避免容器重启后数据丢失。 - Orderer节点:默认存储路径是容器内的
/var/hyperledger/production/orderer,同样支持持久化配置,确保排序节点重启后账本数据不丢失。
2. 你执行的peer channel fetch命令到底在做什么
没错,你运行的这条命令:
peer channel fetch 0 mychannel.block -c mychannel --orderer orderer0.****.com:7050
就是从指定的Orderer节点(orderer0.****.com:7050)拉取mychannel通道的创世区块——这里的0代表区块高度为0,也就是通道的第一个区块。执行完成后,这个mychannel.block文件会被下载到你当前执行命令的CLI容器工作目录里。
3. 创世区块的存储逻辑
- 首先,创世区块最初是由Orderer节点生成并存储的:当创建通道时,客户端会把创世区块的配置提交给Orderer,Orderer验证通过后会保存这个区块,之后还负责后续交易区块的排序和分发给Peer节点。
- 但这并不意味着Peer节点没有这个区块:当Peer要加入通道时,必须先获取创世区块(要么通过
fetch命令拉取,要么直接使用本地已有的区块文件),加入通道后,Peer会把创世区块以及后续同步到的所有区块,都持久化存储在自己的本地账本目录中,每个Peer都会维护一份完整的通道账本副本。
简单来说:
- 创世区块的“源头”在Orderer,但每个加入通道的Peer本地也会存储完整的副本;
- 你执行的
fetch命令只是把Orderer上的区块文件下载到当前CLI环境,常用于备份创世区块、重新让Peer加入通道,或者做调试验证。
内容的提问来源于stack exchange,提问作者Lin Corey
相关产品推荐
相关产品推荐

