Hyperledger Fabric创世区块与账本存储目录及本地迁移方法问询
Hyperledger Fabric:创世区块与账本的存储位置及迁移方法
一、默认存储目录
1. 创世区块
- 排序节点(Orderer)的创世区块默认存于容器内的
/var/hyperledger/production/orderer/genesis.block,这是Orderer启动时加载的初始核心区块。 - Peer节点的通道创世区块(创建通道时生成的区块)则存于
/var/hyperledger/production/ledgersData/chains/chains/<通道ID>/blockfile_000000,该文件即为对应通道的第一个区块。
2. 账本数据
- Peer节点的完整账本(含区块文件与世界状态)默认存储在容器内的
/var/hyperledger/production/ledgersData,其中:chains子目录存储所有通道的区块文件stateLeveldb子目录存储世界状态数据(LevelDB格式)
- 排序节点的账本(各通道的排序区块)存于
/var/hyperledger/production/orderer/chains,每个通道对应一个独立子目录。
二、从Docker容器迁移到本地硬盘
步骤1:停止目标节点容器
先通过docker ps找到要迁移的Orderer或Peer容器名称,停止容器避免数据写入冲突:
docker stop <容器名称>
步骤2:复制容器内数据到本地
迁移排序节点数据(含创世区块)
将Orderer的生产数据目录复制到本地指定路径(比如当前目录下的orderer-local-data):
docker cp <orderer容器名>:/var/hyperledger/production/orderer ./orderer-local-data
迁移Peer节点数据(含通道创世区块与账本)
将Peer的账本数据目录复制到本地peer-local-data:
docker cp <peer容器名>:/var/hyperledger/production/ledgersData ./peer-local-data
步骤3:启动节点时挂载本地目录
迁移完成后,后续启动容器时通过Docker的-v参数将本地目录映射到容器内对应路径,实现数据持久化到本地:
排序节点启动示例:
docker run -d \ -v $(pwd)/orderer-local-data:/var/hyperledger/production/orderer \ --name <orderer容器名> \ hyperledger/fabric-orderer:latest \ orderer
Peer节点启动示例:
docker run -d \ -v $(pwd)/peer-local-data:/var/hyperledger/production/ledgersData \ --name <peer容器名> \ hyperledger/fabric-peer:latest \ peer node start
关键注意事项
- 迁移前必须停止容器,否则可能出现数据损坏或不一致。
- 调整本地目录权限:容器内运行的
hyperledger用户(UID/GID为1000)需要读写权限,执行以下命令修改:
chown -R 1000:1000 ./orderer-local-data ./peer-local-data
- 多节点集群场景下,每个节点的数据需单独迁移;如果是分布式部署,也可以用NFS等共享存储替代本地目录挂载。
内容的提问来源于stack exchange,提问作者Anupam
相关产品推荐
相关产品推荐

