最近,我们的一台服务器由于 IPMI BMC 故障而挂了。它是 CentOS 6.3 OpenStack 计算主机,为带有 qcow2 后端的 KVM 虚拟机提供服务。
正在运行基于 EC2 Ubintu 可以映像的 VM(precise-server-cloudimg-amd64-disk1.img)。
系统重启后我发现了一件奇怪的事情:VM 上的 ssh 主机密钥被重新创建(13:25 - 重启时间):
root@weather:~# ll /etc/ssh/*key
-rw------- 1 root root 668 Nov 21 13:25 /etc/ssh/ssh_host_dsa_key
-rw------- 1 root root 227 Nov 21 13:25 /etc/ssh/ssh_host_ecdsa_key
-rw------- 1 root root 1679 Nov 21 13:25 /etc/ssh/ssh_host_rsa_key
我还发现在FS恢复过程中删除了一些孤立的i节点:
Nov 21 13:25:23 weather kernel: [ 0.901159] EXT4-fs (vda1): INFO: recovery required on readonly filesystem
Nov 21 13:25:23 weather kernel: [ 0.902688] EXT4-fs (vda1): write access will be enabled during recovery
Nov 21 13:25:23 weather kernel: [ 1.930773] EXT4-fs (vda1): ext4_orphan_cleanup: deleting unreferenced inode 1286
......
Nov 21 13:25:23 weather kernel: [ 1.940810] EXT4-fs (vda1): ext4_orphan_cleanup: deleting unreferenced inode 53755
Nov 21 13:25:23 weather kernel: [ 1.940815] EXT4-fs (vda1): ext4_orphan_cleanup: deleting unreferenced inode 53754
Nov 21 13:25:23 weather kernel: [ 1.940819] EXT4-fs (vda1): 8 orphan inodes deleted
我的问题是:为什么可以重新创建 ssh 密钥?这可能是文件系统数据丢失的结果吗?将来如何防止这种情况发生?
在 libvirt VM 配置中,qcow2 缓存模式设置为直写。主机文件系统是 ZFS (zfsonlinux),放置在带有 BBU 的硬件 RAID 控制器上。
如果这是由于重启时文件系统不一致造成的 - 我感到非常困惑,因为 ssh 密钥文件没有改变,并且所有相关数据都应该同步到稳定的媒体。
答案1
没有人站出来说任何明智之举,因此我只能陈述显而易见的事实。
是的,这可能是由于文件系统中的数据丢失造成的。我不能代表 ubuntu 发言,但 CentOS(RH 样式)sshd 启动脚本提供了在密钥丢失时自动创建密钥的功能,我推测 ubuntu 也会做类似的事情。
如果由于底层主机故障,虚拟机的文件系统已损坏,和这次破坏恰好导致系统的 ssh 密钥丢失,然后我希望它们能够自动再生,并因此而发生改变。
事情是这样的吗?遗憾的是,目前为止,我认为没有人能确定。
如果您的系统已tripwire
损坏,那么您将对 FS 进行某种基线审计,以便与当前状态进行比较,从而对 VM 映像究竟发生了什么做出更明智的决定。事实上,您必须做出业务决策,确定这台机器是否足够敏感,是否值得进行彻底的干净重建,或者您是否只是耸耸肩并接受它。