ext4:未检测到在线调整大小

ext4:未检测到在线调整大小

在 RedHat 6 服务器上,我们遇到了在线调整 ext4 文件系统大小的问题。

仅使用 /dev/sda 时,卷组中就有 13GB 可用,但在一个 36GB 的逻辑卷上需要 20GB 以上。将 /dev/sdb 添加到卷组,文件系统被扩展 (lvextend) 并调整大小 (resize2fs) 为 56GB。调整大小期间没有错误消息,操作系统报告了新大小。

所讨论的逻辑卷承载着 IBM HTTP Server(apache 2.2)的安装以及 8 个不同 Web 服务器的配置和日志文件。

今天早上文件系统使用量超过了 36GB。首先发生的是 Web 服务器停止记录日志(之后发现),而 Web 服务器继续运行,没有出现问题。2.5 小时后,与日志轮换和文件系统的其他一些写入相关的情况开始冻结。这意味着:Web 服务器停止接收流量,尽管进程保持运行,但尝试“跟踪”日志文件会挂起,无法中断。服务器的负载从 0.10 增加到 4000(是的……)——主要与 iowait 有关(看起来是这样)。

解决方案是关闭 Web 服务器 - kill -9 是唯一的方法,然后重新启动服务器。卸载文件系统,执行 fsck(无错误),然后重新启动。此后再无问题。

我们可以准确地将错误时间与日志记录停止的时间进行比较,以确定磁盘(lv)使用量超过其之前的 36GB 大小的时间。

其他文件系统上的服务似乎运行良好 - 其中包括操作系统。

在 /var/log/messages 中我们看到:

kernel: INFO: task httpd:<pid> blocked for more than 120 seconds.
kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
kernel: httpd         D 0000000000000001     0  6889   6865 0x00000080
kernel: ffff88023aa99c88 0000000000000086 0000000000000000 0000000000006102
kernel: ffff88010aebaa80 ffff880105dd0ae0 000000003aa99c08 ffff880105dd0ae0
kernel: ffff880105dd1098 ffff88023aa99fd8 000000000000fb88 ffff880105dd1098
kernel: Call Trace:
kernel: [<ffffffff8150efbe>] __mutex_lock_slowpath+0x13e/0x180
kernel: [<ffffffff8150ee5b>] mutex_lock+0x2b/0x50
kernel: [<ffffffff8111c461>] generic_file_aio_write+0x71/0x100
kernel: [<ffffffffa0097fb1>] ext4_file_write+0x61/0x1e0 [ext4]
kernel: [<ffffffff81180d7a>] do_sync_write+0xfa/0x140
kernel: [<ffffffff81096ca0>] ? autoremove_wake_function+0x0/0x40
kernel: [<ffffffff8121bc06>] ? security_file_permission+0x16/0x20
kernel: [<ffffffff81181078>] vfs_write+0xb8/0x1a0
kernel: [<ffffffff81181971>] sys_write+0x51/0x90
kernel: [<ffffffff810dc645>] ? __audit_syscall_exit+0x265/0x290
kernel: [<ffffffff8100b072>] system_call_fastpath+0x16/0x1b

版本:

Kernel: 2.6.32-358.2.1.el6.x86_64
lvm2-2.02.98-9.el6.x86_64
e2fsprogs-1.41.12-14.el6.x86_64

没有发现底层硬件存在问题。

答案1

答案是:文件系统是用mke2fs <device>

默认行为是创建一个 ext2 文件系统。但是它被挂载为 ext4 文件系统 - 没有任何错误消息 - 后来被认为是 ext4 文件系统。

因此,难怪在线调整大小能够起作用,并且难怪扩展部分在卸载/挂载或重新启动后能够被识别。

由于创建和调整大小之间间隔了很长时间,所以花了一些时间才发现,最后在运行时发现blkid,上面写着“ext2”,tune2fs -l还说“不干净”。

相关内容