前些天,不知道什么原因,家里突然跳闸了。等来电的时候,家里服务器就出现了一些状况,所以开帖记录一下是什么状况,以及笔者是如何处理的。

笔者的家用服务器使用的是ESXi 系统。 ESXi 系统本身没有什么问题, 大部分虚拟机也没有什么问题,只有一个debian 9 的虚拟机出现了问题。 而这个虚拟机运行了笔者大部分的服务,所以这次问题让笔者大感头痛。

debian 9 的问题列表

虚拟机启动

虚拟机无法启动,在启动的时候 提示文件系统有问题。

提示内容大概为: /dev/sda1 contains a file system with errors, check forced

解决方案是: At the (initramfs) prompt, type fsck -f /dev/sda1 to check/repair your file system.

大致意思是在可以输入命令的时候, 输入fsck -f /dev/sda1 进行文件系统的修复。 当碰到询问的时候输入 y 进行修复。

这个修复不是很完美的, 可能会导致部分文件内容出现问题。

docker 容器全坏

笔者成功启动了debian 虚拟机之后, 发现虚拟机上的大部分docker 容器都坏了。 而且docker service 无法正常启动。

经过排查之后, 笔者发现是原来容器的配置文件都损坏了。

  • docker 数据存放的默认目录: /var/lib/docker
  • containers 里面存放了所有的容器数据
  • volumes 存放了数据卷

容器的文件夹里面, 存在一个叫做config.v2.json 的文件, 记录了容器的配置。 笔者发现不少容器的这个配置文件都损坏了, 即该文件不在是一个json文件。 而是一个看似损坏了的二进制文件, 内容已经不再可用了。

解决方案: 删除原来坏掉的容器, 重新建立即可。

在动手删除旧的数据之前,记得先备份一下。

如果读者使用的是docker-compose 方式建立的话, 就可以很方便的重新恢复, 否则就麻烦一些。

如果读者使用的是文件夹映射,那么文件应该没有丢。 如果使用的是docker管理的卷的话, 数据应该也没有丢。

mysql 无法启动

容器恢复之后, 笔者的mysql 也还是无法启动。。 原因不知。。

笔者每次家用服务器意外断电之后, mysql 基本上都会损坏。。 😂

折腾了一番, 笔者并没有发现很好的办法, 只得使用几个月前备份的sql文件恢复了。。 (因为笔者的数据也不算特别重要, 所以也懒得完全恢复了。。

之后笔者写了几个脚本,添加了crontab 的任务,让mysql 每周自动备份一次。

其他

每次恢复都需要时间和精力, 如果经常发生断电的话, 就很令人头疼。。 这时就可以考虑入手一个便宜的UPS。 在突然断电之后 给予服务器正常关机的时间。 (部分ups支持在断电后,自动给机器发送关机命令。 但是一般支持的都是Windows,Linux系统

参考阅读: 家里的网络图示