如何修复损坏的文件系统?

硬盘、卷、存储池、阵列、SSD 缓存

版主: TerraSupportTMsupportTMjack

回复
头像
TMzethar
技术支持
帖子: 2449
注册时间: 2020年 4月 27日 星期一 12:05 pm

如何修复损坏的文件系统?

帖子 TMzethar »

操作指引

适用机型:所有 TNAS型号

适用版本:TOS 4.2.x(备注中为TOS 5.0.x上存在差别的操作)

当硬盘出现故障,或在硬盘读写时发生停电或异常关机,有可能导致元数据出错或者超级块损坏,从而导致文件系统损坏,系统无法运行,数据无法正常读写。这时我们可以尝试用一些文件系统修复指令来修复损坏的文件系统。


免责声明:
为了您的数据安全,建议由专业人员操作。 在修复过程中,误操作、断电、碰撞等可能导致修复失败导致数据丢失,您的数据仍有机会被彻底破坏。 如果您的数据异常重要,建议您通过专业的数据恢复服务来挽救您的数据。 如果您决定进行维修操作,您需要自行承担所有风险。

如果您有其它足够大的整块存储空间(大于问题卷内的数据量), 建议在尝试修复前优先将数据导出到目标空间.(请通过专用SSH/Telnet工具如putty/FinalShell执行, 且避免电脑进入休眠防止断连.)

代码: 全选

btrfs restore /dev/mapper/vg0-lv0 [目标空间目录]
操作指引
1. 通过SSH 登录您的TNAS。如何使用SSH 终端登录您的TNAS?
2. 执行以下指令,查看系统日志:

代码: 全选

dmesg
若发现明显的红色字体标识,或带有"group descriptors corrupted",“Ext4-fs error”等字样的信息,如下图,表示 EXT4文件系统必定存在异常,请使用“EXT4文件系统的常规修复方式”;然后如果并没有发现错误字样,也并不能拆除存在错误的可能性,可能只是近期没有读写到它们,也可以尝试修复。
图片

图片

若发现明显的红色字体标识,或带有“Btrfs error”字样的信息,如下图,表示 BTRFS文件系统必定存在异常.
(如果您没有发现类似错误,这并不一定说明完全没有相关错误,可能是本次启动并未触发错误.)
图片

EXT4文件系统的常规修复方式
(关于第3-7步,如果你的TNAS曾使用过早期的TOS 4.0甚至TOS 3.x.由于当时没有采用LVM管理,可能没有"/dev/mapper/vg0-lv0"这样的目录.请使用"/dev/md0"代替.)

1、在进行修复之前,请先停用 SSD 缓存(如已启用)。如果没有启用缓存,请忽略此步骤。然后,根据您的 TOS 系统版本,执行以下命令以卸载当前的文件系统(卷)。

TOS4.x:

代码: 全选

cd /
umount  /mnt/md0 
umount  /home
TOS5.x / TOS 6.x :

代码: 全选

cd /
umount /Volume1
umount /home

2. 若提示“Target is busy”,请参考以下操作指引解除其他进程对卷的占用,并取消 SSD 缓存, 然后继续执行步骤1。
viewtopic.php?t=4080
若因此导致 root用户自动登出了,请再次登录 SSH并切换到 root用户。
(在 TOS 5 中,卷1对应“/Volume1”而不是“/mnt/md0”)

3. 执行修复指令,并等待修复完成:

代码: 全选

e2fsck -p /dev/mapper/vg0-lv0
4. 修复完成后,执行以下指令,重新挂载已卸除的文件系统:

代码: 全选

/etc/tos/script/mntdata
5. 刷新 TOS 登录页面,重新登录。

6.若依然存在异常,可重复步骤1、2,然后执行:

代码: 全选

e2fsck -b 32768  /dev/mapper/vg0-lv0 -y
修复完成后,重复步骤4、5。

7.若依然存在异常,可重复步骤1、2,并执行强制修复指令(有风险,请谨慎考虑):

代码: 全选

e2fsck -f  /dev/mapper/vg0-lv0 -y
修复完成后,重复步骤4、5。


BTRFS文件系统的常规修复方式
(关于第3-4步,如果你的TNAS曾使用过早期的TOS 4.0甚至TOS 3.x.由于当时没有采用LVM管理,可能没有"/dev/mapper/vg0-lv0"这样的目录.请使用"/dev/md0"代替.)
注意:BTRFS 在使用较早 linux 内核版本的 210 系列型号中并不完美。
如果您的设备型号是 F2-210 或 F4-210,我们建议您备份数据,然后将 BTRFS 卷重建为更稳定的 EXT4 卷。

1、在进行修复之前,请先停用 SSD 缓存(如已启用)。如果没有启用缓存,请忽略此步骤。然后,根据您的 TOS 系统版本,执行以下命令以卸载当前的文件系统(卷)。

TOS4.x:

代码: 全选

cd /
umount  /mnt/md0 
umount  /home
TOS5.x :

代码: 全选

cd /
umount /Volume1
umount /home
TOS 6.x :

代码: 全选

cd /
umount /Volume1
umount /var/subvols/8vEbTxkKvwa
umount /home

注意:
无论是 ext4 还是 btrfs 文件系统,若要卸载的卷并非该文件系统中的第一个卷,在执行卸载命令时,都需将默认命令 umount /Volume1 中的 /Volume1 修改为对应的卷名,例如要卸载第二个卷,则命令为 umount /Volume2。
另外,在 btrfs 文件系统格式下,后续执行 umount /var/subvols/8vEbTxkKvwa 这类命令时,若涉及非首个卷对应的子卷,也需将命令修改为 umount /var/subvols/8vEbTxkKvw?,其中 “?” 处为对应的子卷名称。这些名称均可通过 df -T 命令查看确认。如下图:

