达梦磁盘故障,Metadata corruption detected at xfs_agf_read_verify问题修复

问题现象:

测试虚拟机,达梦数据库使用一段时间后,磁盘突然无法正常读写。

[dmdba@cjc-db-03 ~]$ cd /dm8/soft/
[dmdba@cjc-db-03 soft]$ ls
bin_new.tar.gz  bin_old  bin.tar.gz
[dmdba@cjc-db-03 soft]$ cp /dm8/soft/bin_old/dm.key /dm8/dbms/bin/
cp: cannot create regular file ‘/dm8/dbms/bin/dm.key’: Structure needs cleaning
[dmdba@cjc-db-03 soft]$ df -h /dm8 
df: ‘/dm8’: Input/output error
 
[dmdba@cjc-db-03 soft]$ ls -lrth /dm8 
ls: cannot access /dm8: Input/output error

查看message日志,存在如下错误:

Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): Metadata corruption detected at xfs_agf_read_verify+0x70/0x120 [xfs], xfs_agf block 0x1
Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): Unmount and run xfs_repair
Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): First 64 bytes of corrupted metadata buffer:
Mar 16 18:05:20 cjc-db-03 kernel: ffff880231e3c000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
Mar 16 18:05:20 cjc-db-03 kernel: ffff880231e3c010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
Mar 16 18:05:20 cjc-db-03 kernel: ffff880231e3c020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
Mar 16 18:05:20 cjc-db-03 kernel: ffff880231e3c030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): metadata I/O error: block 0x1 ("xfs_trans_read_buf_map") error 117 numblks 1
Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): xfs_do_force_shutdown(0x1) called from line 315 of file fs/xfs/xfs_trans_buf.c.  Return address = 0xffffffffa02c5e88
Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): I/O Error Detected. Shutting down filesystem
Mar 16 18:05:20 cjc-db-03 kernel: XFS (dm-3): Please umount the filesystem and rectify the problem(s)

问题原因:

硬件?vmware软件bug?

解决方案:

umount磁盘

[root@cjc-db-03 ~]# umount /dm8

执行修复

[root@cjc-db-03 ~]# xfs_repair -v /dev/mapper/vg_data_dm-lv_dmdata
Phase 1 - find and verify superblock...
        - block cache size set to 734576 entries
Phase 2 - using internal log
        - zero log...
zero_log: head block 9032 tail block 9032
        - scan filesystem freespace and inode maps...
