跳到正文
MyDSH我的 DSH 实战笔记
English
独立维护,非DeepSeek官方;与mydsh.dev等其他MyDSH站点无关联。

首页/模型、权限与安全/工作区隔离与备份

配置被覆盖后怎么完整恢复:演练一次

升级、换版本、或者手滑改了 cordis.patch.yml 之后,行为变了但说不清丢了什么。

已核验版本与环境核验日期2026-11-14
宿主版本
0.1.2-alpha.5
恢复对象
~/.dsh/profiles
核验日期
2026-11-14

可复制指令

cd ~/.dsh && tar -czf ~/dsh-profiles-$(date +%Y%m%d).tgz profiles

恢复这件事只有两种状态:有备份,十分钟搞定;没备份,从头配一遍。演练的意义是让你在还没出事的时候确认自己处于第一种。

备份(现在就做,一分钟)

cd ~/.dsh && tar -czf ~/dsh-profiles-$(date +%Y%m%d).tgz profiles
ls -lh ~/dsh-profiles-*.tgz

profiles只要1 MB量级,没有理由不备。

演练:故意改坏一处,再恢复

  1. 先确认现在能跑:dsh --profile web --dump-config | head
  2. 故意加一行非法内容到 ~/.dsh/profiles/web/cordis.patch.yml,确认启动报错。这一步是为了知道「坏了长什么样」。
  3. 解压备份覆盖回去。
  4. 再跑一次dump,确认恢复正常。
cd ~/.dsh && tar -xzf ~/dsh-profiles-20261114.tgz && dsh --profile web --dump-config | head

注意:cordis.yml 不是该改的那个文件

本机 cordis.yml 的顶部注释写得很明确:

# dsh profile root — an empty entry list. The tree is composed as patches:
# each bundle in package.json's dsh.profile.bundles, then cordis.patch.yml, then any
# --patch overlays. Edit cordis.patch.yml, not this file.
[]

合成顺序是:package.json 里的bundles → cordis.patch.yml → 命令行 --patch。所以改 cordis.yml 基本等于白改——它会被后面的层盖住,而你还以为自己的配置生效了。

这条是恢复演练里最容易踩的坑:你以为改了配置,其实改的那份每次启动都重写或被覆盖。恢复之后先确认你改的是patch层。

没备份怎么救

  • dsh --dump-default-config 能打出不带用户层的默认树,对照它找出你多改了什么。
  • 照上一页重新生成一份profile:cp -r 另一个还能跑的profile,再按记忆逐条加回改动。
  • bundles列表在 package.json 里,重建profile时它是最容易漏的一项。

怎么算跑通

照着逐条对,全过才算完成。有一条没过,先解决它再往下。

  • 备份包存在且能解压
  • 演练中故意改坏后确实启动失败(知道坏了长什么样)
  • 恢复后dump-config正常运行
  • 知道自己应该改cordis.patch.yml而不是cordis.yml

会失败在哪

现象 / 原因 / 怎么办,按实际踩到的顺序写。

现象原因怎么办
改了cordis.yml但配置没变它被bundles与patch层覆盖,官方注释写明不要改这个文件改cordis.patch.yml
恢复后仍然报错备份本身是在坏的状态下打的用 --dump-default-config对照,找出非法项;或从另一个可用的profile复制

来源

标「已核验」的,来自本站实跑;标「公开资料整理」的,逐条附出处。