> 背景速览:做数通运维这几年,我自己实测过不下十次华为 S 系列交换机”配置看着都在,重启就丢”的诡异故障。说白了,这类问题十有八九是配置文件优先级没搞清楚——尤其是改了启动路径、又用了 `backup.cfg` 双保险之后,启动顺序一乱,场面就直接破防了。这篇文章就把这套排障流程掰开了讲,按步骤照着做就行。

一、故障现象:哪些”症状”算配置丢失?

先把现场常见的几种”配置丢失”摆出来,免得你对着错误的方向排查:

  • 重启即丢:交换机断电重启后,所有配置(VLAN、接口、路由、ACL)全部归零;
  • 部分丢失:只有少数命令回到出厂状态,其余配置完好;
  • 启动慢 / 卡在 “Press Ctrl+B”:说明启动文件指向了一个不存在的 `.cfg` 文件;
  • `display startup` 显示路径和实际运行配置对不上:当前生效的是 `startup.cfg`,但你明明手动指定过 `backup.cfg`;
  • 换板/换主控后配置漂移:堆叠或集群场景下,从交换机配置被主交换机覆盖。

如果以上症状命中两条以上,大概率就是启动文件优先级那条线出了问题。下面我们直接进正题。

二、踩坑实录:一个真实的「配置消失」现场

去年给客户部署一台 S5731-S24P4X 做接入层改造,三层架构跑得稳稳的——这型号是华为 S 系列里当下出货量很大的一款。结果某天园区断电恢复后,VLAN 配置全没了,IP 也没了,业务直接瘫了一片。

到场一看:

  • `display startup` 显示启动文件是 `flash:/startup.cfg`,存在;
  • `dir flash:/` 里同时有 `startup.cfg` 和 `backup.cfg`;
  • 但 `display current-configuration` 是空的。

问题在哪?原来上一任工程师做过一次手工切换,把 `startup` 指向了 `backup.cfg`,然后 `save force` 了一下。但是中间又手动编辑过 `startup.cfg`(没保存),结果重启时 VRP 按优先级逻辑读到了过时的那份。这事儿说白了,就是配置文件优先级 + 双备份机制这套玩法没彻底摸透。

下面把完整排查步骤拆给你看。

第一步:先看”启动配置”,别上来就乱 save

很多人一看配置丢了,第一反应就是 `save`,但这其实是最坑的操作——你可能把错误的当前配置直接固化到启动文件里,再重启就更回不去了。

先看两条命令:

<HUAWEI> display startup

这条命令会告诉你:

  • MainBoard startup saved-configuration:主控板下次启动加载的配置文件路径
  • SlaveBoard startup saved-configuration:备板(如果有)的启动路径
  • Next startup saved-configuration:下一次启动要用的文件

再确认一下 VRP 版本和文件系统:

<HUAWEI> display version
<HUAWEI> dir flash:/

`dir flash:/` 这一步必须看,因为要确认:

  1. `startup.cfg` 和 `backup.cfg` 实际大小——空文件一般只有几百字节,正常配置至少几 KB;
  2. 修改时间——哪个是新的、哪个是旧的,心里有数;
  3. 有没有被 `unzip` 或 `delete /unreserved` 误删。
踩坑提醒:S5731-S 系列较新批次预装的是 VRP V200R022 及以上版本(具体以设备 `display version` 输出为准,老设备请按实际版本号判断),启动优先级逻辑和老版本一致,但文件路径在大容量 flash 下可能显示为 `flash:/switch/startup.cfg`,注意看完整路径。

第二步:摸清 VRP 启动顺序与配置文件优先级

华为 VRP 启动时读配置的顺序是这样的(这是整个排障的核心):

  1. 先读 `display startup` 里”Next startup saved-configuration”指向的文件;
  2. 如果这个文件不存在或损坏,回退到默认 `flash:/startup.cfg`;
  3. 如果默认文件也不存在,设备启动后进入空配置模式;
  4. `backup.cfg` 不会参与启动加载,它只是你手工维护的一份冗余备份。

