我有一个包含大量虚拟机的生产 ESXI 服务器。几个小时前我停电了,导致我的 UPS 电池耗尽。由于某种原因自动关闭机制不起作用,因此整个系统的电源被切断。
中断之后,除了 mysql 服务器虚拟机之外,一切都恢复正常了。现在它向控制台发送 I/O 错误垃圾邮件。
end_request:严重介质错误,dev sda,扇区 X end_request:I/O 错误,dev sda,扇区 X .... EXT4-fs 错误(设备 dm-1):ext4_wait_block_bitmap:476 通信反弹:无法读取块位图 - block_group = X,block_bitmap = X 正在中止设备 dm-1-8 上的日志 EXT4-fs (dm-1):以只读方式重新挂载文件系统
VM 使用加密的 LVM 设置。
这些错误是什么意思?是硬件吗?我能做些什么?我在谷歌上搜索了几个小时,但不知道该怎么做。我从 live CD 启动,在卸载的根分区上运行 fsck,修复它,重新启动,但问题是一样的。
编辑#1 我尝试了这个,但什么也没发生。
root@ubuntu:~# sudo cryptsetup --key-file=/media/ubuntu/7b225e2d-9c0f-4bd4-a4de-1d2f7a0b4c58/keyfile luksOpen /dev/sda5 myvolume root@ubuntu:~# vgscan 阅读所有物理卷。可能还要等一下... 使用元数据类型 lvm2 找到卷组“mysql-server-vg” root@ubuntu:~#tune2fs -O ^has_journal /dev/mysql-server-vg/root une2fs 1.42.13(2015 年 5 月 17 日) need_recovery 标志已设置。请在清除前运行 e2fsck has_journal 标志。 root@ubuntu:~# e2fsck -f /dev/mysql-server-vg/root \e2fsck 1.42.13(2015 年 5 月 17 日) /dev/mysql-server-vg/root:恢复日志 第 1 遍:检查 inode、块和大小 已删除的索引节点 391687 的 dtime 为零。使固定?是的 发现属于损坏的孤立链表的一部分的索引节点。使固定?是的 Inode 391697 是孤立 inode 列表的一部分。固定的。 Inode 391699 是孤立 inode 列表的一部分。固定的。 Inode 391700 是孤立 inode 列表的一部分。固定的。 第 2 步:检查目录结构 第 3 步:检查目录连接性 第 4 步:检查引用计数 Pass 5:检查组摘要信息 空闲块计数错误(5462594,计数=5462792)。 使固定?是的 索引节点位图差异:-391687 -391697 -(391699--391700) 使固定?是的 组 #48 的空闲 inode 计数错误(7946,计数 = 7950)。 使固定?是的 空闲 inode 计数错误(1854371,计数=1854370)。 使固定?是的 /dev/mysql-server-vg/root: ***** 文件系统已修改 ***** /dev/mysql-server-vg/root:95870/1950240 个文件(0.8% 不连续),2337016/7799808 个块 root@ubuntu:~#tune2fs -O ^has_journal /dev/mysql-server-vg/root une2fs 1.42.13(2015 年 5 月 17 日) root@ubuntu:~# e2fsck -f /dev/mysql-server-vg/root e2fsck 1.42.13(2015 年 5 月 17 日) 第 1 遍:检查 inode、块和大小 第 2 步:检查目录结构 第 3 步:检查目录连接性 第 4 步:检查引用计数 Pass 5:检查组摘要信息 /dev/mysql-server-vg/root:95870/1950240 个文件(0.8% 不连续),2304248/7799808 个块 root@ubuntu:~#tune2fs -j /dev/mysql-server-vg/root une2fs 1.42.13(2015 年 5 月 17 日) 创建日志 inode:完成
答案1
好吧,我想通了,并成功修复了它。花了我两天时间。
首先,我确认存储控制器、数据存储硬件(机械驱动器)和电缆没有故障。请注意,我无法正确访问文件系统上的 vmdk 文件。我尝试使用 scp 和 vSphere Client 将其复制到本地,但过了一会儿,它们都给了我输入/输出错误。
我什至尝试将虚拟磁盘克隆到单独的数据存储。
cd /vmfs/卷/ vmkfstools -i datastore1/vm/vm.vmdk datastore2/vm/vm.vmdk -d Thin -a lsilogic
16% 后它给了我输入/输出错误。
我认为断电导致了 vmfs 文件系统(数据存储)上的一些损坏、过时的锁和诸如此类的问题。我使用 vSphere 磁盘元数据分析器 (VOMA) 检查了 VMFS 元数据一致性。请注意,在运行此命令之前必须卸载数据存储。
voma -m vmfs -f 检查 /vmfs/devices/disks/disk_name:1
它发现了 34 个错误。 vSphere Hypervisor 版本 5.5 中捆绑的 voma 只能查看文件系统。我在救援模式下使用clonezilla将数据存储克隆到新的硬盘驱动器(克隆有坏扇区的磁盘)。之后我升级到VMware ESXi 6.5版本,因为它有更新版本的voma命令。它可以修复错误,所以我运行了以下命令:
voma -m vmfs -f 修复 /vmfs/devices/disks/disk_name:1
它确实做了一些事情。启动虚拟机,但由于以下原因无法获得控制台连接新的 vCenter vSphere WebClient 废话和 vSphere Client 弃用,所以我回到原来的 VMware ESXi 5.5 安装。我成功克隆了上述 vmdk 文件。我使用克隆磁盘启动虚拟机,运行一次 fsck,然后重新启动,瞧。它像预期的那样工作。服务器上线了我的所有数据。
它涉及很多摆弄,但我无法弄清楚其他任何事情。如果有人知道更简单的方法,请随时发表评论。
我确实在事件发生前 12 小时进行了数据库备份,但希望尽可能恢复实时数据。