跳至主要內容
進階

Data Directory

深入了解 Bitcoin Core 的數據目錄結構,包括區塊、索引和錢包文件。

10 分鐘

數據目錄概覽

Bitcoin Core 在數據目錄中存儲區塊鏈、索引、錢包和配置文件。 了解這些文件的結構對於節點管理、備份和故障排除至關重要。

預設位置

# Linux
~/.bitcoin/

# macOS
~/Library/Application Support/Bitcoin/

# Windows
%APPDATA%\Bitcoin\

# 自定義位置
bitcoind -datadir=/path/to/data

目錄結構

~/.bitcoin/
├── bitcoin.conf          # 配置文件
├── debug.log             # 日誌文件
├── .cookie               # RPC 認證 cookie
├── fee_estimates.dat     # 手續費估算數據
├── peers.dat             # 已知節點地址
├── banlist.json          # 封禁節點列表
├── mempool.dat           # Mempool 持久化
├── anchors.dat           # 錨定連接
│
├── blocks/               # 區塊數據
│   ├── blk00000.dat     # 區塊文件(~128 MB)
│   ├── blk00001.dat
│   ├── ...
│   ├── rev00000.dat     # Undo 數據
│   ├── rev00001.dat
│   └── index/           # 區塊索引(LevelDB)
│       ├── CURRENT
│       ├── LOCK
│       ├── LOG
│       ├── MANIFEST-*
│       └── *.ldb
│
├── chainstate/           # UTXO 集(LevelDB)
│   ├── CURRENT
│   ├── LOCK
│   ├── LOG
│   ├── MANIFEST-*
│   └── *.ldb
│
├── indexes/              # 可選索引
│   ├── txindex/         # 交易索引
│   ├── blockfilter/     # 區塊過濾器
│   └── coinstats/       # UTXO 統計
│
└── wallets/              # 錢包目錄
    ├── wallet.dat       # 舊格式錢包
    └── mywallet/        # 描述符錢包
        └── wallet.dat

區塊文件

blocks/ 目錄結構:

blk*.dat - 原始區塊數據
├── 每個文件最大 ~128 MB
├── 包含完整的原始區塊
├── 區塊按接收順序存儲(非高度順序)
└── 當前約 600+ 個文件(~600 GB)

rev*.dat - Undo 數據
├── 對應每個 blk 文件
├── 包含被花費的 UTXO 資訊
└── 用於區塊鏈重組

index/ - 區塊索引
├── 使用 LevelDB 存儲
├── 區塊哈希 → 文件位置映射
├── 區塊高度 → 區塊哈希映射
└── 區塊頭鏈信息
# 查看區塊文件
ls -lh ~/.bitcoin/blocks/blk*.dat | head -10
ls -lh ~/.bitcoin/blocks/rev*.dat | head -10

# 計算總大小
du -sh ~/.bitcoin/blocks/

# 查看最新區塊文件
ls -lt ~/.bitcoin/blocks/blk*.dat | head -1

Chainstate

chainstate/ - UTXO 集數據庫

存儲內容:
├── 所有未花費交易輸出(UTXO)
├── 當前約 8000 萬個 UTXO
├── 大小約 5-8 GB
└── 使用 LevelDB 存儲

鍵值對格式:
├── 'C' + txid + vout → coin 數據
│   ├── 高度(壓縮)
│   ├── 是否 coinbase
│   ├── 金額(壓縮)
│   └── scriptPubKey(壓縮)
│
├── 'B' → 最佳區塊哈希
└── 其他元數據

警告: 絕對不要手動修改 chainstate 目錄。如果損壞,需要使用 -reindex-chainstate 重建。

錢包文件

錢包存儲位置:

舊版(v0.20 前):
~/.bitcoin/wallet.dat

新版描述符錢包:
~/.bitcoin/wallets/錢包名稱/
├── wallet.dat      # SQLite 數據庫
└── database/       # BDB 文件(如適用)

多錢包支持:
~/.bitcoin/wallets/
├── default/
├── savings/
├── trading/
└── coldwallet/
# 列出錢包
bitcoin-cli listwalletdir

# 載入錢包
bitcoin-cli loadwallet "mywallet"

# 創建新錢包
bitcoin-cli createwallet "newwallet" false false "" false true true
#                                    disable_private_keys
#                                          blank
#                                               passphrase
#                                                   avoid_reuse
#                                                        descriptors
#                                                             load_on_startup

配置文件

# bitcoin.conf 示例

# 網路設置
server=1
listen=1
maxconnections=125

# RPC 設置
rpcuser=myuser
rpcpassword=mypassword
rpcallowip=127.0.0.1

# 索引
txindex=1
blockfilterindex=1

# 性能
dbcache=4096

# 網路選擇
#testnet=1
#signet=1
#regtest=1
其他重要文件:

debug.log
├── 運行時日誌
├── 自動輪換(10 MB)
└── 可用 -debuglogfile 自定義

.cookie
├── RPC 認證
├── 格式:__cookie__:隨機值
└── 每次啟動重新生成

peers.dat
├── 已知節點地址
├── 二進制格式
└── 包含上次連接時間

banlist.json
├── 封禁的節點
└── JSON 格式(v22.0+)

mempool.dat
├── 關閉時保存 mempool
├── 啟動時載入
└── -persistmempool 控制

可選索引

indexes/ 目錄:

txindex/(-txindex=1)
├── 交易哈希 → 區塊位置
├── 允許查詢任意交易
└── 增加約 30 GB 存儲

blockfilter/(-blockfilterindex=1)
├── BIP-157/158 區塊過濾器
├── 支持輕客戶端
└── basic 類型約 3 GB

coinstats/(-coinstatsindex=1)
├── UTXO 集統計
├── 支持 gettxoutsetinfo
└── 約 2 GB
# 查看索引大小
du -sh ~/.bitcoin/indexes/txindex/
du -sh ~/.bitcoin/indexes/blockfilter/
du -sh ~/.bitcoin/indexes/coinstats/

# 檢查索引狀態
bitcoin-cli getindexinfo

磁盤空間

組件 大小(約) 必需
blocks/ 600+ GB 是(可修剪)
chainstate/ 5-8 GB
txindex ~30 GB
blockfilterindex ~3 GB
coinstatsindex ~2 GB
修剪模式 ~10-15 GB 替代方案

備份策略

# 必須備份
~/.bitcoin/wallets/          # 錢包文件!

# 建議備份
~/.bitcoin/bitcoin.conf      # 配置
~/.bitcoin/peers.dat         # 節點列表

# 不需要備份(可重建)
~/.bitcoin/blocks/           # 可重新下載
~/.bitcoin/chainstate/       # 可重建
~/.bitcoin/indexes/          # 可重建

# 安全備份錢包
bitcoin-cli backupwallet "/path/to/backup/wallet.dat"

# 導出描述符(推薦)
bitcoin-cli listdescriptors true > descriptors_backup.json

最佳實踐: 定期備份錢包文件,並將備份存儲在多個安全位置。描述符錢包建議同時備份描述符。

測試網路目錄

不同網路的數據目錄:

主網(Mainnet)
~/.bitcoin/

測試網(Testnet3)
~/.bitcoin/testnet3/

Signet
~/.bitcoin/signet/

Regtest
~/.bitcoin/regtest/

每個網路目錄包含相同結構:
├── blocks/
├── chainstate/
├── wallets/
└── ...

總結

  • blocks/:原始區塊和 undo 數據
  • chainstate/:UTXO 集數據庫
  • wallets/:錢包文件(必須備份)
  • 注意:完整節點需要 600+ GB 空間
已複製連結
已複製到剪貼簿