Bitcoin Nodes & Infrastructure

Bitcoin Node Operation: Health and Updates

An unmarked external SSD enclosure lies beside a disconnected USB-C cable on a grey service mat.

The Bitcoin network stands at a crucial intersection where the fundamental principles of decentralization and network efficiency face mounting challenges from emerging use cases that stretch beyond simple monetary transactions. This comprehensive analysis explores the technical and philosophical implications of various data embedding practices and their impact on Bitcoin’s network infrastructure.

The increasing prevalence of non-monetary data storage on the Bitcoin blockchain presents a significant challenge to the network’s original design principles. While Bitcoin’s protocol flexibility allows for various forms of data embedding, the growing adoption of these practices raises important questions about network sustainability and node operation costs. The utilization of witness data discounts, originally implemented to encourage SegWit adoption, has created an unintended avenue for cost-effective data storage that may impact the network’s primary function as a monetary system.

Node operation requirements have evolved dramatically over recent years, with the expanding UTXO set (the list of every coin not yet spent) becoming a particular concern for network participants. A Raspberry Pi 4 or 5 with 8 GB of memory can still run Bitcoin Core, but a node that keeps every block now needs about 900 GB of disk, so a 2 TB drive (as of November 2026), and every increase raises the barrier to entry for new node operators, which could weaken the network’s decentralization. This trend works against Bitcoin’s fundamental principle of accessibility and self-sovereignty.

The technical architecture of Bitcoin nodes faces growing pressure from various data embedding techniques. The witness discount, originally implemented to encourage SegWit adoption, has become an attractive target for non-monetary uses due to its reduced fee structure. This has led to debates about the long-term implications of such practices on network sustainability and the potential need for protocol-level responses.

Relay filters are one response. Bitcoin Knots, and Bitcoin Core through its settings, let an operator restrict which unconfirmed transactions the node keeps and passes on, for example by limiting OP_RETURN data or refusing bare multisig outputs (step 5 below). Filters change what your node relays, not what it stores: when a miner includes a filtered transaction in a valid block, your node accepts that block and keeps it like any other. Our lesson on who enforces Bitcoin’s rules explains why.

Other proposals aim at node costs directly. Utreexo, for example, would let a node check transactions without storing the full UTXO set. Proposals like this involve trade-offs between efficiency, trustlessness and backward compatibility.

Since August 2026 the debate also has a consensus side: Bitcoin Knots 29.4.1 and later enforce different consensus rules from Bitcoin Core and follow a different chain (step 5 explains what that means for your node). Whichever software you run, the routine below keeps your node synced, connected, up to date and backed up.

Step-by-Step Guide

Maintaining a healthy Bitcoin node requires regular monitoring, timely software updates, and proactive management of system resources. The following steps outline a comprehensive maintenance routine for node operators.

  1. Check your node’s synchronization and peer status

    Run bitcoin-cli getblockchaininfo to verify your node is fully synced: blocks equals headers, verificationprogress is near 1.0 and time, the timestamp of your latest block in seconds, is recent: compared with date +%s it is usually less than an hour (3,600 seconds) old. Don’t rely on initialblockdownload: once it turns false it stays false until a restart, even if the node falls behind. On Bitcoin Core 32.1 and later, if you loaded an AssumeUTXO snapshot, a backgroundvalidation field appears while Bitcoin Core is still checking the older blocks. Then run bitcoin-cli getnetworkinfo to check the number of connections and verify both inbound and outbound peers are connected. A healthy node keeps about 10 outbound connections (8 that relay transactions and blocks, 2 that relay only blocks) and, if other nodes can reach it, accepts inbound connections up to the configured maximum. If connection counts are unusually low, investigate network or firewall issues.

