大家好 在某人看来,这似乎是一个很有指导意义的故事,说明您不应该这样做以及为什么早上进行一项重要的技术工作(在您很少了解的系统中)会导致两天的崩溃和停机。

一个简短的说明是一个业余系统管理员的故事,他刚刚开始涉足虚拟化领域。 关于快照如何无济于事,但是干扰了系统并使系统回滚了一个月的故事,然后在两天的停机时间内,我从那里取出了所有文件并返回了系统。
背景知识
在nix系统上,尤其是在ubuntu服务器(16.04 LTS)上使用了两年之后,我决定尝试虚拟化。 一位朋友建议ESXi作为针对小型服务器的免费解决方案(我的情况:1个处理器+仅8 GB RAM)。 移动过程非常复杂,因为您首先必须在Windows计算机上举起带有vmware转换器的vmware工作站,将完成的系统转移到那里,然后将其提升到esxi服务器上,然后在熟悉的转换器将系统转移到esxi之后。 这是一段漫长而痛苦的旅程。 我进行的并且仍在弹出的传输过程中的主要错误是我使用了薄磁盘。 也就是说,在干净的ubuntu服务器上,磁盘格式化为exfat-4,我在ssd上有223.8 GB的空间。 转向esxi并将磁盘格式化为任何东西都无法理解的格式,我只损失了300 MB,但是由于它们的原因,我无法制作厚磁盘,所以我(后来证明)需要这么多磁盘。
开始
我曾经用ubuntu服务器打柴(当我只是“研究”时),回滚并每月或每两个月重新安装一次系统。 现在,我正在用ESXi打破柴火。 我认为没有必要描述精简磁盘的问题(简而言之,扩展它们的空间后,它们不会在相反方向上“缩小”它,它们也可以超出磁盘上的物理内存量)。 首先,我在同一ssd驱动器上使用了swap,但未在ESXi中正确设置它。 他吃了内存,在那儿写了一些临时文件,然后瘦了。
其次,由于某种原因,我做了快照。 那一刻,我被“好吧,它方便,快捷,全能”这一事实所引导。 仍然不怀疑他们为我植入了什么样的炸弹和慢速炸弹。 第三,我没有关注磁盘上迅速减少的内存量。

领带
第一个钟声是主车在7月17日停车。 邮件已收到有关主机故障的通知。 进入esxi接电话(嗯,突然间可能会发生一些事情),这个虚拟女孩给了我一个令人愉快的消息(不幸的是,没有截图)。 重现弹出窗口的免费软件类似于“对不起,磁盘空间已用完。 您的虚拟机已停止。 清洁该位置,您可以继续使用VM。 重复取消。 当时,该问题通过删除第二个VM(大约16GB)解决了。 但这是一个临时解决方案,因为每天5GB仍会消失在某个地方,尽管系统中这些文件没有增加。
结果,在7月19日晚上,在一个凉爽的星期四,我首先在烤面包机上写了这个问题。 没有答案。 我认为这是由于不受欢迎的esxi标签所致。 谷歌失败之后,之后-删除快照。 在那一刻,5 GB消失了,自由空间变大了,但并没有忘记这个问题。

之后,我只有一点脑子,开始研究快照的层次结构。 最后一个000003当时占用了12GB的空间。 在VM设置中,它被列为从中引导计算机的活动磁盘文件。 我三思而后行,删除了带有活动快照磁盘的硬盘1磁盘文件,并将整个虚拟机的父磁盘插入了它的位置。

