跳至主要內容
入門

Backup & Recovery

深入了解 Bitcoin Core 錢包的備份和恢復策略,確保資金安全。

12 分鐘

備份與恢復概覽

正確的備份策略是保護比特幣資產的關鍵。Bitcoin Core 支持多種備份方法, 從簡單的文件複製到完整的描述符導出。了解何時以及如何備份至關重要。

備份要素

私鑰

控制資金的核心,必須備份

描述符

定義如何派生地址

標籤/元數據

地址標籤和交易備註

備份方法

# 方法 1:文件備份(基本)

# 備份錢包文件
bitcoin-cli -rpcwallet=mywallet backupwallet "/path/to/backup/wallet.dat"

# 手動複製(需要先卸載錢包)
bitcoin-cli unloadwallet "mywallet"
cp -r ~/.bitcoin/wallets/mywallet /path/to/backup/
bitcoin-cli loadwallet "mywallet"

# 方法 2:描述符備份(推薦)

# 導出所有描述符(包含私鑰)
bitcoin-cli -rpcwallet=mywallet listdescriptors true > wallet_descriptors.json

# 方法 3:轉儲私鑰(Legacy 錢包)

# 導出所有密鑰
bitcoin-cli -rpcwallet=legacy dumpwallet "/path/to/backup/keys.txt"

# 方法 4:種子詞(如果使用 BIP-39)

# 注意:Bitcoin Core 不原生支持 BIP-39
# 如果通過其他方式創建的種子詞,務必備份

描述符備份詳解

# 導出描述符(不含私鑰)
bitcoin-cli -rpcwallet=mywallet listdescriptors

# 導出描述符(含私鑰)- 用於完整備份
bitcoin-cli -rpcwallet=mywallet listdescriptors true

# 輸出示例
{
  "wallet_name": "mywallet",
  "descriptors": [
    {
      "desc": "wpkh([d34db33f/84'/0'/0']xprv.../0/*)#checksum",
      "timestamp": 1640000000,
      "active": true,
      "internal": false,
      "range": [0, 999],
      "next": 5
    },
    {
      "desc": "wpkh([d34db33f/84'/0'/0']xprv.../1/*)#checksum",
      "timestamp": 1640000000,
      "active": true,
      "internal": true,
      "range": [0, 999],
      "next": 3
    }
  ]
}

最佳實踐: 描述符備份是純文本,可以輕鬆驗證內容,並且可以在任何支持描述符的錢包中恢復。

恢復錢包

# 從文件備份恢復

# 方法 1:直接複製錢包目錄
cp -r /backup/mywallet ~/.bitcoin/wallets/
bitcoin-cli loadwallet "mywallet"

# 方法 2:恢復到新位置
bitcoin-cli restorewallet "restored" "/backup/mywallet"

# 從描述符恢復

# 步驟 1:創建新的空白錢包
bitcoin-cli createwallet "restored" false false "" false true
#                                    ^disable_private_keys = false
#                                          ^blank = false
#                                               ^passphrase
#                                                    ^avoid_reuse = false
#                                                         ^descriptors = true

# 步驟 2:導入描述符
bitcoin-cli -rpcwallet=restored importdescriptors '[
  {
    "desc": "wpkh([d34db33f/84h/0h/0h]xprv.../0/*)#checksum",
    "timestamp": 0,
    "active": true,
    "internal": false,
    "range": [0, 1000]
  },
  {
    "desc": "wpkh([d34db33f/84h/0h/0h]xprv.../1/*)#checksum",
    "timestamp": 0,
    "active": true,
    "internal": true,
    "range": [0, 1000]
  }
]'

# timestamp: 0 表示從創世區塊開始掃描
# 或使用 "now" 表示當前時間(不掃描歷史)

重新掃描

# 恢復錢包後需要重新掃描區塊鏈

# 完整重掃描(從創世區塊)
bitcoin-cli -rpcwallet=restored rescanblockchain

# 從特定高度開始掃描(更快)
bitcoin-cli -rpcwallet=restored rescanblockchain 700000

# 使用 importdescriptors 時指定時間戳
# timestamp 決定從何時開始掃描

# 查看掃描進度
bitcoin-cli -rpcwallet=restored getwalletinfo | jq '.scanning'

# 輸出示例
{
  "duration": 120,
  "progress": 0.456
}

# 掃描時間估算:
# - 完整掃描(prune=0):30-60 分鐘
# - 從高度 700000:5-10 分鐘
# - 修剪節點可能無法完整掃描

注意: 如果使用修剪節點,可能無法掃描已刪除的區塊。建議使用 timestamp 接近錢包創建時間以優化掃描範圍。