Metadata corruption detected at xfs_agf block 0x1/0x200
Metadata corruption detected at xfs_agi block 0x2/0x200
bad magic # 0x0 for agf 0
bad version # 0 for agf 0
bad length 0 for agf 0, should be 1310464
bad magic # 0x0 for agi 0
bad version # 0 for agi 0
bad length # 0 for agi 0, should be 1310464
reset bad agf for ag 0
reset bad agi for ag 0
bad agbno 0 for btbno root, agno 0
bad agbno 0 for btbcnt root, agno 0
bad agbno 0 for inobt root, agno 0
agi unlinked bucket 0 is 0 in ag 0 (inode=0)
agi unlinked bucket 1 is 0 in ag 0 (inode=0)
agi unlinked bucket 2 is 0 in ag 0 (inode=0)
agi unlinked bucket 3 is 0 in ag 0 (inode=0)
agi unlinked bucket 4 is 0 in ag 0 (inode=0)
agi unlinked bucket 5 is 0 in ag 0 (inode=0)
agi unlinked bucket 6 is 0 in ag 0 (inode=0)
agi unlinked bucket 7 is 0 in ag 0 (inode=0)
agi unlinked bucket 8 is 0 in ag 0 (inode=0)
agi unlinked bucket 9 is 0 in ag 0 (inode=0)
agi unlinked bucket 10 is 0 in ag 0 (inode=0)
agi unlinked bucket 11 is 0 in ag 0 (inode=0)
agi unlinked bucket 12 is 0 in ag 0 (inode=0)
agi unlinked bucket 13 is 0 in ag 0 (inode=0)
agi unlinked bucket 14 is 0 in ag 0 (inode=0)
agi unlinked bucket 15 is 0 in ag 0 (inode=0)
agi unlinked bucket 16 is 0 in ag 0 (inode=0)
agi unlinked bucket 17 is 0 in ag 0 (inode=0)
agi unlinked bucket 18 is 0 in ag 0 (inode=0)
agi unlinked bucket 19 is 0 in ag 0 (inode=0)
agi unlinked bucket 20 is 0 in ag 0 (inode=0)
agi unlinked bucket 21 is 0 in ag 0 (inode=0)
agi unlinked bucket 22 is 0 in ag 0 (inode=0)
agi unlinked bucket 23 is 0 in ag 0 (inode=0)
agi unlinked bucket 24 is 0 in ag 0 (inode=0)
agi unlinked bucket 25 is 0 in ag 0 (inode=0)
agi unlinked bucket 26 is 0 in ag 0 (inode=0)
agi unlinked bucket 27 is 0 in ag 0 (inode=0)
agi unlinked bucket 28 is 0 in ag 0 (inode=0)
agi unlinked bucket 29 is 0 in ag 0 (inode=0)
agi unlinked bucket 30 is 0 in ag 0 (inode=0)
agi unlinked bucket 31 is 0 in ag 0 (inode=0)
agi unlinked bucket 32 is 0 in ag 0 (inode=0)
agi unlinked bucket 33 is 0 in ag 0 (inode=0)
agi unlinked bucket 34 is 0 in ag 0 (inode=0)
agi unlinked bucket 35 is 0 in ag 0 (inode=0)
agi unlinked bucket 36 is 0 in ag 0 (inode=0)
agi unlinked bucket 37 is 0 in ag 0 (inode=0)
agi unlinked bucket 38 is 0 in ag 0 (inode=0)
agi unlinked bucket 39 is 0 in ag 0 (inode=0)
agi unlinked bucket 40 is 0 in ag 0 (inode=0)
agi unlinked bucket 41 is 0 in ag 0 (inode=0)
agi unlinked bucket 42 is 0 in ag 0 (inode=0)
agi unlinked bucket 43 is 0 in ag 0 (inode=0)
agi unlinked bucket 44 is 0 in ag 0 (inode=0)
agi unlinked bucket 45 is 0 in ag 0 (inode=0)
agi unlinked bucket 46 is 0 in ag 0 (inode=0)
agi unlinked bucket 47 is 0 in ag 0 (inode=0)
agi unlinked bucket 48 is 0 in ag 0 (inode=0)
agi unlinked bucket 49 is 0 in ag 0 (inode=0)
agi unlinked bucket 50 is 0 in ag 0 (inode=0)
agi unlinked bucket 51 is 0 in ag 0 (inode=0)
agi unlinked bucket 52 is 0 in ag 0 (inode=0)
agi unlinked bucket 53 is 0 in ag 0 (inode=0)
agi unlinked bucket 54 is 0 in ag 0 (inode=0)
agi unlinked bucket 55 is 0 in ag 0 (inode=0)
agi unlinked bucket 56 is 0 in ag 0 (inode=0)
agi unlinked bucket 57 is 0 in ag 0 (inode=0)
agi unlinked bucket 58 is 0 in ag 0 (inode=0)
agi unlinked bucket 59 is 0 in ag 0 (inode=0)
agi unlinked bucket 60 is 0 in ag 0 (inode=0)
agi unlinked bucket 61 is 0 in ag 0 (inode=0)
agi unlinked bucket 62 is 0 in ag 0 (inode=0)
agi unlinked bucket 63 is 0 in ag 0 (inode=0)
sb_icount 3200, counted 3008
sb_ifree 528, counted 444
sb_fdblocks 3757719, counted 2544695
root inode chunk not found
Phase 3 - for each AG...
        - scan and clear agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - agno = 6
        - agno = 7
        - agno = 8
        - agno = 9
        - agno = 10
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - agno = 6
        - agno = 7
        - agno = 8
        - agno = 9
        - agno = 10
Phase 5 - rebuild AG headers and trees...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - agno = 6
        - agno = 7
        - agno = 8
        - agno = 9
        - agno = 10
        - reset superblock...
Phase 6 - check inode connectivity...
        - resetting contents of realtime bitmap and summary inodes
        - traversing filesystem ...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - agno = 4
        - agno = 5
        - agno = 6
        - agno = 7
        - agno = 8
        - agno = 9
        - agno = 10
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
        XFS_REPAIR Summary    Mon Mar 16 18:10:34 2026
Phase		Start		End		Duration
Phase 1:	03/16 18:10:34	03/16 18:10:34	
Phase 2:	03/16 18:10:34	03/16 18:10:34	
Phase 3:	03/16 18:10:34	03/16 18:10:34	
Phase 4:	03/16 18:10:34	03/16 18:10:34	
Phase 5:	03/16 18:10:34	03/16 18:10:34	
Phase 6:	03/16 18:10:34	03/16 18:10:34	
Phase 7:	03/16 18:10:34	03/16 18:10:34	
Total run time: 
done
[root@cjc-db-03 ~]#

恢复正常了

[root@cjc-db-03 ~]# mount -a
[dmdba@cjc-db-03 soft]$ df -h /dm8
[dmdba@cjc-db-03 soft]$ cp /dm8/soft/bin_old/dm.key /dm8/dbms/bin/

欢迎关注我的公众号《 IT小Chen


请使用浏览器的分享功能分享到微信等