電源故障後 I/O 錯誤,文件系統重新掛載為只讀
我有一個帶有大量虛擬機的生產 ESXI 伺服器。幾個小時前我停電了,我的 UPS 電池耗盡了這麼長時間。由於某種原因,自動關機機制無法正常工作,因此整個系統的電源都被切斷了。
停電後,一切都出現了,除了 mysql 伺服器虛擬機。現在它用 I/O 錯誤向控制台發送垃圾郵件。
end_request:關鍵介質錯誤,dev sda,扇區 X end_request:I/O 錯誤,dev sda,扇區 X .... EXT4-fs 錯誤(設備 dm-1):ext4_wait_block_bitmap:476 comm 彈跳:無法讀取塊點陣圖 - block_group = X,block_bitmap = X 正在中止設備 dm-1-8 上的日誌 EXT4-fs (dm-1):以只讀方式重新掛載文件系統
使用加密的 LVM 設置 VM。
這些錯誤是什麼意思?是硬體嗎?我能做些什麼?我在Google上搜尋了幾個小時,但不知道該怎麼做。我從 live CD 啟動,在解除安裝的根分區上執行 fsck,修復它,重新啟動,但問題是一樣的。
編輯#1 我試過這個,但什麼也沒發生。
root@ubuntu:~# sudo cryptsetup --key-file=/media/ubuntu/7b225e2d-9c0f-4bd4-a4de-1d2f7a0b4c58/keyfile luksOpen /dev/sda5 myvolume root@ubuntu:~#vgscan 讀取所有物理卷。可能還要等一下... 使用元數據類型 lvm2 找到卷組“mysql-server-vg” root@ubuntu:~# tune2fs -O ^has_journal /dev/mysql-server-vg/root tune2fs 1.42.13(2015 年 5 月 17 日) 設置了 needs_recovery 標誌。請在清除前執行 e2fsck has_journal 標誌。 root@ubuntu:~# e2fsck -f /dev/mysql-server-vg/root \e2fsck 1.42.13(2015 年 5 月 17 日) /dev/mysql-server-vg/root: 恢復日誌 通過 1:檢查 inode、塊和大小 刪除的 inode 391687 的 dtime 為零。使固定?是的 找到了屬於損壞的孤立鍊錶的 inode。使固定?是的 Inode 391697 是孤立 inode 列表的一部分。固定的。 Inode 391699 是孤立 inode 列表的一部分。固定的。 Inode 391700 是孤立 inode 列表的一部分。固定的。 Pass 2:檢查目錄結構 第 3 步:檢查目錄連接 Pass 4:檢查引用計數 Pass 5:檢查組摘要資訊 空閒塊計數錯誤(5462594,計數=5462792)。 使固定?是的 Inode 點陣圖差異:-391687 -391697 -(391699--391700) 使固定?是的 第 48 組的空閒 inode 計數錯誤(7946,計數=7950)。 使固定?是的 空閒 inode 計數錯誤(1854371,計數=1854370)。 使固定?是的 /dev/mysql-server-vg/root: ***** 文件系統被修改 ***** /dev/mysql-server-vg/root:95870/1950240 個文件(0.8% 不連續),2337016/7799808 個塊 root@ubuntu:~# tune2fs -O ^has_journal /dev/mysql-server-vg/root tune2fs 1.42.13(2015 年 5 月 17 日) root@ubuntu:~# e2fsck -f /dev/mysql-server-vg/root e2fsck 1.42.13(2015 年 5 月 17 日) 通過 1:檢查 inode、塊和大小 Pass 2:檢查目錄結構 第 3 步:檢查目錄連接 Pass 4:檢查引用計數 Pass 5:檢查組摘要資訊 /dev/mysql-server-vg/root:95870/1950240 個文件(0.8% 不連續),2304248/7799808 個塊 root@ubuntu:~# tune2fs -j /dev/mysql-server-vg/root tune2fs 1.42.13(2015 年 5 月 17 日) 創建日誌inode:完成
好的,我想通了並成功修復了它。我花了兩天時間。
首先,我驗證了儲存控制器、數據儲存硬體(機械驅動器)和電纜沒有故障。請注意,我無法正確訪問文件系統上的 vmdk 文件。我嘗試使用 scp 和 vSphere Client 在本地複制它,但過了一會兒,它們都給了我輸入/輸出錯誤。
我什至嘗試將虛擬磁碟複製到單獨的數據儲存中。
cd /vmfs/volumes/ vmkfstools -i datastore1/vm/vm.vmdk datastore2/vm/vm.vmdk -d Thin -a lsilogic
它在 16% 後給了我輸入/輸出錯誤。
我認為斷電會導致 vmfs 文件系統(數據儲存)上出現一些損壞、過時的鎖和諸如此類的東西。我使用 vSphere On-disk Metadata Analyzer (VOMA) 檢查了 VMFS 元數據的一致性。請注意,在執行此命令之前必須解除安裝數據儲存。
voma -m vmfs -f 檢查 /vmfs/devices/disks/disk_name:1
它發現了 34 個錯誤。vSphere Hypervisor 5.5 版中捆綁的 voma 只能檢查文件系統。我在救援模式下使用 clonezilla 將數據儲存複製到新硬碟驅動器(複製帶有壞扇區的磁碟)。之後我升級到 VMware ESXi 6.5 版,因為它有更新版本的 voma 命令。它可以修復錯誤,所以我執行了以下命令:
voma -m vmfs -f 修復 /vmfs/devices/disks/disk_name:1
它確實做了一些事情。啟動了虛擬機,但由於新的 vCenter vSphere WebClient 廢話和 vSphere Client deprecation無法獲得控制台連接,所以我回到了原來的 VMware ESXi 5.5 安裝。我成功複製了提到的 vmdk 文件。我用複製的磁碟啟動了虛擬機,執行了一次 fsck,重新啟動,瞧。它按預期工作。伺服器與我的所有數據一起上線。
它涉及很多擺弄,但我想不出其他任何東西。如果有人知道更簡單的方法,請不要猶豫發表評論。
我確實在事件發生前 12 小時進行了數據庫備份,但如果可能的話,我想恢復實時數據。