На самом деле это будет некий вольный перевод из документации, которую можно прочесть тут, с небольшими добавками от себя.
Итак, нода эфира работала с момента записи о ее установке и запуске (это было тут), то есть почти 2 года. За это время ни разу ее не обслуживал, только обновления и все. На сервере было почти 3.5 Тб и они почти закончились. Поэтому решено было провести очистку. Кстати, база данных клиента консенсуса — prysm к этому моменту достигла уже 699 Гб. И это все одним файлом beaconchain.db. Как сжать этот файл я пока не нашел.
Что бы очистить ноду от ненужного мусора — она должна быть полностью синхронизирована, geth должен быть старше чем версия 1.10.3, нода должна была закончить создание снэпшота (в логах не должно быть строк типа «state snapshot generation») и на диске должно быть не менее 40 Гб свободного места. Но в реальности у меня при очистке потребовалось около 80 Гб (наверное потому что редко чистил).
Очистка идет в три этапа:
- Приведение ноды к последнему снэпшоту
- Очистка данных из базы
- Сжатие базы данных
Первые два шага периодически выводят информацию о работе в консоль, а вот третий шаг может достаточно долго «молчать» в консоли, так что стоит просто ждать. В конце концов появится надпись «State pruning successful» и можно будет проверить сколько места освободилось.
Теперь команды чистки. Первым делом останавливаем ноду (я остановил и консенсус, что бы он не ругался в логах)
1 | systemctl stop geth.service prysmbeacon.service |
Теперь откроем новый сеанс через tmux (он позволяет выполнять задачи в фоне, даже если вы отключитесь от сервера)
1 | tmux new -s geth |
И теперь запускаем очистку
1 | sudo -u geth geth --datadir /home/geth/.ethereum snapshot prune-state |
То есть запуск процесса geth от имени пользователя geth с указанием папки, где хранятся данные ноды. Все, теперь ждем и наблюдаем. Выглядеть будет примерно так.
То есть очистка 1.36 Тб мусорных данных из базы ноды у меня заняло чуть больше 15 часов. После этого запускаем ноду и консенсус и догоняем сеть.
1 | systemctl start geth.service prysmbeacon.service |
Вот как-то так. Всем добра.
Hello!
Good cheer to all on this beautiful day!!!!!
Good luck 🙂