Redhat

ext4:未檢測到線上調整大小

  • June 14, 2013

在 RedHat 6 伺服器上,我們遇到了線上調整 ext4 文件系統大小的問題。

只有 /dev/sda 我們在卷組中有 13GB 可用空間,但在一個 36GB 的邏輯卷上還需要 20GB。將 /dev/sdb 添加到卷組,文件系統被擴展 (lvextend) 並調整大小 (resize2fs) 到 56GB。調整大小期間沒有錯誤消息,並且作業系統報告了新大小。

有問題的邏輯卷承載了 IBM HTTP Server (apache 2.2) 的安裝、一些 8 個不同 Web 伺服器的配置和日誌文件。

今天早上,文件系統的使用量超過了 36GB。首先發生的是網路伺服器停止記錄(之後發現),而網路伺服器繼續執行而沒有問題。2,5 小時後,關於日誌輪換和對文件系統的其他一些寫入,事情開始凍結。含義:網路伺服器停止接收流量,儘管程序保持執行,但嘗試“跟踪”日誌文件會掛起,並且無法中斷。伺服器的負載從 0.10 變為 4000(是的……) - 主要與 iowait 相關(看起來)。

解決方案是關閉網路伺服器 - 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

沒有發現底層硬體有問題。

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

然後預設行為是創建一個 ext2 文件系統。然而,它被掛載為一個 ext4 文件系統——沒有任何錯誤消息——後來被認為是一個 ext4 文件系統。

所以難怪線上調整大小有效,難怪擴展部分在解除安裝/安裝或重新啟動後被辨識。

花了一些時間才發現,因為創建和調整大小之間有很長的時間,最終在執行時發現blkid,它說“ext2”。tune2fs -l也說“不干淨”。

引用自:https://serverfault.com/questions/515139