以太坊客户端的链数据目录:一份台账的几种文件分工 图 1
以太坊客户端的链数据目录:一份台账的几种文件分工 · 图 1

一台节点的硬盘分区思维

以太坊执行层客户端把节点数据集中放在数据目录下,常见布局可以按问题分成四个专区。第一个专区回答这些块里装了哪些交易:区块体与收据按编号成段存放,同步进度记录也在这里,断点续传靠它。第二个专区回答链的规则状态是什么:区块头序列、总工作量证明计数、索引标记等元信息住在这层,分叉选择与重组恢复要先读它。第三个专区是最大的那块:世界状态,也就是账户余额、合约存储和代码,现代实现用带快照辅助索引的默克尔 Patricia 树组织它,读写放大与磁盘占用主要由它决定。第四个专区是你的节点自己:节点身份密钥、对端记录、轻量交易池条目。各专区彼此独立,这就是为什么备份助记词从来不是备份节点,也为什么删错专区里没有备份机制的说法成立。

以太坊客户端的链数据目录:一份台账的几种文件分工 图 2
以太坊客户端的链数据目录:一份台账的几种文件分工 · 图 2

索引是有开关的账本副本

同一份链上数据,可以按不同问题重排成不同的检索结构:地址到交易历史的映射、裸交易哈希索引、过滤器日志缓存,每一项都以空间换时间。默认配置往往只开必要的一两项,区块浏览器运营商才会全开。看日志时出现索引构建、迁移、修剪等字样,说明客户端正在后台重排这些结构。索引与原始数据是派生关系:原始数据在,索引删了可以重建;原始数据没了,索引就是一堆无法核对的哈希。

存储引擎制造的磁盘脉冲

主流客户端底层多用日志结构合并树型的键值引擎,这类引擎的工作方式决定了一个运维常识:写入先进内存表和预写日志,攒够再归并下沉,归并期间临时文件会让目录体积冲高后再回落,所以监控里看到数据目录阶段性膨胀不等于同步出了错。另一个常见词是数据库压缩或空间回收,它把归并后的死键从文件里抠出来还给文件系统——注意它回收的是引擎内部碎片,不是让你能手动删历史文件的工具。链数据是连续整体:状态树每个节点靠哈希引用父节点,删掉任何一段历史区块,状态推导链就断了,客户端会以校验失败或要求全量重同步回应这种好心清理。

想省空间的正路

正路只有两条:要么用节点自身的修剪能力,在同步时声明只要状态不再回溯的老历史;要么把对历史数据的需求外包给归档节点服务商。任何手删数据目录内文件的做法,效果都介于同步停滞与整库报废之间,从来没有省空间的第三种解法。想验证这一点,看客户端文档对磁盘不足的处理建议即可,它谈的是扩容和修剪,从不谈挑文件。

快速问答

问:换电脑迁移节点,直接拷数据目录行吗? 答:在同一版本同一客户端下整体拷贝通常可行,版本跨大段升级时按迁移流程走更稳;关键是整体而不是挑文件。

问:数据目录涨得比文档说的快,正常吗? 答:先区分快照、索引构建与存储引擎归并三种脉冲,若持续单调增长再对照当期文档判断是否开了额外索引。

常见误区

一是把修剪当成历史数据还能翻回去,它划走的部分本机永久没有。二是把操作系统磁盘空间当结论,而忽略底层引擎内部碎片让两边数字对不上的常态。三是以为删日志能腾空间,多数运行日志本来就小,大头永远在状态与区块专区。

风险提示:本文为节点运维机制科普,不构成任何投资建议;具体目录结构与参数以你所用客户端当期官方文档为准。