Содержание
В данном руководстве будет описано ускорение начальной синхронизации (IBD, первоначальной загрузки и проверки блокчейна Bitcoin) для клиента Bitcoin Core в операционных системах на ядре Linux. В моих условиях удалось добиться ускорения процесса более чем в 120 раз (19 часов против 17 недель)! Впечатляющий результат, не так ли? О том, как я смог добиться этого, и что подобный результат далеко не предел — под катом.
Тестовый полигон
Испытания проводились на следующем оборудовании:
- AMD Phenom(tm) II X4 955 Processor
- 8 Гб DDR3 ОЗУ
- 3 Тб HDD
- Arch Linux
Как видно, «тестовый стенд» имеет более, чем скромные ТХ. Забегая вперёд можно отметить, что третья строка явилась решающей при расчёте ускорения по данному способу. Но и на быстрых SSD прирост будет не малым, так что данный способ ускорения подходит для железа любой конфигурации, отвечающего минимальным характеристикам.
Минимальные системные требования
В принципе, данный способ ускорения начальной загрузки Bitcoin блокчейна подходит для любых систем с минимум 8 гигабайтами ОЗУ на борту. Важным так же является скорость подключения к сети интернет на машине, где будут происходить манипуляции. В моём случае ограничение загрузки на уровне 4 Мб/сек явилось т.н. «бутылочным горлышком», т.е. самым слабым местом, тормозящим весь процесс.
Меры предосторожности
Это очень важный пункт.
Ни в коем случае не проводите эксперименты с каталогами данных Bitcoin Core, содержащими кошельки с вашими битками! При неумелом, невнимательном, неосторожном манипулировании с каталогом данных Bitcoin Core можно потерять все имеющиеся средства без возможности их восстановления! Все ваши действия вы производите на свой страх и риск! И хотя если выполнить все описанные здесь действия верно, ничего плохого произойти не должно — я вас предупреждал, как говорится. Делайте резервные копии данных и храните их в надёжном месте, ведь может так случиться, что бекап — это единственное, что сможет спасти ваши биточки в случае ошибки в ваших действиях!
Усвоили? Тогда двигаем дальше.
Ограничения
Данный способ не предполагает хранения блокчейна в полном объёме (на момент написания руководства полный размер блокчейна Биткоина составлял ~330 Гб). Размер хранимого куска блокчейна будет ограничен крайними 2 гигабайтами. Для ситуации, при которой необходимо хранить блокчейн в полном объёме данный способ не подходит по техническим причинам, которые станут понятны далее. Если вам это подходит — тогда продолжим.
Подготовка
Нам понадобится любой из современных дистрибутивов Linux (Arch Linux, Debian, Ubuntu, Linux Mint, Manjaro и т.д.), какой именно — не важно, способ будет работать в любом из них. У меня, например, Arch Linux. В него нужно становить пакет bitcoin-qt. Как это сделать для разных дистрибутивов можно легко нагуглить в интернете. Будем считать, что с этим мы справились.
Выбор каталога с данными Bitcoin Core
Запускаем Bitcoin Core. При первом запуске приложение просит нас указать каталог, где будут храниться его данные вместе с блокчейном и кошельками. Например, у меня это
/mnt/data/Bitcoin/
Укажите каталог для хранения данных и не забудьте отметить обрезку блокчейна до крайних 2 Гб. Сделали? Ну всё, Bitcoin Core начал синхронизацию с сетью, которую мы теперь будем ускорять.
Создание ramdisk и перенос туда каталога с данными
Как уже понятно из названия, способ ускорения синхронизации Bitcoin Core с сетью заключается в помещении каталога с данными прямо в оперативную память машины. В этом и заключается вся «магия» данного способа ускорения. Какими бы быстрыми не были топовые SSD накопители, по скорости чтения/записи они с оперативной памятью всё равно и рядом не стояли. Смысл заключается в том, чтобы временно поместить каталог с данными Bitcoin Core в ОЗУ, там его обсчитать и уже полностью синхронизированным вернуть обратно на диск. Для этого нам нужно выполнить следующие шаги:
- Остановить Bitcoin Core;
- Создать и смонтировать ramdisk подходящего размера;
- Переместить в него каталог с данными Bitcoin Core;
- Запустить Bitcoin Core с указанием работать с каталогом данных на ramdisk;
- Дождаться синхронизации;
- Снова остановить Bitcoin Core;
- Переместить каталог с данными из ramdisk на жёсткий диск компьютера;
- Отмонтировать ramdisk.
Выполнив эти 8 пунктов, мы получим готовый к использованию Bitcoin Core, синхронизированный с сетью быстро и без лишней нагрузки на HDD/SSD. Приступим.
Выключаем Bitcoin Core и ждём его полной остановки. Создаём каталог, куда будет смонтирован ramdisk:
sudo mkdir /mnt/ramdisk && sudo chmod 750 /mnt/ramdisk/
Монтируем его в ОЗУ как ramdisk размером 7 Гб.
sudo mount -t tmpfs -o size=7G tmpfs /mnt/ramdisk/
Следующим шагом будет копирование каталога с данными Bitcoin Core в ramdisk. Копировать можете любым файловым менеджером, можно и из консоли:
sudo cp -r /mnt/data/Bitcoin/* /mnt/ramdisk/
Меняем права на каталог для своего пользователя. Замените imatvey на себя:
sudo chown imatvey -R /mnt/ramdisk/
Теперь осталось запустить Bitcoin Core с указанием рабочего каталога в ramdisk:
bitcoin-qt -datadir=/mnt/ramdisk
Готово! Теперь Bitcoin Core манипулирует файлами в рабочем каталоге, находящемся целиком в ОЗУ, что даёт существенное ускорение процесса начальной синхронизации. В любом случае процесс должен сильно ускориться, а на сколько сильно — зависит от индивидуальных характеристик железа/подключения. Как я уже говорил, в моём случае слабое место — скорость интернет подключения, которое при синхронизации было забито на 100%, в то время как загрузка процессора не доходила и до 50%. Возможен вариант, когда скорости интернета будет достаточно, и всё упрётся в производительность процессора, который загрузит на 100%. В этом случае обязательно контролируйте температуру ЦП воизбежание перегрева.
Обратите внимание, что все манипуляции с файлами происходят в оперативной памяти компьютера, и при неожиданном отключении электричесва (в случае с ПК), после перезагрузки все данные с ramdisk безвозвратно будут потеряны. Поэтому, рекомендуется раз в несколько часов сихронизировать данные из рамдиска с каталогом на жёстком диске: останавливаем Bitcoin Core, копируем данные с рамдиска на жёсткий диск, запускаем снова.
Перенос синхронизированного каталога с данными Bitcoin Core из ramdisk на жёсткий диск компьютера
Когда процесс синхронизации с сетью завершён, останавливаем Bitcoin Core. Делаем резервную копию оригинального несинхронизированного каталога на жёстком диске на всякий случай:
sudo cp -r /mnt/data/Bitcoin/ /mnt/data/Bitcoin_bak
Удаляем все файлы из каталога Bitcoin Core на жёстком диске. Аккуратно.
sudo rm -r /mnt/data/Bitcoin/*
Копируем файлы из каталога в ramddisk на жёсткий диск:
sudo cp -r /mnt/ramdisk/* /mnt/data/Bitcoin/
Ну и на всякий случай устанавливаем принадлежность каталога с данными Bitcoin Core себе. Замените imatvey на своего пользователя.
sudo chown imatvey -R /mnt/data/Bitcoin
Отмонтируем ramdisk и удалим его каталог из /mnt:
sudo umount /mnt/ramdisk && sudo rm -r /mnt/ramdisk/
Запускаем Bitcoin Core и пользуемся.