我正在尝试在 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 是这样的。