Hyper-V 客户机 EXT4 文件系统损坏的原因

Hyper-V 客户机 EXT4 文件系统损坏的原因

我们在相对较短的时间内第二次损坏了 ext4 分区,据说 ext4 非常可靠。由于这是一台虚拟机,提供资源的主机没有出现磁盘错误或断电等情况,所以我想暂时排除硬件错误。

所以我想知道我们是否有这样一种不寻常的设置(Hyper-V 主机下的 CoreOS 客户机)、这样一种不寻常的工作负载(Nginx、Gitlab、Redmine、MediaWiki、MariaDB 的 Docker 容器)或糟糕的配置。欢迎任何意见/建议。

原始错误消息(第二次)是:

Jun 05 02:00:50 localhost kernel: EXT4-fs error (device sda9): ext4_lookup:1595: inode #8347255: comm git: deleted inode referenced: 106338109
Jun 05 02:00:50 localhost kernel: Aborting journal on device sda9-8.
Jun 05 02:00:50 localhost kernel: EXT4-fs (sda9): Remounting filesystem read-only

此时,e2fsck运行发现了很多错误(没想到要保留日志),并将大约 357MB 的数据放入了lost+found2TB 分区,其中有大约 512GB 的数据。此后操作系统仍可启动,因此丢失的部分似乎位于用户数据或 docker 容器中。

以下是有关受影响系统的更多详细信息:

$ uname -srm
Linux 4.19.123-coreos x86_64
$ sudo tune2fs -l /dev/sda9
tune2fs 1.45.5 (07-Jan-2020)
Filesystem volume name:   ROOT
Last mounted on:          /sysroot
Filesystem UUID:          04ab23af-a14f-48c8-af59-6ca97b3263bc
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg inline_data sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Remount read-only
Filesystem OS type:       Linux
Inode count:              533138816
Block count:              536263675
Reserved block count:     21455406
Free blocks:              391577109
Free inodes:              532851311
First block:              0
Block size:               4096
Fragment size:            4096
Group descriptor size:    64
Reserved GDT blocks:      15
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         32576
Inode blocks per group:   1018
Flex block group size:    16
Filesystem created:       Tue Sep 11 00:02:46 2018
Last mount time:          Fri Jun  5 15:40:01 2020
Last write time:          Fri Jun  5 15:40:01 2020
Mount count:              3
Maximum mount count:      -1
Last checked:             Fri Jun  5 08:14:10 2020
Check interval:           0 (<none>)
Lifetime writes:          79 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      595db5c2-beda-4f32-836f-ee025416b0f1
Journal backup:           inode blocks

更新:

关于主机设置的更多细节如下:

  • 使用 Hyper-V Server 2016
  • 该磁盘基于虚拟磁盘文件(而不是物理磁盘)
  • 磁盘设置为动态的(即不断增长)
  • VM 上有多个快照/还原点。我不确定这是否会将磁盘映像从动态切换为差异(?)

答案1

孤立 inode 包含哪些数据已经是一个足够棘手的问题。存储系统为何会做出这样的事情则更加难以理解。

首先,进行事件响应。检查这些工作负载中是否有任何工作负载出现计划外停机。评估您的恢复选项:独立存储上的任何 DR 环境、备份、数据的其他副本。

在更改任何内容之前,请考虑备份 VHD。允许撤消您的操作,也许您可​​以让支持人员检查损坏的卷。

确定受影响的数据。

  • 运行file这些丢失的 inode 来猜测它们的格式。打开并检查其内容。

  • 对应用程序数据运行完整性检查。

检查存储和计算系统中的所有内容。

  • 存储阵列卷状态:在线、可用容量
  • 单个物理磁盘的运行状况
  • 搜索访客日志以查找与以下相关的每条消息EXT4
  • 运行 Windows 最佳实践分析器。在评论中,我们发现了一条建议不要使用 VHD 动态磁盘

可能没有明显的原因。即便如此,请考虑转移到其他系统以排除硬件问题。如果您在不同的硬件上有一个 DR 系统,请考虑切换到该系统。或者尝试更换较小的组件,例如阵列中的磁盘。或者将虚拟机迁移到不同的计算主机。

相关内容