nginx配置文件恢复

贵司有个小伙伴,敲命令不过脑子,结果把一个服务器的给

1
sudo rm -rf *

虽然很快就按ctrl+c来取消了,但是删除了哪些他根本就不知道,刚好这个机器还没在定时备份策略里。

看来只能手动恢复了。

先登录服务器上执行

1
sudo lsof |grep delete

一眼就看见了一个nginx就被删除了,根据上一篇文章,我们知道这种还在被进程调用的删除可以很快的恢复,直接

1
cp /proc/pid/exe /opt/server/nginx/sbin/ngin

这样进程文件就很快恢复了。可里面的配置呢,这个配置文件可没在/proc/pid/fd/下有显示,是进程启动的时候从磁盘上读入到内存里的。

我们看到fd只有各种socket或者打开的日志文件。

所以我们就从内存里去找吧。首先还要安装gdb工具。

1
2
sudo yum install gdb -y
sudo grep heap /proc/pid/maps

这里要记住第一列值,然后我们使用gdb工具来导出这段内存里的数据

1
2
sudo gdb -p $pid
dump memory /tmp/nginx-memory 0xYYYYYY 0xZZZZZ

这样/tmp/nginx-momory 就是我们要的内存的二进制文件。我们通过strings程序去解析就可以了。

1
strings /tmp/nginx-memory | less

这样就能解析出来对应的配置了,这里因为是内存里,有可能需要自己调整一下格式。至少我的就是比较乱,还好文件分的多,所以每个都比较短,容易找。

终极还是要靠备份来进行。

那是不是所有进程里都有heap呢? 其实并不是的。

这主要跟程序中有无使用malloc相关,如果主线程使用了malloc就会有记录。但是绝大部分程序都会调用的。