GlusterFS下如何修复裂脑文件?

恢复GlusterFS文件裂脑步骤

1. 执行如下命令,获取裂脑文件的路径。

# gluster volume heal VOLNAME info split-brain

客户端访问裂脑文件会报I/O错误。

2. 关闭在mount客户端访问裂脑文件的进程。如果有虚拟机正在使用裂脑文件,必须将虚拟机关闭。

3. 通过getfattr命令获取和验证扩展属性的变更记录,然后通过扩展属性来确定哪些brick包含可信的文件。

# getfattr -d -m . -e hex <file-path-on-brick>

[[email protected]:/letv/disk4]$getfattr -d -m . -e hex file1
# file: file1
trusted.afr.plane-client-0=0x000000000000000000000000
trusted.afr.plane-client-1=0x000000000000000000000000
trusted.gfid=0x4e028c9b64234502ba304eba44e16da4

文件变更记录属性说明,如下示例:

0x 000003d7 00000001 000000110

|         |        |

|         |        \_ changelog of directory entries

|         \_ changelog of metadata

\ _ changelog of data

首8位***背景字段记录数据变更记录

中间8位蓝色背景字段记录元数据变更记录

末8位粉红色背景字段记录索引gfid变更记录

对于目录而言,元数据和索引gfid变更对应字段是有效的。

对于普通文件,数据和元数据对应字段是有效的。

对于特殊文件,如设备文件,元数据对应字段是有效的。

一个文件发生裂脑,可是数据裂脑,也可以是元数据裂脑,也有可以是数据和元数据同时裂脑。

一个元数据、数据同时裂脑例子如下:

# getfattr -d -m . -e hex /gfs/brick-?/a

getfattr: Removing leading ‘/‘ from absolute path names

\#file: gfs/brick-a/a

trusted.afr.vol-client-0=0x000000000000000000000000

trusted.afr.vol-client-1=0x000003d70000000100000000

trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57

\#file: gfs/brick-b/a

trusted.afr.vol-client-0=0x000003b00000000100000000

trusted.afr.vol-client-1=0x000000000000000000000000

trusted.gfid=0x80acdbd886524f6fbefa21fc356fed57

4. 选择正确的拷贝。

5. 通过重置相关字段解决裂脑问题

1)解决数据裂脑:重置数据字段对应属性值

2)解决元数据裂脑:重置元数据字段对应属性值

3)解决索引裂脑:删除一个无效的副本,同时必须删除对应的gfid-link文件,在.glusterfs目录下

在删除gfid-link文件之前,确保当前brick上要删除的文件没有硬链接,如果有也必须删除。

6. 触发自动修复

# ls -l <file-path-on-gluster-mount>

or

# gluster volume heal VOLNAME

注意:

对于属性正常,文件内容不同引起的裂脑,heal命令无法修复,需要执行heal full命令,当然ls也可以。

修复方法,删除错误副本及对应的gfid文件。

时间: 2024-10-17 00:14:18

GlusterFS下如何修复裂脑文件?的相关文章

GlusterFS复制卷修复原理以及脑裂分析

裂脑 所谓脑裂,就是指两个或多个节点都"认为"自身是正常节点而互相"指责"对方,导致不能选取正确的节点进行接管或修复,导致脑裂状态.这种现象出现在数据修复.集群管理等等高可用场景. Glusterfs的冗余镜像(下文简称AFR)提供了数据副本功能,能够在即使只有一个冗余节点的情况下仍能正常工作,不中断上层应用.当节点恢复后,能够将数据修复到一致状态,保证数据的安全. AFR工作原理 AFR数据修复主要涉及三个方面:ENTRY,META,DATA,我们以冗余度为2即含

GlusterFS复制卷修复功能测试分析--brick文件丢失

0.测试环境 GlusterFS 3.6.4/3.6.7/3.6.9 CentOS 6.7/7.1 1.测试用例及结果一 假设A.B副本主机,C客户机,C挂载到A. 先通过C在卷中创建1到99文件. 测试一: A上删除 rm -f 2*,A执行heal full,看是否恢复,如果不行,再在B上执行heal full,A上看文件是否恢复.操作期间不要在C上ls. A上删除 rm -f 3*,只在C上ls,C上看是否有3*,A上看是否恢复. 测试二: A上删除 rm -f 4*,同时删除对应gfid

