xfs文件系统损坏修复

1.报错信息

(1)进入/data目录(服务器存放业务数据的目录)会报如下错误,进入其他目录正常

[root@localhost /]# cd /data
[root@localhost data]# ls
ls: cannot open directory .: Input/output error

(2)执行dmesg命令,内核日志报错:

[78652.038949] Call Trace:
[78652.038958]  [<ffffffff9bfb1bec>] dump_stack+0x19/0x1f
[78652.039009]  [<ffffffffc065cbaf>] xfs_error_report+0x3f/0x50 [xfs]
[78652.039038]  [<ffffffffc061a92d>] ? xfs_alloc_ag_vextent_near+0x58d/0xa50 [xfs]
[78652.039063]  [<ffffffffc0617fe4>] xfs_alloc_fixup_trees+0x2c4/0x370 [xfs]
[78652.039089]  [<ffffffffc061a92d>] xfs_alloc_ag_vextent_near+0x58d/0xa50 [xfs]
[78652.039116]  [<ffffffffc061b19d>] xfs_alloc_ag_vextent+0x10d/0x150 [xfs]
[78652.039142]  [<ffffffffc061bceb>] xfs_alloc_vextent+0x3fb/0x520 [xfs]
[78652.039185]  [<ffffffffc062a1e8>] xfs_bmap_btalloc+0x7b8/0x7e0 [xfs]
[78652.039217]  [<ffffffffc062a21e>] xfs_bmap_alloc+0xe/0x20 [xfs]
[78652.039251]  [<ffffffffc062bbf7>] xfs_bmapi_write+0x4c7/0xb70 [xfs]
[78652.039300]  [<ffffffffc067ac67>] ? kmem_zone_alloc+0x97/0x130 [xfs]
[78652.039347]  [<ffffffffc06696f2>] xfs_iomap_write_allocate+0x182/0x390 [xfs]
[78652.039389]  [<ffffffffc06527b6>] xfs_map_blocks+0x1a6/0x220 [xfs]
[78652.039428]  [<ffffffffc0653834>] xfs_do_writepage+0x174/0x550 [xfs]
[78652.039434]  [<ffffffff9b9d599c>] write_cache_pages+0x21c/0x480
[78652.039468]  [<ffffffffc06536c0>] ? xfs_vm_writepages+0xb0/0xb0 [xfs]
[78652.039477]  [<ffffffff9bb6a650>] ? submit_bio+0x70/0x150
[78652.039483]  [<ffffffff9b8ee4c8>] ? update_group_power+0x28/0x280
[78652.039491]  [<ffffffff9bb9c485>] ? cpumask_next_and+0x35/0x50
[78652.039520]  [<ffffffffc065367b>] xfs_vm_writepages+0x6b/0xb0 [xfs]
[78652.039527]  [<ffffffff9b9d6a41>] do_writepages+0x21/0x50
[78652.039534]  [<ffffffff9ba8cc80>] __writeback_single_inode+0x40/0x260
[78652.039540]  [<ffffffff9b8cc745>] ? wake_up_bit+0x25/0x30
[78652.039545]  [<ffffffff9ba8d84c>] writeback_sb_inodes+0x1cc/0x430
[78652.039551]  [<ffffffff9ba8db57>] __writeback_inodes_wb+0xa7/0xe0
[78652.039556]  [<ffffffff9ba8e033>] wb_writeback+0x263/0x2f0
[78652.039562]  [<ffffffff9ba78ffc>] ? get_nr_inodes+0x4c/0x70
[78652.039568]  [<ffffffff9ba8ec3f>] bdi_writeback_workfn+0x2cf/0x470
[78652.039576]  [<ffffffff9b8c32ef>] process_one_work+0x17f/0x440
[78652.039582]  [<ffffffff9b8c4436>] worker_thread+0x126/0x3c0
[78652.039588]  [<ffffffff9b8c4310>] ? manage_workers.isra.26+0x2b0/0x2b0
[78652.039592]  [<ffffffff9b8cb621>] kthread+0xd1/0xe0
[78652.039598]  [<ffffffff9b8cb550>] ? insert_kthread_work+0x40/0x40
[78652.039603]  [<ffffffff9bfc51dd>] ret_from_fork_nospec_begin+0x7/0x21
[78652.039608]  [<ffffffff9b8cb550>] ? insert_kthread_work+0x40/0x40
[78652.039621] XFS (dm-1): page discard on page ffffd36080563680, inode 0x880002a0f, offset 99975168.
[78677.041710] XFS (dm-1): Internal error XFS_WANT_CORRUPTED_RETURN at line 429 of file fs/xfs/libxfs/xfs_alloc.c.  Caller xfs_alloc_ag_vextent_near+0x58d/0xa50 [xfs]
[78677.049267] CPU: 2 PID: 16607 Comm: kworker/u129:1 Kdump: loaded Tainted: P           OE  ------------ T 3.10.0-1160.92.1.el7.x86_64 #1
[78677.049271] Hardware name: New H3C Technologies Co., Ltd. H3C UniServer R4900 G5/RS35M2C16SB, BIOS 5.62.10 06/01/2023
[78677.049282] Workqueue: writeback bdi_writeback_workfn (flush-253:1)