Two rows of blocks read from bitcoin-cli getblockchaininfo. Still syncing: the node knows the headers of every block in the row but has fully checked only the first ones, so blocks is behind headers, initialblockdownload is true and verificationprogress is below 1. Synced: every block it knows about is checked, so blocks equals headers, initialblockdownload is false and verificationprogress is about 1.0. Headers are the short summaries of blocks the node has heard about; blocks are the ones it has fully checked.
Synced means every block your node knows about has been checked. getblockchaininfo shows it in three fields: blocks catches up with headers, initialblockdownload turns false and verificationprogress reaches about 1.0.
Read from bitcoin-cli getnetworkinfo. connections_out is about 10: your node opens 8 connections that relay transactions and blocks and 2 that relay only blocks. connections_in is 0 or more: other nodes connect to yours only if they can reach it, with port 8333 open or through Tor. Check peers too, not only sync: a node with no peers hears of no new blocks, so blocks can equal headers while it falls behind.
About 10 outgoing connections is the healthy number. Your node opens them itself. Incoming connections come only when other nodes can reach you, so zero incoming is common at home.
  1. Review Bitcoin Core debug logs for warnings

    Examine the debug.log file located in your Bitcoin data directory (typically ~/.bitcoin/debug.log). Bitcoin Core tags problems as [warning] or [error], in lower case, so search with grep -iE "warning|error" debug.log to find consensus issues, peer connection problems or database errors. Lines with UpdateTip are normal: each one records a new block, so new ones should keep appearing. Pay attention to repeated warnings about peer disconnections, which may indicate network configuration problems, and messages about blocks being rejected, which could signal time synchronization or data corruption issues. Use tail -f debug.log for real-time monitoring.

  2. Monitor disk usage and plan for blockchain growth

    Check available disk space with df -h and compare it against the current blockchain size. A node that keeps every block takes about 900 GB, so use a 2 TB drive. The blocks grow by roughly 80 GB a year, about 90 GB a year on disk once you count the undo data stored with them (as of November 2026). For a full archival node, ensure you have at least 100 GB of free space beyond the current blockchain size to accommodate growth over the next year. If running a pruned node, which needs far less space, check prune_target_size in bitcoin-cli getblockchaininfo (automatic pruning only): it covers just the block and undo files, so leave room for the chainstate and any indexes.

A timeline of free space on a 1 TB drive at today's rate of about 90 GB a year, with gauges from 0 to 100 GB. Now, in November 2026, about 100 GB is free: room for about a year. About six months later 50 GB is free and your alert fires: time to move to a 2 TB drive. About a year later less than 50 MB is free and Bitcoin Core stops itself; the node stays offline until you free space. A node that keeps every block takes about 900 GB; drive sizes are as sold, before formatting. On a 2 TB drive about 1,100 GB is free, more than a decade at today's rate.
Set your alert far above the point where the node stops. An alert at 50 GB free gives you about six months to act. Bitcoin Core’s own limit, under 50 MB, only stops the node before its databases are damaged.
  1. Verify and apply Bitcoin Core updates

    Check your current version with bitcoin-cli --version and compare it against the latest release on bitcoincore.org. When a new version is available, download the release files, verify PGP signatures and SHA256 checksums (our lesson on verifying Bitcoin software walks through both), then plan the upgrade. Stop the running node with bitcoin-cli stop, wait for a clean shutdown (watch the debug.log for “Shutdown done”; versions before 30.0 write “Shutdown: done”), replace the binaries, and restart. Then run bitcoin-cli getnetworkinfo: its subversion field shows the version that is actually running. Read the release notes before upgrading to understand any configuration changes or new features.

Five steps to upgrade Bitcoin Core. 1 Download the release for your system, plus SHA256SUMS and SHA256SUMS.asc, from bitcoincore.org. 2 Verify the builders' signatures on SHA256SUMS, then your file's hash against its line. 3 Read the release notes: changed settings and defaults, and anything the upgrade has to migrate. 4 Stop cleanly with bitcoin-cli stop and wait for Shutdown done in debug.log, while the node writes what it holds in memory to disk. 5 Replace the binaries, restart and check with bitcoin-cli getnetworkinfo: subversion shows the version now running, for example /Satoshi:32.1.0/. Beside step 4, crossed out: kill -9 or a power cut skips the clean stop; what was in memory never reaches the disk, the node redoes it at the next start, and a cut mid-write can corrupt the database.
Verify before you install, and stop before you swap. Step 4 is the one people skip: a clean stop writes the node’s memory to disk, so the next start doesn’t have to redo work or repair a damaged database.
  1. Audit your node’s mempool policy and filtering settings

    Review your bitcoin.conf for mempool-related settings. Key parameters include maxmempool (default 300 MB), mempoolexpiry (default 336 hours), and minrelaytxfee. If you want a stricter relay policy, you can set permitbaremultisig=0 in Bitcoin Core to refuse bare multisig outputs and datacarriersize=40 to limit OP_RETURN data. Switching to Bitcoin Knots for its stricter filters is no longer a relay-policy-only choice: Knots 29.4.1 and later enforce different consensus rules from Bitcoin Core and follow a different chain. Read the 3 November 2026 update in our Core vs Knots comparison before you switch. Run bitcoin-cli getmempoolinfo to see current mempool size and transaction counts.

