在 KVM 下运行 Debian 9 时 EXT4 文件系统数据丢失

在 KVM 下运行 Debian 9 时 EXT4 文件系统数据丢失

我正在尝试在 CentOS 7.6.1810 主机上设置 KVM 虚拟化。这是一台配备 Xeon E-2176G CPU 和双 1 TB SSD 驱动器的机器。SSD 配置为软件 RAID。

Personalities : [raid1]
md126 : active raid1 sdb3[0] sda3[1]
      828441920 blocks super 1.2 [2/2] [UU]
      bitmap: 0/7 pages [0KB], 65536KB chunk

md127 : active raid1 sdb1[1] sda1[0]
      104856576 blocks super 1.2 [2/2] [UU]
      bitmap: 0/1 pages [0KB], 65536KB chunk

SSD 具有启动/根和交换分区,额外的空间是在 raid 卷之上创建的用于虚拟机存储的 LVM 卷。

Fdisk 输出:

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   209848319   104923136   fd  Linux raid autodetect
/dev/sda2       209848320   218236927     4194304   82  Linux swap / Solaris
/dev/sda3       218236928  1875385007   828574040   fd  Linux raid autodetect

vgdisplay输出:

 --- Volume group ---
  VG Name               vps
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  95
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               790.00 GiB
  PE Size               128.00 MiB
  Total PE              6320
  Alloc PE / Size       0 / 0
  Free  PE / Size       6320 / 790.00 GiB
  VG UUID               4jp2up-3ZDd-5zVb-2ZvC-SvC5-qwte-iXmSTt

我正在使用 SolusVM 部署 KVM 模板,这些模板是我自己使用 Debian 的网络安装 ISO 创建的。一切似乎都很顺利,但随着机器启动和 I/O 负载增加,文件系统被损坏了。

我通过以下方式测试:

dd if=/dev/zero of=/tmp/test1.img bs=1G count=1 oflag=dsync

然后命令中止并且logfile/dmesg显示此情况。

[   77.921283] EXT4-fs error (device vda1): ext4_validate_block_bitmap:386: comm kworker/u2:1: bg 11: bad block bitmap checksum
[   77.968478] EXT4-fs (vda1): Delayed block allocation failed for inode 524302 at logical offset 165888 with max blocks 2048 with error 74
[   77.968573] EXT4-fs (vda1): This should not happen!! Data will be lost

[   77.970041] EXT4-fs error (device vda1): ext4_validate_block_bitmap:386: comm kworker/u2:1: bg 12: bad block bitmap checksum
[   77.971194] EXT4-fs error (device vda1): ext4_validate_block_bitmap:386: comm kworker/u2:1: bg 13: bad block bitmap checksum
[   77.972094] EXT4-fs error (device vda1): ext4_validate_block_bitmap:386: comm kworker/u2:1: bg 14: bad block bitmap checksum
[   78.342607] EXT4-fs error (device vda1): ext4_validate_block_bitmap:386: comm dd: bg 18: bad block bitmap checksum
[   78.490468] EXT4-fs (vda1): Delayed block allocation failed for inode 524302 at logical offset 231424 with max blocks 2048 with error 74
[   78.490563] EXT4-fs (vda1): This should not happen!! Data will be lost

现在,通常你会想到硬件故障,但是:

  • 我有 3 个类似的主机,所有都是全新的硬件,而且都有完全相同的问题。
  • 只有 Debian 9 存在此问题,CentOS 作为 EXT4 上的客户虚拟机没有问题。
  • 将 Debian 9 切换到 EXT3 而不是 EXT4 可以解决问题。
  • 这仅在 I/O 负载较重的情况下才会发生。

不过我更喜欢 EXT4。知道是什么原因造成的吗?我显然使用的是最新的 Debian 9.9,内核如下:

Linux debian9 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64 GNU/Linux

我已经研究这个问题 5 天了,但似乎找不到解决方案。我只找到了这个:

https://access.redhat.com/articles/41313

但我不确定它是否描述了我的问题,不过选项 3 对我来说似乎是一种解决方法。不过我的磁盘已对齐,而且我绝对不会使用 AIO=native。

希望有人知道!

答案1

最后我自己解决了它,我不知道它是如何相关的,但以防其他人遇到同样的问题。

我将 fstab 从:

/dev/vda1         /               ext4    defaults      1   1

到:

/dev/vda1         /               ext4    defaults      0   1

出于某种原因,问题解决了。我尝试了其他人提供的公共 KVM 模板,找到了这个问题,该模板没有这个问题,并且它的 fstab 是这样的。

相关内容