图片

2. 若提示“Target is busy”,请参考以下操作指引其他进程对卷的占用,并取消 SSD 缓存, 然后继续执行步骤1。
viewtopic.php?t=4080
若因此导致 root用户自动登出了,请再次登录 SSH并切换到 root用户。
(在 TOS 5 中,卷1对应“/Volume1”而不是“/mnt/md0”)

3. 执行以下指令,检测 BTRFS文件系统:

代码: 全选

btrfs check /dev/mapper/vg0-lv0
若检查时间长或出现明显错误提示,请耐心等待检测完成图片

4. 检测完成后,执行以下指令,恢复文件系统:

代码: 全选

btrfs check --repair /dev/mapper/vg0-lv0
图片

5. 如上图,若出现“10 9 8 7 6 5 4 3 2 1”,表示文件系统恢复的概率很大。仅需等待恢复过程结束后,执行以下指令,重新挂载已卸除的文件系统:

代码: 全选

/etc/tos/scripts/mntdata
6. 刷新 TOS 登录页面,重新登录。
头像
VegaLiao
帖子: 13
注册时间: 2022年 3月 31日 星期四 6:26 pm

Re: BTRFS/EXT4卷的文件系统常规修复方法

帖子 VegaLiao »

气死人,我已经在ssh,输入如下指令:
fuser -mk /mnt/md0
umount /mnt/md0
umount /home

版本号如下:
root@TNAS-014787:~# uname -a
Linux TNAS-014787 4.4.18-g8bcbd8a-dirty #1250 SMP Wed Nov 27 14:30:56 CST 2019 aarch64 GNU/Linux
root@TNAS-014787:~# cat /proc/version
Linux version 4.4.18-g8bcbd8a-dirty (root@developer) (gcc version 4.9.4 (OpenWrt/Linaro GCC 4.9-2015.06 r48422) ) #1250 SMP Wed Nov 27 14:30:56 CST 2019

重新登录后,还是出现如下提示信息:
root@TNAS-014787:~# umount /mnt/md0
umount: /mnt/md0: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
root@TNAS-014787:~# umount /home
umount: /home: target is busy
(In some cases useful info about processes that
use the device is found by lsof(8) or fuser(1).)
头像
VegaLiao
帖子: 13
注册时间: 2022年 3月 31日 星期四 6:26 pm

Re: BTRFS/EXT4卷的文件系统常规修复方法

帖子 VegaLiao »

[ 197.713730] EXT4-fs (dm-0): warning: mounting unchecked fs, running e2fsck is recommended
[ 198.038378] EXT4-fs (dm-0): mounted filesystem without journal. Opts: user_xattr,acl,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv1
[ 211.416972] NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory
[ 211.425050] NFSD: starting 90-second grace period (net ffffff800928a280)
[ 214.679825] rtc_rtk 9801b600.rtc: rtk_rtc_disable
[ 214.684665] rtc_rtk 9801b600.rtc: rtk_rtc_enable
[ 221.677079] iscsi-scst: Created iser portal cm_id:ffffffc06bc94400
[ 221.683510] iscsi-scst: iser portal cm_id:ffffffc06bc94400 listens on: 0.0.0.0:3260
[ 221.691418] iscsi-scst: Created iser portal cm_id:ffffffc06edcdc00
[ 221.697767] iscsi-scst: iser portal cm_id:ffffffc06edcdc00 listens on: 0000:0000:0000:0000:0000:0000:0000:0000 3260
[ 223.614354] IPv6: ADDRCONF(NETDEV_UP): docker0: link is not ready
[ 223.702099] IPVS: Creating netns size=1328 id=1
[ 265.582269] EXT4-fs error (device dm-0): ext4_iget:4216: inode #41157365: comm quotacheck: checksum invalid
[ 498.629182] EXT4-fs (dm-0): error count since last fsck: 52767
[ 498.635167] EXT4-fs (dm-0): initial error at time 1625888366: ext4_free_inode:371
[ 498.642846] EXT4-fs (dm-0): last error at time 1648723664: ext4_iget:4216: inode 41157365
头像
34cdas21da
帖子: 12
注册时间: 2023年 7月 19日 星期三 4:52 am

Re: 如何修复损坏的文件系统?

帖子 34cdas21da »

磁盘被占用问题,是因为ssh之后的su bash默认占用了/md0

代码: 全选

fuser -mk /mnt/md0
会强退,但是重连回去之后还是会占用/md0

解决方案是ssh之后不要

代码: 全选

su -i
,而是直接

代码: 全选

sudo umount /mnt/md0
头像
rickeyline
帖子: 2
注册时间: 2024年 2月 19日 星期一 7:17 pm

Re: 如何修复损坏的文件系统?

帖子 rickeyline »

执行修复以后,出现如下的错误,有没有高手能帮忙看一下怎么解决

WARNING:

Do not use --repair unless you are advised to do so by a developer
or an experienced user, and then only after having accepted that no
fsck can successfully repair all types of filesystem corruption. Eg.
some software or hardware bugs can fatally damage a volume.
The operation will start in 10 seconds.
Use Ctrl-C to stop it.
10 9 8 7 6 5 4 3 2 1
Starting repair.
Opening filesystem to check...
Checking filesystem on /dev/mapper/vg0-lv0
UUID: 5f218f84-6f55-4fac-a54f-f954990bf8b6
[1/7] checking root items
checksum verify failed on 1178855604224 found 00000032 wanted FFFFFFE8
checksum verify failed on 1178855604224 found 00000032 wanted FFFFFFE8
checksum verify failed on 1178855604224 found 00000032 wanted FFFFFFE8
Csum didn't match
ERROR: failed to repair root items: Input/output error
回复

回到 “存储”