Transactions from your peers reach your node's filters: minrelaytxfee sets a minimum fee rate, datacarriersize=40 allows OP_RETURN outputs up to 40 bytes in all, and permitbaremultisig=0 refuses bare multisig outputs. A refused transaction is not kept and not passed on. The rest enter your mempool: maxmempool=300 keeps it under 300 MB, and when it is full the lowest fee rates leave first; with mempoolexpiry=336 a transaction leaves after 336 hours, 14 days. What is kept is passed on to your peers. What these settings don't change: when a miner's block contains a transaction you refused, your node checks the block against the consensus rules and, if it is valid, accepts it and stays on the same chain. Switching to Bitcoin Knots 29.4.1 or later changes consensus rules and puts the node on a different chain.
These settings shape your mempool, not your chain. They decide which unconfirmed transactions your node keeps and passes on. A valid block is accepted whatever it contains; only software with different consensus rules changes that.
  1. Check system resource utilization

    Monitor CPU usage, memory consumption, and disk I/O generated by the bitcoind process. On Linux, use htop or systemctl status bitcoind to check resource usage. Bitcoin Core typically uses 1-3 GB of RAM during normal operation (more with higher dbcache settings). Sustained high CPU usage outside of IBD may indicate reindexing triggered by database corruption. High disk I/O can signal an undersized dbcache forcing frequent disk writes.

  2. Test your backup and recovery procedures

    If your node stores wallet data, verify that wallet backups are current and recoverable. Use bitcoin-cli backupwallet /path/to/backup/wallet.dat to create a fresh backup, then test recovery on a separate machine you trust with bitcoin-cli restorewallet test /path/to/backup/wallet.dat. For descriptor wallets, bitcoin-cli listdescriptors lists the public descriptors: compare them on both machines to check that the restored wallet derives the same addresses. Leave out the true option, which prints the private keys in plain text. Matching descriptors don’t prove the copy can spend: check that getwalletinfo shows private_keys_enabled as true and, if the wallet is encrypted, that your passphrase still unlocks it. If it shows false, the keys are elsewhere, such as on a hardware wallet, so test that seed backup instead. For nodes without wallets, back up your bitcoin.conf and any custom scripts. Document the full recovery process so you can rebuild the node from scratch if hardware fails.

What a Bitcoin Core data directory holds, ~/.bitcoin on Linux. The node can rebuild three parts by itself: blocks, every block plus undo data and most of the 900 GB; the block index inside it, which records where each block sits; and chainstate, the unspent coins or UTXO set. If its database is damaged: first start once with -reindex, which rebuilds the index and chainstate from the blocks in hours to a day (a pruned node downloads the whole blockchain again instead); if that fails, delete blocks and chainstate and the node downloads every block again. Only your backup brings back the other two: the wallets folder, with your keys and transaction history, and bitcoin.conf, your settings. Back up each wallet with backupwallet, keep a copy of bitcoin.conf and test the restore on another machine. Small files such as peers.dat and debug.log need no backup: the node writes new ones.
Back up your wallets and bitcoin.conf; the node can rebuild the rest. The block index and the chainstate come back from the blocks on disk, and the blocks, at worst, from the network. Your keys exist only in the wallet and its backups.
  1. Establish a recurring maintenance schedule

    Set calendar reminders for weekly log reviews, monthly disk space checks, and quarterly full system audits. Track your node’s uptime and connection quality over time to identify degradation patterns. Subscribe to Bitcoin Core’s announcements feed (RSS) for release notifications and security advisories. Participate in the Bitcoin Core release candidate testing when possible — this helps the network and gives you advance familiarity with upcoming changes.

Common Mistakes to Avoid

Running an Outdated Bitcoin Core Version for Extended Periods

Some operators install Bitcoin Core once and never update it. Older versions may contain known vulnerabilities, lack performance improvements, and miss protocol enhancements that affect network compatibility. Bitcoin Core maintains only its latest three major versions: in November 2026 that is 32.x, 31.x and 30.x. A version more than two major releases behind, 29.x or older, has reached end of life and does not generally get security fixes (Bitcoin Core’s lifecycle page). 29.5, published on 28 October 2026, a day after 29.x reached end of life, still carried a security fix, but don’t expect more. Check for updates monthly and plan upgrades within a few weeks of each stable release.

Bitcoin Core versions in November 2026, newest first. 32.x, from October 2026, is the newest and gets fixes. 31.x, April 2026, one behind, gets fixes. 30.x, October 2025, two behind, gets fixes until 33.0 comes out. These three are maintained. 29.x, April 2025, three behind, reached end of life on 27 October 2026, and 28.x, October 2024, four behind, on 19 April 2026: they get no more fixes, security included. 33.0 comes next: a major version comes about every six months, and each one pushes the oldest maintained version to end of life.
Run one of the three newest major versions. Bitcoin Core maintains only its latest three major versions; 29.x and older have reached end of life, and no further fixes are expected for them. Stay at most two releases behind.

Ignoring Disk Space Until the Node Crashes

Bitcoin Core checks free space every five minutes and shuts itself down when less than about 50 MB is left, to protect its databases, so the node stays offline until you free space. If the disk fills faster than that, the LevelDB databases that store chainstate and block index data can become corrupted. Recovery from database corruption requires a full reindex, which takes many hours on even fast hardware. Set up automated monitoring that alerts you when free disk space drops below a defined threshold (e.g., 50 GB for an archival node). Proactive disk management prevents the most common cause of extended node downtime.

