断电后出现 I/O 错误,文件系统重新挂载为只读

断电后出现 I/O 错误,文件系统重新挂载为只读

我有一个包含大量虚拟机的生产 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 小时进行了数据库备份,但希望尽可能恢复实时数据。

相关内容