Legacy 錢包恢復

# 從 dumpwallet 輸出恢復

# 創建新 Legacy 錢包(已棄用但仍支持)
bitcoin-cli createwallet "legacy-restored" false false "" false false
#                                                              ^descriptors=false

# 導入私鑰文件
bitcoin-cli -rpcwallet=legacy-restored importwallet "/backup/keys.txt"

# 從單個私鑰恢復
bitcoin-cli -rpcwallet=legacy-restored importprivkey "WIF私鑰" "label" true
#                                                              rescan=true

# 從 HD 種子恢復(如果有)
# 注意:需要知道 HD 種子(不是 BIP-39 助記詞)
bitcoin-cli -rpcwallet=legacy-restored sethdseed true "種子"

驗證備份

# 驗證備份有效性

# 1. 比較描述符
# 原始錢包
bitcoin-cli -rpcwallet=original listdescriptors | jq '.descriptors[].desc'

# 恢復的錢包
bitcoin-cli -rpcwallet=restored listdescriptors | jq '.descriptors[].desc'

# 2. 比較餘額
bitcoin-cli -rpcwallet=original getbalance
bitcoin-cli -rpcwallet=restored getbalance

# 3. 比較地址
bitcoin-cli -rpcwallet=original deriveaddresses \
  "wpkh([d34db33f/84h/0h/0h]xpub.../0/*)#checksum" '[0, 10]'

# 4. 簽名測試(可選)
# 創建小額測試交易確認可以正常簽名

# 定期測試備份
# 建議每次備份後在測試環境驗證恢復流程

最佳實踐

備份策略建議:

1. 多重備份
   ├── 至少 3 個備份副本
   ├── 存放在不同地理位置
   └── 使用不同存儲介質

2. 備份內容
   ├── 描述符導出(首選)
   ├── wallet.dat 文件
   ├── 加密密碼(安全分開存儲)
   └── 恢復說明文檔

3. 備份時機
   ├── 創建錢包後立即備份
   ├── 添加新密鑰/描述符後
   ├── 定期備份(每月)
   └── 大額交易前確認備份

4. 存儲安全
   ├── 使用加密容器(如 VeraCrypt)
   ├── 離線存儲優先
   ├── 考慮金屬備份(種子詞)
   └── 防火防水保護

5. 恢復測試
   ├── 定期測試恢復流程
   ├── 使用測試網練習
   └── 記錄恢復步驟

推薦做法

  • • 使用描述符備份
  • • 加密所有備份
  • • 多地點存儲
  • • 定期驗證
  • • 記錄恢復流程

避免

  • • 單一備份副本
  • • 未加密的雲存儲
  • • 忘記備份密碼
  • • 從不測試恢復
  • • 備份和密碼放一起

備份加密

# 使用 GPG 加密備份

# 加密描述符文件
gpg --symmetric --cipher-algo AES256 wallet_descriptors.json
# 輸入密碼後生成 wallet_descriptors.json.gpg

# 解密
gpg --decrypt wallet_descriptors.json.gpg > wallet_descriptors.json

# 使用 OpenSSL 加密
openssl enc -aes-256-cbc -salt -pbkdf2 \
  -in wallet_descriptors.json \
  -out wallet_descriptors.enc

# 解密
openssl enc -aes-256-cbc -d -pbkdf2 \
  -in wallet_descriptors.enc \
  -out wallet_descriptors.json

# 使用 7zip 加密壓縮
7z a -p -mhe=on backup.7z wallet_descriptors.json

# Bitcoin Core 錢包加密
# 錢包本身可以加密
bitcoin-cli -rpcwallet=mywallet encryptwallet "強密碼"
# 注意:需要重啟 Bitcoin Core

災難恢復

災難恢復檢查清單:

□ 找到備份
  ├── 描述符 JSON 文件
  ├── 或 wallet.dat 文件
  └── 或私鑰/種子詞

□ 安裝 Bitcoin Core
  ├── 從官方網站下載
  └── 驗證簽名

□ 同步區塊鏈
  ├── 完整同步需要數天
  └── 或使用 assumeutxo 快速啟動

□ 恢復錢包
  ├── 導入描述符/文件
  └── 重新掃描區塊鏈

□ 驗證恢復
  ├── 檢查餘額
  ├── 檢查交易歷史
  └── 測試簽名功能

□ 更新備份
  └── 確保新環境的備份安全

總結

  • 描述符備份:推薦的現代備份方式
  • 多重備份:至少 3 份,不同位置
  • 定期驗證:測試恢復流程
  • 安全存儲:加密備份,分開存放密碼
已複製連結
已複製到剪貼簿