虽说大品牌的入门级 VPS 不贵,但看着每个月几十块的记录还是有点难受的。毕竟在中国特色网络的限制下,往 VPS 上部署什么服务体验都不会太好,所以我租的 VPS 大部分时间都处于空载状态,偶尔跑点小任务。

寒假那会群友发现一系列特价 VPS 套餐。正巧这时我在常用服务商的余额见底,不如换家便宜的机器用,老机器哪天直接停掉,留点可以应急的余额。

注册账号、充值、创建机器,轻松愉悦的使用体验就开始了——吗?

系统崩溃与灵车 VPS

机器设置完后我就没怎么再碰它,这个月初注销掉老 VPS,顺便登录一下这台灵车 VPS,结果发现服务器的 ssh 指纹变!了!!

把手机掏出来检查一下,确认不是我电脑有问题,真是服务器出问题了,大抵不是被入侵就是有人中间人攻击。我对中间人攻击一无所知,又发现套层代理之后,服务器的指纹也没变成原来的样子,就暂时忽略了中间人攻击的可能。

没有中间人攻击,就是被入侵了呗。但是不对啊,我所有机器都是不允许 root 通过 ssh 登录的,而攻击者要试出我的用户名和长密码又很困难;再说服务器上唯一暴露的就是 ssh 所在端口,我用的 openSUSE 在这方面要是出了高危漏洞,早就该上新闻了。

无视风险继续登录服务器,按照 ssh 密钥的修改时间查找日志,发现竟然是 cloud-init 把密钥改了。cloud-init 应该只在第一次开机才生成密钥才对。继续往前翻日志,发现日志有几个小时的空白,空白前面没有关机信息,后面直接是开机信息。

打开服务商的管理后台,发现 VPS 的资源占用信息也有几小时“没刷新”,这段时间刚好和日志的空白吻合。这说明机器应该停机了几个小时,可能损坏了一些数据,让 cloud-init 认为机器是第一次启动。反正 VPS 上也没存重要数据,我又没有简单的方法挂载个 LiveCD 检查它的文件系统(服务商不让挂载 ISO)。不想继续折腾,直接重装,顺便给服务商发个工单。

几天之后服务器又出现了同样的问题,搞不好服务商提供的系统镜像本来就是坏的。忍无可忍,开始重装系统。不过在讲重装系统之前,我想先说下神奇的技术支持……

工单与灵车 VPS

服务器都没怎么动弹,却有几小时的停机,怎么说服务商也得检查一下嘛。发条工单,前面写了很多废话文学,最后一句让他们检查一下 Hypervisor。

不一会工作人员就回复了:能 ping 通,好着呢。

………………

后面我又直接问了两句,答复也是没有信息量。还是放弃交流为好。

补偿?你想太多!

启动与灵车 VPS

重装系统之前,我还试过用其他方法检查文件系统。不过 xfs_repair 死活不让我检查已经挂载的文件系统;kexec 加载当前系统的内核和 initrd 总会卡住,GRUB 命令行界面还显示不出来,所以想用 initrd 里的工具操作也不方便。

稍微梳理一下,我们现在有:

  • 不能挂自定义 ISO 的 VPS
  • 界面不正常的 GRUB
  • 可能坏了的文件系统
  • 无法交流的技术支持

我就是只菜鸡,为什么要这么对待我……

initrd、系统重装与灵车 VPS

openSUSE 和 Debian 都提供一种自带安装器的 initrd,只要加载了相关内核和 initrd,就能在线安装系统。其中 openSUSE 还能设置 ssh 连接(所以服务商不给 VNC 也没关系),不过 Debian 的我没找到相关选项。

对于我的这种 x86_64 机器,openSUSE Leap 15.4 的相关文件在 https://download.opensuse.org/distribution/leap/15.4/repo/oss/boot/x86_64/loader/ 下(linuxinitrd),Debian 的在 https://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linuxinitrd.gz)。

具体操作 openSUSEDebian 的 Wiki 都有写,不过我觉得 openSUSE 的文档稍微清晰一点。其实如果能连上服务商提供的 VNC,那么只要成功加载安装器,后面的操作就都很简单了,这种情况下直接看 openSUSE 的文档应该也没啥问题。我比较懒,就忽略了文档里调 grubonce 的部分,直接用 kexec 加载了内核和 initrd,结果发现 openSUSE 的能成功这样启动,Debian 的就会卡住,不知道为什么……最后还是通过修改 GRUB 启动项(而且是直接改掉默认启动项,反正改坏了也能重装)来加载了。

openSUSE 在文档中有要求在启动参数(cmdline)中禁用 APIC,不过我这里禁用了启动不了,不禁用反而能启动。大家具体问题具体分析就好,不过如果重启不是很方便(这得是多灵的灵车啊),那最好还是做好折腾的准备。另外 openSUSE 用这种方法在线安装,需要系统有 1.5GiB 内存(毕竟一开机就会吃掉 700 多 MiB)(为啥非要在 initrd 里塞图形界面呢发现图形界面实际是设置好源之后下载的,并没有预装在 initrd 里。至于这 initrd 加载上之后为什么这么大……完全不知道了),Debian 那边需要的内存就小得多。如果头铁非要在 1GiB VPS 上打开 openSUSE 在线安装,就能看到安装程序迅速卡死……内存小的话还是装 Debian 吧。

其它安装方案与灵车 VPS

倘若你和我一样租了台灵车 VPS ……

挂载 ISO 安装镜像

如果服务商提供了挂载自定义 ISO 的选项,那果然还是用安装镜像最方便。另外 GRUB 也能启动 ISO,不过我不清楚具体该怎么操作。

PXE 安装

很多发行版也都有 PXE 安装的文档,有条件的话 PXE 安装也行。不知道会不会比我这样 initrd 远程在线安装方便。

bootstrap

如果想用 ArchLinux,这样操作应该会比较方便,毕竟可以直接拿 vps2arch 啦。或者如果你想自己操作的话,看 ArchWiki 就是了。不过我不用 ArchLinux,当然也不会在服务器上装它,所以这个对我没啥帮助来着……

Gentoo Wiki 也提到过这个方法。

其他发行版理应也能这样安装,不过我没看到社区里有人尝试过。

dd

Alpine Wiki 就有教如何这样重装。不过强行覆盖正在活动的文件系统毕竟是危险操作,这样重装的成功率也不能保证……(其实我在发现 openSUSE 安装器内存不足之后就在试这个,试了好几遍都没成功,最后才跑去找 Debian 文档的……)

总结与灵车 VPS

不要碰灵车 VPS!不要在这种东西上花钱!