2.当前磁盘现状

物理磁盘/dev/sdc 做成LVM逻辑卷/dev/mapper/vgdata-lvdata 挂载到 /data目录,作为业务的数据目录。

3.问题分析

(1)​​错误位置​​:XFS (dm-1): Internal error XFS_WANT_CORRUPTED_RETURN at line 429 of file fs/xfs/libxfs/xfs_alloc.c

  • 表示 XFS 文件系统的空间分配器(allocator)检测到元数据不一致。
    触发点:后台写回进程(bdi_writeback_workfn)尝试分配磁盘块时失败。


(2)​​根本原因​​

  • ​​元数据损坏​​:可能是突然断电、硬件故障或内核 Bug 导致文件系统结构(如空闲空间树)损坏。
    ​​硬件风险​​:日志中反复出现 I/O 错误(page discard),需优先排查磁盘健康。

4.处理方法

(1)卸载文件系统

umount /data
  • 如提示:Device or resource busy:,则执行
umount -l /data

(2)修复磁盘说明

  • 需要修复的是逻辑卷设备
xfs_repair -vL /dev/mapper/vgdata-lvdata
或

xfs_repair -vL /dev/vgdata/lvdata

 

  • 为什么不是 /dev/sdc?/dev/sdc是物理磁盘,其上可能有LVM的物理卷(PV)结构,但实际文件系统建立在逻辑卷(LV)上。直接操作 /dev/sdc会破坏LVM元数据,导致更严重的问题。

(3)运行xfs修复工具(centos自带的)

xfs_repair -vL /dev/mapper/vgdata-lvdata
  • 报错如下:
[root@localhost /]# xfs_repair -vL /dev/mapper/vgdata-lvdata
xfs_repair: cannot open /dev/mapper/vgdata-lvdata: Device or resource busy
  •  上述报错是因为LVM还有进程在占用,无法卸载,可以将自动挂载去掉,重启服务器来解除占用
[root@localhost ~]# cat /etc/fstab
# /dev/vgdata/lvdata /data xfs defaults 0 0
  • 重启服务器
reboot

(4)重启服务器后,继续执行xfs修复

xfs_repair -vL /dev/mapper/vgdata-lvdata
  • 修复成功会显示:
Phase 7 - Verify and correct inode counts...
done

5.测试修复是否成功

(1)cd /data 或者 ls /data 不会再输出”Input/output error“

(2)可以正常创建文件和目录

 

posted @ 2025-08-04 18:10  Leonardo-li  阅读(110)  评论(0)    收藏  举报