所以你看到的”配置丢了”,其实有几种典型触发场景:

触发场景 典型表现
`startup` 指向了不存在的 `.cfg` 重启后空配置
`startup.cfg` 被手动编辑未保存,重启读取旧版本 部分配置回退
`backup.cfg` 比 `startup.cfg` 新,但启动路径没切 启动用的是旧版本
升级 VRP 后新版本不识别旧配置 部分命令被丢弃
CF 卡 / flash 损坏 所有配置都无法加载

把现场对照这个表,先定位是哪种场景,再下手修。

第三步:执行保存与恢复——四种核心命令按需选用

这一步是原稿精华,四个命令我整理在一起,方便你直接复制粘贴,但每种用法对应不同场景,别用错:

方式一:将当前配置强制保存到默认的 startup 文件(推荐)

# 方式一:将当前配置强制保存到默认的 startup 文件(推荐)
save force

适用场景:当前 `display current-configuration` 显示是对的,但你担心重启会丢——直接 `save force` 把当前运行配置固化到 `startup.cfg`。

注意:`save` 和 `save force` 的区别是,`force` 会跳过”是否覆盖”的交互确认,适合脚本批处理;手动操作时两个都行。

方式二:手动指定下次启动配置路径

# 方式二:手动指定下次启动配置路径
startup saved-configuration flash:/startup.cfg

适用场景:你明确要把”下次启动加载哪个文件”指到 `startup.cfg`,比如刚从 backup 恢复完之后,要把这个路径重新固化。

方式三:把启动路径切换到 backup.cfg

# 方式三:把启动路径切换到 backup.cfg
startup saved-configuration flash:/backup.cfg
save force

适用场景:你对比过 `backup.cfg` 和 `startup.cfg`,确认 backup.cfg 才是正确版本,并且你希望长期让 VRP 从 backup.cfg 启动——直接 `startup saved-configuration` 把启动路径切过去。这步的关键是”启动路径已经指过去了,下次重启就走 backup.cfg”。

方式四:把 backup.cfg 内容覆盖回 startup.cfg

# 方式四:把 backup.cfg 内容覆盖回 startup.cfg
copy flash:/backup.cfg flash:/startup.cfg
startup saved-configuration flash:/startup.cfg
save force

适用场景:你希望”未来启动仍然读 startup.cfg”,但 startup.cfg 的内容已经坏了,所以先 `copy` 把 backup.cfg 整份覆盖回 startup.cfg,再把启动路径指回 startup.cfg,最后 `save force` 固化当前运行配置。

说白了,方式三是”切启动路径指向 backup.cfg”,方式四是”把 backup.cfg 倒回去覆盖 startup.cfg,再把路径指回 startup.cfg”——意图完全不一样,命令也因此不同,别混着用。

第四步:验证修复结果

这一步千万别省。修完之后,必须确认三件事:

  1. 启动路径对了;
  2. 当前配置和你期望的一致;
  3. 重启一遍真的不会丢。

4.1 确认启动路径

<HUAWEI> display startup

预期输出(修复成功后):

MainBoard:
  Startup saved-configuration file:    flash:/startup.cfg
  Next startup saved-configuration file: flash:/startup.cfg
SlaveBoard:
  Startup saved-configuration file:    flash:/startup.cfg
  Next startup saved-configuration file: flash:/startup.cfg

4.2 对比当前配置和启动配置

<HUAWEI> display current-configuration
<HUAWEI> display saved-configuration

两条命令输出应当完全一致(行数、字符都一致)。如果出现差异,说明 `save force` 没执行成功,或者保存到了错误路径。

小技巧:可以配合 `compare configuration` 命令做差分比对:
<HUAWEI> compare configuration

输出会以 `+` `!` `-` 标记差异行,一眼就能看出哪儿对不上。

