对于以太坊加密货币的POS挖矿,通常使用名为验证器的特殊软件。验证器又分为两个组成部分:执行层和共识层。共识层是POS挖矿本身,而执行层是以太坊的POW区块链网络,该网络从2015年一直运行到2022年合并为止。此期间积累的所有数据已完全转移到新的POS网络。
由于存在多个验证器软件选项,以下考虑因素将适用于最流行的Geth客户端。
每个层都使用自己的数据库,对于执行层,该数据库每周增加14GB。数据库的总大小已经接近2TB。对于归档验证器(用于诸如Etherscan和beacoincha.in等服务),使用Geth客户端时,SSD空间需求更高,超过14TB。
为了减小全节点(标准验证器)的SSD大小需求,开发人员设计了一个数据库修剪过程,对每个交易仅保留最后的128个区块。
理论上,此过程允许使用1TB SSD,但修剪需要每月进行。因此,建议购买一个2TB SSD用于验证器,并每年执行一次数据库缩减。此过程需要约6-7小时,在此期间您的验证器将离线并可能产生惩罚。
共识层也有自己的数据库,但其大小增长不如执行层的数据库那么迅速。因此,主要关注于减小执行层的数据库大小。
重要提示:从版本 1.13.0 开始,如果您已经在使用 --state.scheme=path 或者只是要安装 ETH 验证器,则 GETH 客户端支持新标志 --state.scheme=path 以及新的 Pebble 数据库类型使用新的数据库类型,则无需再修剪数据库。 对于已更新到版本 1.13.0 或更高版本的所有其他客户端,旧版本的数据库将继续工作。 要切换到新数据库,需要完全删除Geth客户端数据库(gethremovedb命令),在GETH设置中指定标志--state.scheme=path和--db.engine pebble,并等待完全同步节点 1 天,前提是您有快速的 SSD、强大的现代 CPU 和快速的互联网。
现在让我们继续执行Geth客户端的数据库修剪的操作说明。
GETH数据库修剪
重要提示:只有在SSD上至少有40GB的可用空间时,才能修剪数据库。如果SSD上的空间不足,您可以通过减少SWAP文件或扩展逻辑磁盘大小来增加空间。或者,暂时将共识层的数据库移动到另一个磁盘上,或者作为最后的手段,使用Pebble数据库从头开始执行新的同步。
要在Linux上检查磁盘上的可用空间,请使用以下命令:
df -h
另一点:您的GETH客户端必须完全同步,并在启动后至少运行35分钟,以收集必要的数据。
第一步是停止GETH进程:
sudo systemctl stop geth
您还可以停止共识层。PRYSM客户端的停止命令如下:
sudo systemctl stop prysmvalidator
sudo systemctl stop prysmbeacon
在进行下一步之前等待3分钟。
在进一步操作之前,建议启动一个终端多路复用器,如TMUX,以确保如果您失去对远程服务器终端的访问,修剪过程不会中断。
tmux
这是在您失去对远程终端的访问时需要的。在这种情况下,数据库修剪过程将不会随着您的会话中断而中断。
现在,您可以开始减小数据库大小。
修剪数据库的命令:
geth snapshot prune-state
如果按照Somer Esat在Medium上的说明安装验证器,也就是说使用systemd启动GETH,那么命令将会有所不同:
sudo -u <user> geth --datadir <path> snapshot prune-state
例如:: sudo -u geth geth --datadir /var/lib/geth snapshot prune-state
或者 sudo -u goeth geth --datadir /var/lib/goethereum snapshot prune-state
命令的选择取决于您的GETH数据库在服务器上的存储位置。您可以在geth.service文件中找到数据库路径:
sudo nano /etc/systemd/system/geth.service
数据库路径在--datadir标志下指定。
如果操作正确,数据库缩减过程将开始,分为3个阶段:
第一阶段是构建布隆过滤器,这在我的计算机上花费了超过2个小时
elapsed:已经过去的时间
eta:预计到达过程结束的时间
实际的数据库修剪将开始,大约需要额外4个小时。
修剪后,数据库将被压缩,在控制台上标记为“Compacting database”。这个过程可能需要额外的一个小时左右。
成功完成以太坊验证器数据库缩减任务后,将会显示一条消息:“State pruning successful”。
关闭TMUX:
tmux kill-server
接下来,启动GETH客户端和验证器(如果它也被关闭了):
sudo systemctl start geth
sudo systemctl start prysmbeacon
sudo systemctl start prysmvalidator
错误:“Snapshot not old enough yet: need 128 more blocks”
如果在决定缩小数据库之前您的验证器运行时间不足,将出现此错误。建议GETH至少运行35分钟,然后再进行修剪。
此错误也会在选择错误的命令来修剪GETH客户端的数据库时发生。请指定正确的路径或使用不同的命令格式。
另一种启动GETH以太坊数据库修剪的方法
编辑现有的geth.service文件:
sudo nano /etc/systemd/system/geth.service
在ExecStart的末尾添加以下行:
snapshot prune-state
所有其他参数应保持不变。
重新加载systemd:
sudo systemctl daemon-reload
启动GETH服务:
sudo systemctl start geth
您可以使用以下命令监视数据库修剪的进度:
journalctl -fu geth
完成GETH数据库修剪后,从geth.service文件中删除snapshot prune-state这一行:
sudo nano /etc/systemd/system/geth.service
重新加载systemd:
sudo systemctl daemon-reload
启动GETH服务:
sudo systemctl start geth
在一台配备了Ryzen 1700X处理器、32GB RAM和2TB SSD ADATA XPG GAMMIX S11 Pro的服务器上,减小GETH客户端数据库的整个过程大约需要7个小时。
如果您的服务器配置明显较弱,减小数据库所需的总时间将更长。相反,在一台性能更强大的计算机上,修剪可能需要更少的时间。
结论:在GETH客户端上运行的ETH验证器数据库的修剪是一个非常有用的功能,因为它允许使用比实际需要的要小得多的SSD。这还可以解决如果您的2TB SSD已经不足以支持以太坊验证器的问题。在几个小时内,您可以减小数据库,并避免需要进行2周的完整GETH同步以过渡到Pebble,其中数据库的缩减是自动进行的。
如果您决定不切换到Pebble,请记住在SSD上仍有40GB可用空间时定期执行snapshot prune-state命令。