问题现象:
测试虚拟机,达梦数据库使用一段时间后,磁盘突然无法正常读写。
[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》