先撂个结论:重装之后发现数据丢了,能不能捞回来,多半取决于你发现之后那半小时干了什么,而不是取决于运气。服务器重装系统盘这个过程,听着像是把一台机器从头再来一遍,实际上大多数装法只是往盘的开头写了一份系统、重建了分区表、把原来的文件索引清掉——正文数据还趴在原来的位置上,只是没人告诉系统该上哪儿去找它了。有点像把一本书的目录页撕下来扔了,书还在架子上,就是翻起来费劲。当然这句话成立有个前提,你没继续往那块盘上写新东西。

服务器重装系统盘,真正被动到的是哪几块
拆开说。分区表在盘最前面那一小段,系统一装,这块基本被重写;格式化清掉的是 inode 和目录项这类元数据,说白了就是告诉系统哪个文件住在哪个扇区的那些登记记录;至于镜像写入覆盖的范围,看系统本身多大,一般就占前面几个 GB。所以普通的重装,盘后半段的旧数据很多时候是原地不动的。麻烦的是另一种操作——用 dd 整盘镜像往下灌,或者重装时顺手把整盘重新分区格式化,那就是真把每个块都过一遍了。云主机上的「重装系统」各家实现不一样,有的换一块盘,有的只是在原盘上重写镜像,有的产品系统盘和数据盘分开、重装只动系统盘。旧盘到底是保留还是销毁,以服务商控制台的产品说明或者工单答复为准,别自己猜。
第一反应别是去找恢复软件,是停手
见过太多人一发现文件不见了,立刻在服务器上装个恢复工具准备开跑。装这个动作本身就在往盘上写东西,写进去的每一块都可能正好压在你要救的那块数据上。正确顺序是先让这块盘停止一切写入:能关就关掉实例,把盘卸下来挂到另一台机器上做只读挂载,或者先在能操作的地方对整个盘做一次镜像,后面所有恢复动作都在镜像上做,原盘封存。物理机把盘拔出来挂到另一台机器上,用 dd 备份:dd if=/dev/sdb of=/backup/disk.img bs=4M conv=noerror,sync,这条命令里 conv=noerror 是关键,盘上有坏道的时候它会跳过去接着读,不至于半路停下。镜像做完,那个 img 文件就是你的现场,随便折腾。
云主机和托管机房的救法,是两条路
云上的先别慌着动手,打开控制台翻三样东西:快照、自动备份策略、自定义镜像。有些机器开着定期快照,回滚一下可能就回来了,代价是回到快照那个时间点,中间那几天的新数据没了,这个取舍得自己判断。再就是提工单问清楚重装时对旧盘做了什么处理,有的服务商会保留一段时间,有的直接释放,问清楚比事后猜有用。托管在机房的物理机就老实走拔盘那条路,最好找块一样接口的盘或者转接线,别在服务器本机上折腾。还有一条容易忽略的:重装前把 /etc 下面那些配置文件、证书私钥、数据库账号密码单独打包弄出来,这些东西体积小,丢了比重装系统还麻烦。
那些看起来聪明的自救,多半是给现场添乱
列几个常见的。反复重启,每次启动系统都可能往盘上写日志和临时文件。跑磁盘修复工具扫描,那个工具本身就是往盘上写修复记录。把这块盘插回原机器当系统盘启动,想靠系统自带的功能找回来,等于让系统重新在这块盘上铺一遍自己的东西。还有把恢复出来的文件直接存回同一块盘,这是最要命的一种,等于自己把证据销毁了。硬盘有异响的,比如咔哒咔哒那种,别通电了,机械盘的磁头一旦划伤盘片,专业恢复也救不回来,这种情况找有洁净间的机构处理。
有几种情况,抱的希望别太大
SSD 加 TRIM,是恢复率很低的一种组合。系统删文件的时候会告诉主控哪些块不要了,主控在后台空闲时就把这些块真的擦掉,等你发现的时候数据物理上已经不在了。全盘加密的盘也一样,没有密钥,恢复软件扫出来全是乱码,连文件头都认不出来。再就是 RAID 阵列,单块盘拔下来读不出完整数据,得整组一起做镜像,顺序和参数都不能错,这种自己动手基本没戏。另外被 dd 整盘写过、或者盘已经写满过一轮的,运气好的能捡回一些碎片,能完整打开的文件不多。判断这些之前,先搞清楚自己的盘是什么类型、有没有开加密,别盲目上工具。
与其事后抢救,重装前那十分钟更值钱
顺序大概是这样:先做快照或者整盘镜像,再把数据库导出来,命令行的 mysqldump 或者面板自带的导出都行,导出来的 sql 文件另存到别的机器上;然后把网站目录、上传附件、日志目录打包;再抄一份系统里装过哪些软件、跑的哪些服务、开了哪些端口;最后确认一遍备份文件能在另一台机器上打得开——备份不开箱验货,等于没备份。这几步做完再点重装,心里就踏实了。反过来,如果你现在正卡在「已经重装完了」这一步,别急,按这个顺序走:停止写入、确认介质类型和加密状态、做整盘镜像、再考虑是自己用工具扫还是送专业机构。
最后留一句:重装系统本身是个十几分钟就能干完的活,真正花时间的永远是你重装之前那点准备。手上有备份的人,重装是重启;手上没备份的人,重装就是赌。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!