系统启动(欢呼),并带有6月30日的文件。 父磁盘上所有文件的最后修改日期。 我怀疑是在今天创建了第一张快照。 从逻辑上讲,没有其他地方了。 在可用空间中,它仍然约为5GB,并且文件不见了。
最初的想法是合乎逻辑的:我做了什么,所有文件都消失了,直到7月19日。 然后我看到快照文件没有被删除。 但是,当我尝试将它们作为主磁盘加载时,ESXi向更改后的父磁盘发誓,该磁盘不应为“自创建子磁盘以来已修改了父虚拟磁盘”,此后两天出现我的永恒错误。
谷歌搜索
时间已经到了凌晨两点,我放弃了所有徒劳的尝试,以便从这些不幸的* -0000?-。Vmdk快照文件中至少获取一些信息。
星期五早上从一个活跃的,非常活跃的Google开始,例如“如何从vmdk获取文件”。 文章,Linux阅读器(Windows程序)以及经常遇到的所有内容。 我将这223 GB的数据从服务器转移到100Mbit通道的Windows笔记本电脑上,这非常痛苦。 我试图在Linux系统上安装vmware格式的ssd磁盘,在其上汇总了vmware-tools,她发誓说版本不兼容(上一个受支持的版本是5,但我的版本是6.5)。 尝试通过Windows和Java打开也是徒劳的。
即使我能够访问(使用Windows上的Linux阅读器程序)* -flat.vmdk文件,但直到6月30日我才收到文件。 所有进一步尝试安装快照文件的尝试均未产生任何结果,该程序在无效磁盘上被诅咒,并拒绝进一步工作。
找到输出
星期五结束了,我筋疲力尽,也为无法返回文件感到不安。 但是星期六成功开始了。 关于Google的错误(为什么我不立即执行此操作是未知的),Google第一行中的“自创建子代以来,父虚拟磁盘已被修改”,提供了指向vmware页面的链接。 一堆可怕的字符,红线和所有这些立即被吓到了。 我打开了链接并留下了它,希望可以找到更容易理解的东西。
它被发现了。 https://communities.vmware.com/thread/323730俄语VmWare论坛和一个类似的问题在Internet上遇到了我。 这可能与我的情况不同,但是向下滚动并阅读注释后,我尝试执行此操作。
在文本编辑器中,通过sftp连接到esxi,我使用父磁盘设置打开了该文件。 .vmdk(不是 -flat.vmdk),我识别了磁盘的CID,然后按照论坛中昵称apavlyuchenko的描述,爬入* -00001.vmdk。
在第一个快照中,CID和parentCID字段应指示父磁盘的CID。 然后在.vmx文件中的字段中
scsi0:1.present =“ false”
scsi0:1.fileName =“ .vmdk”
scsi0:1.deviceType =“ scsi-hardDisk”
将FALSE参数更改为TRUE,将.vmdk更改为 -00001.vmdk。
确实,在那之后,汽车启动了并且没有发誓犯错。 瞧! 在创建第二个快照之前出现了文件!
在论坛上,一位朋友介绍了一种仅从一个快照恢复文件的方法。 但是我的案子很困难(显然是因为我的病,这被称为“用手在工作机器上戳戳所有东西”)。 而且我没有一个快照,但是只有三个。 这是合乎逻辑的,有必要继续更改文件。
所以,我的行动。
打开父磁盘。 找出他的CID。 接下来,将父磁盘的CID复制到磁盘-00001.vmdk的parentCID行(第一个快照)。 在这里,我们查看此快照的CID,并将其复制到驱动器 -00002.vmdk(第二个快照) 的parentCID行中 。 在那里,我们查看此快照的CID,并将其复制到驱动器-00003.vmdk(第三个快照)的parentCID行中,然后,我们爬入 .vmx并在fileName行中指定快照文件的名称(在我的情况下为* -0003.vmdk)
结果如下。
* .vmdk
CID = 387edddf
parentCID = ffffffff
* -00001.vmdk
CID = 0284jf712(我从粗体中取出了所有CID)
parentCID = 387edddf
* -00002.vmdk
CID = 732fhhtud
parentCID = 0284jf712
* -00003.vmdk
CID = 3747jfj4ff
parentCID = 732fhhtud
.vmx
scsi0:1.present =“ true”
scsi0:1.fileName =“ -00003.vmdk”
scsi0:1.deviceType =“ scsi-hardDisk”
打开虚拟机,看到数据已还原。 似乎放开了。 我将所有内容复制到另一台服务器,停止计算机(它已经在尖叫磁盘故障和一些其他严重问题),返回* .vmx设置,然后将文件复制回工作计算机。 万岁。
结论
这个故事教会了我一些以前无法理解的黄金真理。
首先,始终备份所有内容,而不是像以前一样备份到虚拟机内部的磁盘上。 必须有一个甚至两个备份驱动器,这样才不会有两天的停机时间。 (文件消失了吗?我们回滚,从备份中复制文件,再复制一个简单的文件-不是48小时,而是2小时)。第二,早上一个沉重的头什么也不做(如果我上床睡觉,星期五我会头干净)到另一个出口,但是在晚上的第二个小时没有打破柴火。)第三,不要对工作机器做任何重要的修改。 脱掉第二个虚拟机,在其中创建快照,然后将父驱动器作为主要驱动器,然后查看随后发生的事情-这样就完成了。 第四,做更多的备份。 不仅是VM,还是esxi本身。
最终帮助我的PS资源:
与令人惊奇的apavlyuchenko的同一个论坛(如果不熟悉,我们不熟悉)
vmvara知识库上的页面,其中描述了我的问题及其解决方法
我用的图片
如果有人感兴趣,可以在评论中留下那些文章对我没有帮助的资源
s
不幸的是,这个地方消失的问题仍然很重要。 如果您有想法或希望帮助我解决这个问题,请发表评论。 我们可以在那里谈论它。 或者,如果您知道另一种从快照磁盘恢复文件并希望共享的方法,那么我将有兴趣阅读它。 谢谢啦