Compact the LND database (channel.db)¶
An over 1GB channel.db file does not work on 32bit systems: https://github.com/lightningnetwork/lnd/issues/4811
# check the size of channel.db
sudo du -h /mnt/hdd/lnd/data/graph/mainnet/channel.db
# example output
# 1.0G /mnt/hdd/lnd/data/graph/mainnet/channel.db
Auto-compact on restart¶
Since LND v0.12.0 can set db.bolt.auto-compact=true in the lnd.conf.
- To edit:
sudo nano /mnt/hdd/lnd/lnd.conf
- insert the following (can leave out the comments):
[bolt]
# Whether the databases used within lnd should automatically be compacted on
# every startup (and if the database has the configured minimum age). This is
# disabled by default because it requires additional disk space to be available
# during the compaction that is freed afterwards. In general compaction leads to
# smaller database files.
db.bolt.auto-compact=true
# How long ago the last compaction of a database file must be for it to be
# considered for auto compaction again. Can be set to 0 to compact on every
# startup. (default: 168h)
# db.bolt.auto-compact-min-age=0
- restart lnd:
sudo systemctl restart lnd
- monitor the process (can take several minutes):
sudo tail -fn 30 /mnt/hdd/lnd/logs/bitcoin/mainnet/lnd.log
- might want to disable the auto-compact in
lnd.confand only activate on-demand to avoid long startup times:
Compacting with Channels Tools¶
https://github.com/guggero/chantools#compactdb
- Run the following commands in the RaspiBlitz terminal
See the comments for what each command does.
# install chantools
# download, inspect and run the install script
wget https://raw.githubusercontent.com/openoms/lightning-node-management/master/lnd.updates/bonus.chantools.sh
cat bonus.chantools.sh
bash bonus.chantools.sh on
# stop lnd
sudo systemctl stop lnd
# change to the home directory of the bitcoin user
sudo su - bitcoin
# run the compacting
chantools compactdb --sourcedb /mnt/hdd/lnd/data/graph/mainnet/channel.db \
--destdb /mnt/hdd/lnd/data/graph/mainnet/compacted.db
# check the size of the compacted.db
# (the first compacting will have the biggest effect)
du -h /mnt/hdd/lnd/data/graph/mainnet/compacted.db
# example output:
# 730M /mnt/hdd/lnd/data/graph/mainnet/compacted.db
# make sure lnd is not running (needs sudo)
exit
sudo systemctl stop lnd
sudo su - bitcoin
# backup the original database
mv /mnt/hdd/lnd/data/graph/mainnet/channel.db \
/mnt/hdd/lnd/data/graph/mainnet/uncompacted.db
# move the compacted database in place of the old
mv /mnt/hdd/lnd/data/graph/mainnet/compacted.db \
/mnt/hdd/lnd/data/graph/mainnet/channel.db
# exit the bitcoin user to admin
exit
# start lnd
sudo systemctl start lnd
# unlock the wallet
lncli unlock
Prune the revocation logs¶
- available since LND v0.15.1
- Does not replace the database compacting and needs to be done only once after updating to LND v0.15.1 and above
# check the size of channel.db
sudo du -h /mnt/hdd/lnd/data/graph/mainnet/channel.db
# example output
# 1.0G /mnt/hdd/lnd/data/graph/mainnet/channel.db
On a Raspiblitz or compatible system:¶
-
Edit the systemd service:
-
Edit the line starting with
ExecStart=so it looks like: - CTRL+o, ENTER and CTRL+x to save then restart LND:
- monitor the process in the logs:
-
can take 30-60 mins typically similar to compacting after a long time.
Example output when pruning the revocation logs: [INF] LTND: Version: 0.15.1-beta commit=v0.15.1-beta, build=production, logging=default, debuglevel=info [INF] LTND: Active chain: Bitcoin (network=mainnet) ... [INF] LTND: Opening the main database, this might take a few minutes... [INF] LTND: Opening bbolt database, sync_freelist=false, auto_compact=false [INF] LTND: Creating local graph and channel state DB instances [INF] CHDB: Checking for schema update: latest_version=29, db_version=27 [INF] CHDB: Performing database schema migration [INF] CHDB: Applying migration #28 [INF] CHDB: Creating top-level bucket: "chan-id-bucket" ... [INF] CHDB: Created top-level bucket: "chan-id-bucket" [INF] CHDB: Applying migration #29 [INF] CHDB: Checking for optional update: prune_revocation_log=true, db_version=empty [INF] CHDB: Performing database optional migration: prune revocation log [INF] CHDB: Migrating revocation logs, might take a while... [INF] CHDB: Total logs=1358156, migrated=0 ... [INF] CHDB: Migration progress: 76.366%, still have: 320989 [INF] CHDB: Migration progress: 89.584%, still have: 141464 [INF] CHDB: Migration progress: 97.048%, still have: 40095 [INF] CHDB: Migrating old revocation logs finished, now checking the migration results... [INF] CHDB: Migration check passed, now deleting the old logs... [INF] CHDB: Old revocation log buckets removed! [INF] LTND: Database(s) now open (time_to_open=7m1.713662454s)! -
after the pruning has finished the node comes back online
-
will need to compact once again to remove the pruned logs and reduce the size of the channel.db
-
example output of the compaction after pruning the revocation logs: