Description
客户经常遇到vxfs文件系统需要做fullfsck的情况。如果文件系统fullfsck被标记,下次再挂载文件系统时候,必须做fullfsck检查。
fullfsck flag 被标记一般可以检查系统日志发现,错误信息类似如下:
Apr 1 01:17:23 XXX kernel: vxfs: msgcnt 3 mesg 096: V-2-96: vx_setfsflags - /dev/vx/dsk/XXdg/XXvol file system fullfsck flag set - vx_mapbad
客户经常担心做fsck 会丢失数据。可以先用 “fsck -o full -n” 测试看一下,如果fullfsck实际做下去,会修复什么问题:
#fsck -t vxfs -o full -n /dev/vx/dsk/XXdg/XXvol
fsck from util-linux 2.23.2
pass0 - checking structural files
pass1 - checking inode sanity and blocks
pass2 - checking directory linkage
pass3 - checking reference counts
fileset 999 primary-ilist inode 123 unreferenced file, reconnect? (ynq)n
fileset 999 primary-ilist inode 123 clear? (ynq)n
pass4 - checking resource maps
au 123 emap incorrect - fix? (ynq)n
au 123 summary incorrect - fix? (ynq)n
au 456 emap incorrect - fix? (ynq)n
au 456 summary incorrect - fix? (ynq)n
au 890 emap incorrect - fix? (ynq)n
au 890 summary incorrect - fix? (ynq)n
free block count incorrect 123451 expected 123452 fix? (ynq)n
free extent vector incorrect fix? (ynq)n
OK to clear log? (ynq)n
sanity checks/updates have not been completed - restart? (ynq)n
===================================================
实际上从fullfsck flag 被标记的时候,该文件系统元数据已经发现有损坏,但为了保证可用性,这个时候文件系统还是可以访问的。只有当文件系统被umount(或者机器重启),需要重新挂载时候,才会在命令行提示需要做fullfsck。 "fsck -o full -y" 是目前可得的最好的修复文件系统,尽快恢复文件系统可用的方法。修复完成后,它会把一些可以挽留的孤儿数据放到 lost+found 目录里面。
为了保留一个恢复的机会,可以在 “fsck -o full -y” 真正实施前,给所有需要的数据卷做一个space-optimized snapshot.
具体步骤如下:
1. 首先创建10T chache object(这个cache空间大小根据客户数据变化量和实际可用存储空间决定,可以设置autogrow=yes):
#vxassist -g XXdg make vcachevol 10t
#vxmake -g XXdg cache vcacheobj cachevolname=vcachevol autogrow=yes
#vxcache -g XXdg start vcacheobj
2. 每个卷已经做prepare:
# vxsnap -g XXdg prepare XXvol01
# vxsnap -g XXdg prepare XXvol02
# vxsnap -g XXdg prepare XXvol03
# vxsnap -g XXdg prepare XXvol04
3. 一条命令完成做space-optimzed snapshot:
# vxsnap -g XXdg make source=XXvol01/newvol=s1_XXvol01/cache=vcacheobj source=XXvol02/newvol=s1_XXvol02/cache=vcacheobj source=XXvol03/newvol=s1_XXvol03/cache=vcacheobj source=XXvol04/newvol=s1_XXvol04/cache=vcacheobj
4. 查看当前snapshot :
# vxsnap -g XXdg -v list
# vxsnap -g XXdg -v print
5. 如果需要可以用原来数据卷刷新snapshot,命令如下:
# vxsnap -g XXdg refresh s1_XXvol01 source=XXvol01 s1_XXvol02 source=XXvol02 s1_XXvol03 source=XXvol03 s1_XXvol04 source=XXvol04
6. 如果认为 “fsck -o full -y” 做的不好,可以用snapshot 恢复数据卷 ,命令格式如下:
# vxsnap -g XXdg restore XXvol01 source=s1_XXvol01 XXvol02 source=s1_XXvol02 XXvol03 source=s1_XXvol03 XXvol04 source=s1_XXvol04
如果不需要保留snapshot, 要尽快解除关联,删除snapshot object,否则会随用户数据变化,占用越来越多的cache space。
1. 解除snapshot 关联命令格式如下:
# vxsnap [-f] -g XXdg dis s1_XXvol01
# vxsnap [-f] -g XXdg dis s1_XXvol02
# vxsnap [-f] -g XXdg dis s1_XXvol03
# vxsnap [-f] -g XXdg dis s1_XXvol04
2. 删除snapshot volume 命令格式如下:
# vxedit -g XXdg -rf rm s1_XXvol01
# vxedit -g XXdg -rf rm s1_XXvol02
# vxedit -g XXdg -rf rm s1_XXvol03
# vxedit -g XXdg -rf rm s1_XXvol04
更详细操作命令可以查看对应产品手册。如果只有一个卷需要做fullfsck,可以只建立一个snapshot volume。