我们在相对较短的时间内第二次损坏了 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+found
2TB 分区,其中有大约 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 来猜测它们的格式。打开并检查其内容。对应用程序数据运行完整性检查。
- GitLab 包装
git fsck
了一项任务。鉴于系统日志消息表明 git 二进制访问了问题数据,因此特别相关。 - 对您的 DBMS 运行检查。
- GitLab 包装
检查存储和计算系统中的所有内容。
- 存储阵列卷状态:在线、可用容量
- 单个物理磁盘的运行状况
- 搜索访客日志以查找与以下相关的每条消息
EXT4
- 运行 Windows 最佳实践分析器。在评论中,我们发现了一条建议不要使用 VHD 动态磁盘。
可能没有明显的原因。即便如此,请考虑转移到其他系统以排除硬件问题。如果您在不同的硬件上有一个 DR 系统,请考虑切换到该系统。或者尝试更换较小的组件,例如阵列中的磁盘。或者将虚拟机迁移到不同的计算主机。