做得越多,错得越多
昨天公司某个项目发版,因项目还没有 CICD 所有操作都需要手动直接,项目由多节点组成,共享挂载一台 NAS 作为公共文件服务使用,原本项目直接通过挂载到项目目录来实现,我在测试环境尝试了软连接可行后便在这次发布中将项目修改为软连接到 /mnt/nas
目录实现。
但是由于配置限制了跨站引入,无奈又得换回挂载到项目目录中去,需要手动删除创建的软连接。
然后在一次操作中,返回了 rm: cannot remove 'data': Device or resource busy
,这错误我可太熟悉了,详见:记一场服务器事故。第一反应我是不是删错目录了。立马执行 pwd
和 df -h
发现这个目录我已经操作过了,当前的 data 目录不是软连接,是一个挂载目录!
我不会把 NAS 上的数据删了吧?执行 ls -al /mnt/nas/data
返回空,空的是目录也同样是我的脑子。
此时已是深夜十一点多了,联系运维怕是来不及了,冷静下来后查找历史备份,解压历史备份的 tar 包,复制解压文件到 NAS 目录中,验证文件完整性,过去的每分每秒,指尖的敲下命令的字符都如此清晰。
覆盖完后,站点终于恢复正常,擦了擦额头的冷汗,望着窗外,一切都还这么美好。
后续思考,首先还是要完善项目 CICD,其次是备份一定要完善,最重要的是执行变更操作时还需要足够细心。
以后发版这种事儿还是协商到中午搞,毕竟这种问题再出几次早晚都要去踩缝纫机了。
现在还有没用 Docker 什么东西实现自动化部署的公司么,个人建议可以试试看 Jenkins,也是一个比较成熟的工具,我自己的个人网站也在用(只是没钱买好的服务器,用的自己家电脑 + Frp 连接)
@保罗 一些老的项目且发版频率较低的项目现在还没有改造 CICD,每次发版都如履薄冰,我称之上古时代的宝贝。∠( ᐛ 」∠)_