Runbook: config save 後に予期しない diff が出る¶
実行前提
diff の正体が「default 値の materialize」「動的 generate される runtime key」「他エージェントの commit」の 3 種に分類できる。盲目的に config replace を回すと runtime key を消して reload 後に挙動が変わる場合がある。事前に sudo cp /etc/sonic/config_db.json /etc/sonic/config_db.json.bak.$(date +%s)。
症状¶
config save -y直後でもgit diff相当の差分が出続ける- runtime 上は変更していないのに save の度に key が増減
- 別 admin の操作と衝突した可能性
想定原因(優先度順)¶
- default 値の auto-fill: minigraph / hostcfgd が起動時に default を埋める
- runtime-only key の永続化:
BUFFER_PG等 dynamic computed が save に乗る - multi-asic の
config saveで namespace 不整合 - 手動で
sonic-db-cli SETした値が runtime のみ反映
切り分け手順¶
flowchart TD
A[config save の diff が想定外] --> B{他オペレータの変更?}
B -- Yes --> B1[audit log / history で操作を特定]
B -- No --> C{自動生成 entry?}
C -- Yes --> C1[hostcfgd / port-init.py の自動追記を確認]
C -- No --> D{YANG validation エラー?}
D -- Yes --> D1[sonic-cfggen --validate でログ確認]
D -- No --> E[手動編集と save の順序を確認]
確認コマンド¶
1. 現 running と保存 config の差分¶
sudo sonic-cfggen -d --print-data > /tmp/run.json
sudo diff <(jq -S . /tmp/run.json) <(jq -S . /etc/sonic/config_db.json) | head -50
2. dynamic buffer 等の自動 key 確認¶
traditionalかdynamicか- dynamic の場合は BUFFER_PG 等が自動生成
3. multi-asic の各 namespace¶
sudo sonic-cfggen -d --print-data -n asic0 > /tmp/run.asic0
sudo diff /tmp/run.asic0 /etc/sonic/config_db_asic0.json | head
4. hostcfgd の auto-fill¶
対処方法¶
- 一旦
sudo config save -yを再実行して安定化 - multi-asic:
sudo config save -y(新しい multi-asic 対応版で各 namespace 同時 save) - runtime のみで良い key は CONFIG_DB から削除し save し直す:
sudo sonic-db-cli CONFIG_DB del "<key>"
関連ページ¶
引用元¶
-
sonic-net/sonic-utilities @ 39732bceb — config save ↩
-
sonic-net/sonic-swss-common @ 4305596 — configdb get/set ↩