4.3 模拟重启(强烈推荐)

在条件允许的情况下,做一次真正的软重启来验证:

<HUAWEI> reboot

重启后再次登录,执行 `display current-configuration`,如果配置还在——恭喜,坑踩完了,可以松口气。如果还是丢,回去看 `dir flash:/` 里文件大小和修改时间,多半是 flash 介质出问题或者 startup 路径又指错了。

三、避坑指南:2026 年我整理的几条血泪经验

这部分是我自己踩过、或者看同行踩过的真实案例,比命令本身更重要,建议收藏:

  1. 永远不要裸改 `startup.cfg`:先用 TFTP / SFTP 把文件备份出来,编辑完再传回去,别直接在设备上 `delete` + `mkdir` 操作文件,VRP 有时候会因为文件锁出问题。
  2. `save force` 之前先看一眼时间:交换机时间不对的话,配置文件的”修改时间”会误导你判断新旧。
  3. CF 卡扩容后记得重新指定启动路径:S5731-S 升级到大容量 flash 之后,路径可能从 `flash:/` 变成 `flash:/switch/`,老配置里写死的 `flash:/startup.cfg` 会失效。
  4. 堆叠环境慎用 `save force`:堆叠里从交换机 `save force` 可能触发和主控的配置同步冲突,先 `display stack` 看主备状态。
  5. 升级 VRP 前必做 backup:尤其是跨大版本升级(比如从 V200R 系列升到 V600R 系列),部分私有命令会失效。

四、FAQ:工程师最容易问的几个问题

Q1:`save` 和 `save force` 到底有啥区别?
A:`save` 会交互式问你 “Are you sure?”,`save force` 跳过这一步直接写。脚本和自动化场景必须用 `force`。

Q2:`backup.cfg` 是 VRP 自动生成的吗?
A:默认情况下不是。VRP 不会自动给你生成 `backup.cfg`,这个文件需要你自己手工用 `copy` 命令把 `startup.cfg` 复制一份过去(比如 `copy flash:/startup.cfg flash:/backup.cfg`),或者在自动化脚本里定期备份。所谓 `backup.cfg` 是”上次确认能用的快照”——这个说法没错,但前提是你手动维护了它。

Q3:能不能让 `startup.cfg` 和 `backup.cfg` 都加载?
A:不能。VRP 启动只读一个配置文件,`backup.cfg` 只是冗余备份,不参与启动加载。如果你想要双保险,就手工维护两份,并把 `startup` 指向最新的那份。

Q4:S5731-S 和老的 S5720 排障命令一样吗?
A:核心命令(`display startup`、`save force`、`startup saved-configuration`)完全一致。但 S5731-S 较新批次预装 VRP 版本更高,部分 `display` 输出格式有微调(比如多了 `Next startup` 行),看的时候注意对应字段。

Q5:配置丢失但 `dir flash:/` 显示文件都在,是为啥?
A:九成是文件损坏。可以尝试 `fixdisk flash:/` 修复文件系统,或者把文件拷出来用 `disassemble` 类工具做完整性检查。

Q6:升级 VRP 后配置丢失,是不是升级失败了?
A:不一定。VRP 大版本升级会对配置做兼容性裁剪,不兼容的命令会被静默丢弃。建议升级前用 `display current-configuration | include` 关键命令做一次快照。

五、写在最后

说真的,配置丢失这种故障不可怕但很烦,烦在排查路径不对就会越修越乱。把这套”看启动 → 摸优先级 → 选命令 → 验证”的流程走一遍,95% 的现场都能搞定。

如果你是网络运维新手,老老实实把 `display startup`、`display saved-configuration`、`dir flash:/` 这三条命令输出背下来,每次改配置前后都对照看一眼,基本就不会再踩这个坑。这三条命令说白了就是华为交换机排障的”天花板三件套”,拿捏住优先级,问题就稳了。