Exchange 打完 CU 之后 Outlook 搜索全挂:Content Index 重建实录(含吓出冷汗的插曲)
给 Exchange 2013 装完 CU23 和当月的 Security Update 之后,陆续有用户报障:Outlook 搜索没有结果(老版本 Outlook 客户端为主,走的是服务端搜索)。
确认问题
Get-MailboxDatabaseCopyStatus * | ft -auto
ContentIndexState 一列——所有数据库全是 Failed。CU 更新动过搜索组件之后索引损坏,这在 Exchange 2013 时代是个知名故障。
重建流程全景——红色虚线框就是让人心跳漏一拍的地方
重建 Content Index
标准做法(重建期间搜索不可用、服务器负载会升高,安排在非办公时间):
# 1. 停掉两个搜索相关服务
Stop-Service MSExchangeFastSearch
Stop-Service HostControllerService
# 2. 把数据库目录下的 content index 文件夹删掉(或改名保底)
# 文件夹名是一串 GUID_Single 形态,在 .edb 同级目录
# 3. 重启服务,索引会自动开始重建
Start-Service MSExchangeFastSearch
Start-Service HostControllerService
插曲:服务消失了
按流程停掉 HostControllerService 之后,惊悚的事情发生了——这个服务从服务列表里找不到了,也起不来了。
一瞬间怀疑自己把 Exchange 搜索弄坏了。查了一圈才确认:这是正常现象。Search Host Controller 服务停止后会短暂地从某些视图里消失,这是它的设计(社区里一堆人被同样吓过)。解法毫无技术含量:去 services.msc 图形界面里找到它,手动点启动,就回来了。
重建过程的观察
服务起来之后再查 ContentIndexState,短时间内会显示 Unknown 甚至继续 Failed——别慌,去数据库目录看:新的索引文件夹已经在重建生成中。等它跑完(视邮箱量,几十分钟到几小时),状态会变回 Healthy,用户搜索恢复。
教训
- CU/SU 更新后的 checklist 里加一条:
Get-MailboxDatabaseCopyStatus看一眼 ContentIndexState,别等用户来报「搜索坏了」; - 重建索引期间搜索全程不可用——沟通先行,安排窗口;
- 「服务消失」这种表象要先查证再动手,当时如果慌了去重装搜索组件,才是真正的灾难;
- 状态显示 Failed/Unknown 不代表重建没在跑,以索引文件夹的实际变化为准。