Restarting the Node Forcefully Instead of Using bitcoin-cli stop

Killing the bitcoind process with kill -9 or pulling the power plug during operation bypasses Bitcoin Core’s shutdown procedure, which flushes cached data to disk and closes databases cleanly. This increases the risk of database corruption. Always shut down with bitcoin-cli stop and wait for the process to exit completely — this can take 30 seconds to several minutes depending on the dbcache size. Check that the process has exited before restarting.

Not Monitoring Peer Connection Quality

A node with connections but poor-quality peers may still lag behind the network tip or relay transactions slowly. Use bitcoin-cli getpeerinfo to inspect individual peer connections. Look for peers with very high latency (pingtime above 2 seconds) or on very old software versions (subver). Bitcoin Core already disconnects peers that send invalid blocks or malformed messages, except peers you added manually. To drop a specific peer, run bitcoin-cli -named disconnectnode nodeid=ID, replacing ID with the peer’s id from getpeerinfo, and consider using addnode to connect to known reliable peers.

Applying Configuration Changes Without Understanding Their Effects

Copying bitcoin.conf settings from online guides without understanding their implications can degrade performance or security. For example, setting dbcache=8192 on a machine with only 8 GB of RAM will cause swap thrashing and severely slow the node. Setting rpcallowip=0.0.0.0/0 together with rpcbind=0.0.0.0 opens the RPC interface to every address that can reach the machine. Read the Bitcoin Core documentation for each setting you modify and test changes on a non-critical system when possible.

Frequently Asked Questions

How often should I update Bitcoin Core?

Update to each new major release (for example, from 31.x to 32.x) within a few weeks of its stable release. Major releases come about every six months, and Bitcoin Core maintains only the latest three. Minor releases (e.g., 31.1, 31.2) typically contain security fixes and should be applied promptly, ideally within days of release. You do not need to run release candidates in production, but testing them on a secondary node helps the development process and familiarizes you with changes before they reach stable.

What should I do if my node’s database becomes corrupted?

First, stop bitcoind cleanly. Then try starting with the -reindex flag, which rebuilds the block index and chainstate from the raw block data on disk. On an unpruned node this keeps your downloaded blocks and rebuilds all indexes from scratch, taking several hours to a full day depending on hardware. On a pruned node that has already deleted old blocks, -reindex removes the remaining block files and downloads the whole blockchain again. If reindex fails, delete the blocks and chainstate folders and restart bitcoind: it downloads every block again, as on its first sync (the initial block download, or IBD). Keep your bitcoin.conf and wallet files — only the blockchain data needs rebuilding.

How can I tell if my node is contributing meaningfully to the network?

Run bitcoin-cli getnetworkinfo and check the connections_in field. Nodes accepting incoming connections serve block and transaction data to other peers, directly contributing to network resilience. If connections_in stays at 0 long after the node has finished syncing, other nodes can’t reach it; our connectivity troubleshooting guide shows how to fix that. A well-connected node with 50+ total connections (both inbound and outbound), up-to-date software, and consistent uptime provides meaningful value to the Bitcoin network’s decentralization and data availability.

Is it safe to run other applications on the same machine as my Bitcoin node?

Yes, with caveats. A fully synced Bitcoin node uses moderate resources during normal operation: 1-3 GB of RAM, minimal CPU, and intermittent disk I/O. However, resource contention during high-mempool-activity periods or when processing large blocks can cause latency for both the node and co-located applications. Avoid running memory-intensive applications that could force bitcoind into swap. If the machine also holds wallet private keys, minimize additional software to reduce the attack surface.

What is Bitcoin Knots and how does it differ from Bitcoin Core?

Bitcoin Knots is an alternative Bitcoin full node implementation maintained by Luke Dashjr, based on Bitcoin Core with additional features and stricter default policies. Key differences include tighter transaction filtering (smaller default datacarriersize, rejection of certain non-standard scripts), additional RPC commands, and GUI enhancements. Knots has historically tracked Bitcoin Core’s releases and added patches that reflect a more conservative approach to mempool policy, and operators concerned about non-monetary blockchain usage often prefer it for its stricter default filtering. Since 2026 it also differs in consensus: Knots 29.4.1 and later enforce BIP-110 and a BLAKE2b proof of work (a hard fork, according to its release notes), so they follow a different chain from Bitcoin Core. See the 3 November 2026 update in our Core vs Knots comparison.

Related Resources

Part of our free Bitcoin course: This topic is covered in Why Run a Bitcoin Node? Benefits, Requirements and What You'll Need, from the Lightning Network & Bitcoin Nodes course.
Filed under: Bitcoin Nodes & Infrastructure
← Back to All Articles