上周给一台Catalyst 9300换IOS进ROMmon前我还在跟同事开玩笑说“翻车了大不了usb再灌一次”结果真在rommon里蹲了十分钟。刷完重启的一瞬间看见熟悉的命令行提示符心里才踏实下来。这种事情干多了以后你会发现思科交换机的升级和降级本质上不是“会不会敲命令”的问题而是“有没有把每一步背后的逻辑想清楚”的问题。没人会因为会敲copy tftp flash就被高看一眼真正值钱的是你懂什么时候该升、什么时候该降、文件怎么传、引导怎么切、坏了怎么救。这篇文章就把整个流程拆开讲从升级前的兼容性判断、备份和空间规划到TFTP/SCP/USB三种镜像传输方式的选择再到引导参数的设置、降级操作和ROMmon救援最后是升级后的验证项和常见故障处置。不管你是刚从模拟器转到真机的入门运维还是被生产环境折腾过几轮的老手都可以按图索骥。1. 动设备之前先做好“升级还是降级”的判断很多人拿到新镜像就急着传文件这是最忌讳的。你首先得回答一个问题当前这台设备到底该不该动版本这个问题答错了后面所有操作都是在给事故埋雷。1.1 升级的现实动机安全公告、新功能、生命周期思科交换机升级的驱动力大致有这么几类你可以对照自己的情况来判断。第一类是安全公告驱动。某个CVE影响了你当前的IOS版本思科官方发布修复版本这种情况下升级是刚需优先级最高。尤其是交换机暴露在管理面或者承载核心业务时漏洞修复不能拖。第二类是功能驱动。比如你需要新的协议特性、硬件模块的支持或者想用上较新的管理协议那就要看目标版本是否包含这些能力。第三类是生命周期驱动。硬件平台本身有EOL/EOS思科不再维护老版本你必须迁到思科建议的MDF维护版本上。这类升级没有特别强的紧迫性但拖久了你会发现自己停在了一个没人管的版本上。需要提醒一句如果不是有明确理由不要为了“新”而升级。生产环境里稳定压倒一切。很多设备固件不是升坏的吗恰恰是没事找事升级搞坏的。升级前一定给自己一个站得住的理由写进变更单。1.2 降级背后的典型事故画像降级的场景和升级一样常见而且往往更狼狈。我见过几个人碰到的问题是新版本IOS升级后交换机的CPU使用率长期飘在七八十以上show processes cpu sorted一眼望去某个进程占满了核还有人遇到BPDU处理异常导致生成树震荡也有人碰到配置不兼容、部分命令在新版本里被移除导致原有配置直接报错。这时候最稳妥的选择就是降级回上一个稳定版本。降级不是简单的“把老镜像传上去、改引导、重启”它同样需要判断。比如你的配置里使用了新版本才开始支持的命令降级后这些命令会变成“非法配置”启动时可能被忽略或者直接让你进不了正常模式。这种时候你得提前把配置差异找出来。1.3 从show version建立版本基线不管升还是降第一步永远是先看清当前状态。以下几类信息是必看的命令你需要关注的信息show version当前IOS版本、运行时间、启动镜像路径、硬件型号、DRAM大小show flash闪存总容量、已用、可用、文件列表show running-config当前生效配置尤其是boot system语句show licenseIOS-XE当前许可证状态和授权类型show switch堆叠堆叠成员数、各成员的角色和镜像路径你以为自己知道跑的是什么版本但真到现场发现设备是3750G却想刷一个不支持它的新版这种乌龙我自己就见过。先把基线摸清楚后面选镜像才不会有偏差。2. 备份与空间规划这两件事不做等于裸奔我见过有人在生产交换机上直接传镜像传着传着Flash满了系统提示写不进去。这时候你旧的没删、新的没传完设备处于一个半吊子状态再碰上断电就是一台变砖机。所以升级前必须做好备份和空间规划这不是可选项是必修课。2.1 先算清闪存账IOS镜像体积和可用空间Catalyst老平台像2960、3560、3750闪存一般是32MB到64MB老IOS镜像也就十几二十MB腾挪空间相对充裕。但到了Catalyst 9300这种IOS-XE平台系统包结构完全变了——有cat9k_iosxe.17.x.SPA.pkg这类大型包也有cat9k-rpbase系列包还有AP包和系统配置包单个文件动辄几百MB甚至超过1GB。很多人在“交换机升级ios flash容量不足”上踩坑就是因为没搞清楚自己平台镜像体积和闪存的关系。动手之前用dir flash:看一下目标分区的剩余空间再用show version看DRAM大小确认新镜像体积加上跑配置后的余量是否够用。老平台通常要求留出至少镜像体积1.5倍的空闲IOS-XE平台因为有install模式的解包过程需要更多操作空间最好留出镜像文件大小两倍以上的空间。如果空间不够处理顺序是先备份老镜像到外部TFTP/SCP服务器再删除Flash里用不上的文件比如旧的系统日志、核心转储文件、不再用的IOS备份。不要为了省空间一上来就删当前镜像除非你确定新镜像已经完整传到Flash且校验通过。2.2 备份运行配置copy running-config和archive的区别配置备份是最便宜也最容易被忽略的动作。我习惯在升级前执行copy running-config flash:backup-config-before-upgrade.txt copy startup-config flash:startup-config-before-upgrade.txt这两行能把当前内存配置和NVRAM配置都留一份到Flash。如果你对配置版本管理有更高要求可以用archive特性定期打点配置快照但那种方式更适合长期运维升级前临时备份直接用copy就够了。还需要考虑一点对于堆叠设备成员交换机的配置是独立存放的。9300堆叠里每台交换机都有各自的vlan.dat和config.text备份时最好逐台处理别只备份主交换机就算了。2.3 备份当前IOS为降级留好“后悔药”很多工程师升级前不备份老IOS理由是Flash空间不够。但在生产环境里我最推崇的升级方式是“新镜像上传后旧镜像先不删改好引导重启验证没问题后再清理”。这样万一新版本有问题直接在启动菜单里切回旧镜像就能快速回退半小时内解决战斗。具体操作就是把当前运行的IOS用copy flash: flash:复制一份或者通过copy flash: tftp:传到服务器备份。老平台镜像名字一看就知道大概版本但为了不搞混备份时建议重命名成包含平台和版本号的文件名比如c3560-advipservicesk9-mz.152-2.E11.bin这种。2.4 新平台的特殊处理IOS-XE的install模式和bundle模式升级到Catalyst 9300这代设备镜像概念和老平台不太一样。老式交换机直接引导一个.bin文件就能跑9300上你可以选bundle模式直接引导一个大包也可以选install模式把包解开放进/packages目录每个子系统一个文件。思科从IOS-XE 16.x开始推荐install模式因为包管理清晰、升级回滚更方便。用install add file flash:cat9k_xxx.bin这种命令操作时系统会自动做包校验、解包、更新boot变量。如果这是你第一次接触9300我劝你先把“install模式”和“bundle模式”的差别搞清楚再动手否则你按老教程敲boot system flash:cat9k_xxx.bin会发现命令行为完全不一样。3. 镜像传输的三条路TFTP、SCP、USB怎么选镜像选好、空间算好、备份做好之后接着就是把文件弄到设备上。传输方式我用过TFTP、FTP、SCP、USB这几种。实际生产中按推荐程度排序是SCP约等于USB、优于TFTPFTP只在内网临时用。下面把各自的利弊和套路拆开讲。3.1 TFTP最常用但隐患最多TFTP简单不需要用户名密码一个tftp-server就能跑起来。但正因为简单坑也多。文件大小限制传统TFTP基于UDP4GB以上文件传输需要支持tsize和块大小协商的TFTP服务器否则会传失败。老一点的大IOS包虽然没到4GB但几百MB的9300包用某些老旧TFTP服务端传输经常中断。超时重传跨VLAN或者链路质量不好时TFTP没有拥塞控制大量重传会拖慢传输甚至直接把会话弄断。我通常只在交换机配置简单、镜像文件几十MB以内的老平台上用TFTP。TFTP服务器准备好后目标目录权限要确认否则copy tftp:时还没开始就报错。客户端命令copy tftp://192.168.1.100/cat9k_17.09.04.SPA.bin flash:cat9k_17.09.04.SPA.bin带宽允许的话可以试着加宽窗口大小但很多旧平台命令禁止老老实实用默认值就好。3.2 SCP有AAA环境下的最优解SCP基于SSH有加密、有认证、能续传安全性比TFTP高一大截。缺点是需要在设备上开ip scp server enable并且要用有权限的AAA账号登录。你如果已经用TACACS或者Radius管理网络设备SCP基本不用额外配置。命令套路是在设备上ip scp server enable copy scp://admin192.168.1.100/cat9k_17.09.04.SPA.bin flash:cat9k_17.09.04.SPA.bin系统会提示你输入密码。SCP对服务器端要求也低Linux下直接开sshdWindows可以用WinSCP自带的服务端命令不用额外部署复杂的传输软件。实际传输效率比TFTP高不少大大降低中断概率。3.3 USB适合单机现场升级C9300尤其好用新平台C9300的USB口是很多现场工程师的救星。你只需要把ISO镜像文件放到U盘FAT32格式插到交换机USB口然后dir usbflash0: copy usbflash0:cat9k_17.09.04.SPA.bin flash:cat9k_17.09.04.SPA.bin需要注意几点U盘文件系统格式必须是FAT32NTFS识别不了U盘质量差的会在传输中掉盘建议用品牌的路径名里的文件别带中文和特殊字符传输完成后先verify /md5再拔U盘校验文件完整性。USB传输最大的优势是不依赖网络尤其适合机房现场、带外管理不畅通的情况。唯一副作用是USB口写文件速度受限于交换机硬件几百MB的包可能要等一会儿不用急。3.4 文件校验传完不校验等于白传不管用哪种方式文件传完后必须做完整性校验。思科官方下载页面会给出每个镜像的MD5或SHA512值你在交换机上执行verify /md5 flash:cat9k_17.09.04.SPA.bin或者老平台用verify flash:c3560-advipservicesk9-mz.152-2.E11.bin对比计算出来的MD5和官方给的是否一致。如果不一致重新传。千万别心存侥幸——镜像损坏后最轻的症状是启动失败最重的直接进ROMmon变砖。4. 引导配置镜像刷进去不等于系统切过去文件在Flash里躺着跟系统启动时调不调用它是两回事。很多人“升级失败”其实不是镜像问题而是引导配置写错了。4.1boot system的写法与含义老式IOS平台2960/3560/3750等引导配置长这样boot system flash:c3560-advipservicesk9-mz.152-2.E11.bin这条命令的意思就是让系统从Flash里指定的文件名启动。如果这个文件不存在或者损坏交换机会继续在Flash里找其他可用镜像找不到才进ROMmon。改动后必须保存配置然后手动reload注意先确认自己不会断掉远程连接。比如你通过SSH管理交换机reload后如果新镜像启动失败设备会停留在ROMmon远程连接直接全部断掉需要串口才能救。这就是为什么我反复强调远端操作升级必须慎重最好有console带外在手边。4.2 多条boot system语句的容错逻辑我经常在设备上写多条boot system顺序很重要。思科启动时按配置顺序依次尝试第一条失败后试第二条。所以你想“优先启动新版本、失败切回旧版本”就应该boot system flash:cat9k_17.09.04.SPA.bin boot system flash:cat9k_17.06.04.SPA.bin这样新版本起不来时设备会自动尝试老版本不至于直接进ROMmon。条件是你把两个镜像都放在Flash里。很多老手的兜底方案就是这么做的代价只是多占一点Flash空间但省去了很多窜回机房的痛苦。4.3 保存配置和重启的顺序问题修改引导配置后一定先执行write memory或者copy running-config startup-config。丢失启动配置的教训太常见了重启完发现设备用的还是老镜像仔细查才发现你刚才改的boot system根本没保存到NVRAM。改完配置、检查、保存、再重启四步走一步都不要省。重启前再检查一遍当前时间、密码恢复状态、VLAN数据库。堆叠设备的话reload成员交换机要格外小心最好在低峰期做并且掌握堆叠主备切换对业务的影响窗口。5. 降级操作与ROMmon救援真翻车了怎么捞升级翻车不可怕可怕的是不知道翻车后该怎么办。降级操作和ROMmon救援这两块能让你在关键时刻把设备从砖头边缘拉回来。5.1 降级前必须知道的三个隐藏陷阱第一配置命令兼容性。某些命令是新版本才支持的降级后启动配置解析到这些关键字可能直接报错或者整个配置段被跳过。降级前用show running-config把配置导出来查一下目标版本的命令变更文档思科Release Notes里有“Removed Commands”一栏。逐条过一遍不现实但至少关注路由协议、ACL、QoS这些核心配置。第二License问题。IOS-XE平台降级时如果当前版本包含升级包里的新特性License状态可能对不上。降级前用show license把授权方式记录下来降级后核对授权是否还在。网络功能许可丢失影响很大可能导致某些硬件端口无法使用。第三配置文件默认值变化。降级不只是功能缺失还可能是参数默认行为的变化。这些默认值差异不会报错但会让网络行为悄悄改变更难排查。建议降级后对照基线配置做一遍show run | diff级别的对比。5.2 正常降级的完整流程如果你当前系统还能正常启动降级流程跟升级类似备份当前配置和镜像删除或保留现有镜像看空间上传目标版本镜像修改boot system或执行install命令保存配置重启。等设备起来以后再逐步检查接口状态、协议邻居、CPU和内存使用率。唯一的差别是降级前可以再花点时间做一次配置兼容性审查。特别是从17.x降到16.x这种大版本降级宁可多花半小时也不要省。5.3 ROMmon模式下导入ISOCSICO最后一道保险设备进ROMmon的原因很多镜像丢失、镜像损坏、引导变量配置错误等。在ROMmon下最简单的识别标志是提示符变成了switch:或rommon 1。以C9300为例进ROMmon后switch: set switch: bootset命令能看到环境变量boot命令会尝试按变量引导。如果Flash里确实有完整镜像有时候敲一下boot就恢复了。但如果镜像根本没有那你得重新传一个进去。支持USB平台的ROMmon下可以直接读U盘switch: usbflash0: switch: dir usbflash0: switch: copy usbflash0:cat9k_17.09.04.SPA.bin flash:cat9k_17.09.04.SPA.bin switch: boot flash:cat9k_17.09.04.SPA.bin如果没有USB或者U盘在ROMmon下识别不了就只能尝试网络引导或者XMODEM。网络引导有TFTP方式但需要先给管理口配IP命令在不同平台上的写法有差异不太好记。XMODEM是串口传文件速度极慢几百MB文件基本不现实只适合救一个几十MB的瘦系统或者老平台的小包。5.4 密码恢复和配置救援的“附加题”如果你进ROMmon实在太深连镜像文件名都不确定想恢复出厂引导配置可以试类似confreg 0x2142IOS老平台的寄存器修改或者ROMmon下的unset、set BOOT等操作。让我多说一句这些操作用来救设备没问题但别拿来做密码绕过。有合理带外管理手段的不需要把它当密码后门用。6. 升级后的验证与疑难处置从“能开机”到“敢上线”很多人以为设备能重启、能进命令行就大功告成了。其实“能开机”和“符合预期地工作”之间还有很长的距离。我把升级后的验证和常见疑难分开写就是希望大家把最后这道关守住。6.1 升级后必须过一遍的验证清单设备起来以后按这个顺序做一轮体检show version确认运行版本号、启动镜像路径对得上。show flash确认新镜像在Flash里剩余空间正常。show running-config逐项确认关键配置没有丢失。show interface status看业务接口有没有正常up。show vlan brief确认VLAN数据库正常。show spanning-tree summary确认生成树协议状态正常。show ip route确认路由表完整。show processes cpu和show memory看CPU和内存占用。show logging抓启动和运行日志里的错误关键字。不要只看几条要形成一个清单严肃核对。网络设备变更最怕“看似成功、实则内伤”比如接口起来了但光模块告警、路由表缺一条。6.2 Flash容量不足、镜像传不进去怎么办这个问题往往在传输阶段就会暴露。几个常规解法清空Flash里的core文件、日志文件delete /force flash:core这类。临时用archive download-sw那种覆盖式安装系统会先解包释放空间再清理旧镜像部分平台能解决空间不足问题。把老镜像挪到外部服务器确认新镜像没问题后再删但前提是传输路径稳定。如果Flash太小、新包实在装不下就得考虑是不是镜像选错了比如选了一个不匹配的大包。6.3 启动卡死、循环重启、找不到镜像的处理见过一种现象设备一直自动重启看启动日志发现它反复尝试一个不存在的镜像路径。这种情况十有八九是boot system指向了错误文件ROMmon下用unset BOOT或者重新set BOOT flash:正确文件名就能修。还有一种是启动到一半卡住界面停在某个协议初始化或者“Autoinstall”阶段。Autoinstall常见于没有找到启动配置的交换机它默认尝试从网络获取配置。你可以按CtrlC中断或者设置no service config来关闭这个行为。如果反复重启还带配置丢失检查一下NVRAM没有写保护以及配置寄存器值是不是正常的0x2102。寄存器被改成0x2142后重启不会加载启动配置会直接给你一个空配置CLI这个现象很容易被误判为设备挂了。最后再分享一个小习惯做交换机升级降级这么多年我现在养成一个固定习惯每次动设备前把变更方案、回退方案和风险点写成半页纸放在手边。步骤、命令、预期的验证结果、如果失败怎么回退写清楚再动手。人一旦在设备前手忙脚乱就容易敲错命令写下来能帮你冷静。另外永远假设自己升级后回不去现场。能传到远端服务器或U盘的备份提前传好能留一份旧镜像在Flash里的尽量留好能开带外console的一定开好。这不是胆小是这行干久了都会有的条件反射。思科交换机的升级和降级说到底是一套“准备、执行、验证、兜底”的流程。把每个环节的为什么弄明白比背一百条命令更能让你在真机面前不慌。