ext4:未檢測到線上調整大小
在 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
也說“不干淨”。