【教程】教你解决“Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题【转载】

转载:http://www.cystc.org/?p=2827 很多人都会用sfc /scannow来解决系统文件损坏的问题,但有时也会遇到连sfc都无法修复的情况,最常见的就是出现“Windows 资源保护找到了损坏文件但无法修复其中某些文件 CBS.Log windir\Logs\CBS\CBS.log中有详细信息”,其实这是因为系统文件在winsxs中的备份也一并损坏的缘故,导致了最终文件无法被修复.解决的办法就是要找到损坏的文件,然后用正常的文件替换掉他. 第一步:找到损坏的文件 以管理

一步步手动实现热修复(三)Class文件的替换

本节课程主要分为3块: 1.一步步手动实现热修复(一)-dex文件的生成与加载 2.一步步手动实现热修复(二)-类的加载机制简要介绍 3.一步步手动实现热修复(三)-Class文件的替换 本节示例所用到的任何资源都已开源,项目中包含工程中所用到代码.示例图片.说明文档.项目地址为: https://code.csdn.net/u011064099/sahadevhotfix/tree/master 在上一节了解了基本的类加载原理之后,我们这一节开始对工程内部的类实行替换. Tips: 本章主要依

MS SQL Server数据库修复/MDF数据文件数据恢复/MDF质疑/mdf无法附加

微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MDF文件里,LDF文件是存放MS SQL Server操作过程中的日志记录. MDF文件必读附加到MS SQL Server数据库环境后,才能正常读取其中的数据.当由于某种原因数据库附加不上,MDF数据库文件的内容就没办法读取,修复的方法有两种: 1. 使用MS SQL Server环境进行修复,先以

开发监测keepalived裂脑的脚本

检测思路:在备节点上执行脚本,如果可以ping通主节点并且备节点有VIP就报警,让人员介入检查是否裂脑. 在LB02备节点上开发脚本并执行: [[email protected] ~]# cat /server/scripts/shell/check_split_brain.sh #!/bin/bash #Author:Mr.Ding #Created Time:2018-10-05 17:11:33 #Name:check_split_brain.sh #Description:监测keepa

u盘坏了怎么修复,丢失文件如何找回

u盘坏了怎么修复,丢失文件如何找回?U盘使用频率过多的情况下会出现损坏的情况,那么各位知道怎么去修复一个损坏的U盘吗?损坏后的U盘是使用不了的,那么损坏的U盘怎么修复呢? U盘出现了损坏的情况,很容易的也导致相关的数据出现丢失的情况,所以需要及时的将U盘修复完成,另外出现了文件丢失的情况也要将丢失的文件找回,下面就让小编来教各位如何修复U盘以及找回文件吧. 一:修复U盘 1.U盘损坏的最直接的原因是文件系统损坏.对此常用的方法是对磁盘进行修复.右击"可移动磁盘",从弹出的右键菜单中选择

Android gen根目录下自动生成的R文件指向问题

今天才弄明白,原来在调用vitamio包的时候使用它们的R文件,然后在迁入广告的时候出现了问题,但是瞎胡搞半天后把问题解决了,可没有明白这是什么原因. 今天更新应用又出现了相同的情况,无意中打开了gen的根目录妈蛋!发现里面的报名根本就不是我现在应用的包名.而是调用的那个工程的包名!这下终于找到根本原因了,但是怎么解决呢???----------->修改包名呗~~~~~~~可是你改了它又会自动生成了原来的那个,--------------后来终于发现原来这个R文件的包名适合manifest文件中

linux命令行模式下对FTP服务器进行文件上传下载

参考源:点击这里查看 1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可. 2. 下载文件 下载文件通常用get和mget这两条命令.a) get 格式:get [remote-file] [local-file]将文件从远端主机中传送至本地主机中.如要获取远程服务器上/usr/your/1.htm,则 ftp> get /usr/