Runbook: CONFIG_DB の永続化が失敗する (config save 失敗)¶
実行前提
/etc/sonic/config_db.json が破損したまま再起動すると default minigraph / 空 config で起動してしまう恐れがある。config save -y 前に必ず sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.bak.$(date +%s) を取得。問題発生時は backup を cp で戻して sudo config reload -y -f。
症状¶
sudo config save -yがエラーを吐く/etc/sonic/config_db.jsonが 0 byte / truncated- リブート後に変更内容が消える
想定原因(優先度順)¶
- disk full:
/etc/sonicを含む rootfs が満杯 - read-only file system: ストレージ障害で remount-ro
- json schema 違反: CONFIG_DB に YANG 違反データが入っている
- 権限問題: 直接 redis-cli で書き込んだ場合に group/other write 不可
- multi-asic で
config save -yの subprocess 失敗
切り分け手順¶
flowchart TD
A[config save しても再起動後に消える] --> B{config_db.json に書き込まれた?}
B -- No --> B1["config save の戻り値 / 権限を確認"]
B -- Yes --> C{minigraph.xml が優先されている?}
C -- Yes --> C1["/etc/sonic/updategraph.conf を disable"]
C -- No --> D{config_db.json の JSON 妥当?}
D -- No --> D1[sonic-cfggen で syntax 確認]
D -- Yes --> E["load_minigraph / write_standby スクリプトを確認"]
確認コマンド¶
1. ディスク状態¶
- 期待:
rwmount、free 数 GB - 異常:
ro→ dmesg で I/O error 確認
2. ファイルサイズ / 権限¶
ls -la /etc/sonic/config_db.json
sudo file /etc/sonic/config_db.json
sudo jq '.' /etc/sonic/config_db.json > /dev/null
3. config save の verbose¶
4. YANG validation¶
sudo sonic-cfggen -d --print-data > /tmp/cur.json
sudo python3 -c "import sonic_yang; s=sonic_yang.SonicYang('/usr/local/yang-models'); s.loadYangModel(); s.loadData(jsonFile='/tmp/cur.json'); s.validate_data_tree()"
5. dmesg¶
対処方法¶
- disk full:
sudo find /var/log -size +100M -deleteでログ削減 - ro mount: 再起動して fsck 実施
- YANG 違反 key を削除:
sudo sonic-db-cli CONFIG_DB del "<key>"で除外、再 save - backup 復旧:
sudo cp /etc/sonic/config_db.json.bak.<ts> /etc/sonic/config_db.json && sudo config reload -y -f
確認¶
対処後の正常化を以下で裏取りする。
- 症状解消: 「症状」節で挙げた事象 (counter / log / state) が回復していること
- 再発監視: 数分〜数十分の間隔で同コマンドを再実行し、値がフラップしていないこと
- 副作用なし: 関連サブシステム (syslog /
show interfaces counters errors/show ip bgp summary等) に新規 error が出ていないこと - 永続化:
sudo config save -y済みでconfig_db.jsonに変更が反映されていること (恒久対処の場合)
短時間で再発する場合は「想定原因」リストの次候補に進む。
関連ページ¶
引用元¶
-
sonic-net/sonic-utilities @ 39732bceb — config save 実装 ↩
-
sonic-net/sonic-swss-common @ 4305596 — configdb.cpp ↩