解决Git object file is empty fatal的故障

一 故障背景:

公司源码管理工具从SVN迁移到Git之后,Git源码服务器采用本地bitbucket托管。在一次bitbucket服务器所在虚拟主机由于存储空间吃紧,导致bitbucket意外宕机的故障之后。恢复虚拟主机,启动bitbucket之后,发现有某个项目的某个repository故障,导致开发同事无法提交代码,耽误事儿。

二 解决过程:

1 首先,在bitbucket上新建立1个项目工程以及repository给上述失败的项目使用;

2 其次,让该项目的开发同事,拿本地的git源码push到该新建的工程下对应的repository里;

3 然后,手工删除原故障的工程以及其下的所有repository,在控制台上进入该repository的时候,报错:

 

4 其次,再想办法如何解决该500错误:

‘/usr/local/git/bin/git cat-file -t refs/heads/master:’ exited with code 128 saying: error: object file ./objects/f4/22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc is empty fatal: loose object f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc (stored in ./objects/f4/22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc) is corrupt

 

 

a 进入bitbucket服务器的BITBUCKET_HOME,/data/atlassian/application-data/bitbucket下的 shared/data/repositories子目录:

[root@localhost repositories]# pwd

/data/atlassian/application-data/bitbucket/shared/data/repositories

[root@localhost repositories]# ll

总用量 508

drwxr-xr-x. 7 root root 4096 12月 13 23:20 100

drwxr-xr-x. 7 root root 4096 12月 13 23:21 101

drwxr-xr-x. 7 root root 4096 12月 13 23:20 105

drwxr-xr-x. 7 root root 4096 12月 13 23:21 107

drwxr-xr-x. 7 root root 4096 12月 13 23:20 108

drwxr-xr-x. 7 root root 4096 12月 13 23:20 115

drwxr-xr-x. 7 root root 4096 12月 13 23:21 116

drwxr-xr-x. 7 root root 4096 12月 13 23:21 117

drwxr-xr-x. 7 root root 4096 12月 13 23:21 118

drwxr-xr-x. 7 root root 4096 12月 13 23:20 119

drwxr-xr-x. 7 root root 4096 12月 13 23:20 120

drwxr-xr-x. 7 root root 4096 12月 13 23:21 121

drwxr-xr-x. 7 root root 4096 12月 13 23:21 122

drwxr-xr-x. 7 root root 4096 12月 13 23:21 123

drwxr-xr-x. 7 root root 4096 12月 13 23:20 124

drwxr-xr-x. 7 root root 4096 12月 13 23:21 125

drwxr-xr-x. 7 root root 4096 12月 13 23:20 126

drwxr-xr-x. 7 root root 4096 12月 13 23:21 127

drwxr-xr-x. 7 root root 4096 12月 13 23:20 128

drwxr-xr-x. 7 root root 4096 12月 13 23:21 129

drwxr-xr-x. 7 root root 4096 12月 13 23:21 13

drwxr-xr-x. 7 root root 4096 12月 13 23:20 130

drwxr-xr-x. 7 root root 4096 12月 13 23:20 131

drwxr-xr-x. 7 root root 4096 12月 13 23:21 132

drwxr-xr-x. 7 root root 4096 12月 13 23:21 133

drwxr-xr-x. 7 root root 4096 12月 13 23:20 134

drwxr-xr-x. 7 root root 4096 12月 13 23:20 135

drwxr-xr-x. 7 root root 4096 12月 13 23:21 136

drwxr-xr-x. 7 root root 4096 12月 13 23:21 137

drwxr-xr-x. 7 root root 4096 12月 13 23:20 138

drwxr-xr-x. 7 root root 4096 12月 13 23:21 139

drwxr-xr-x. 7 root root 4096 12月 13 23:20 140

drwxr-xr-x. 7 root root 4096 12月 13 23:21 141

drwxr-xr-x. 7 root root 4096 12月 13 23:20 142

drwxr-xr-x. 7 root root 4096 12月 13 23:20 143

drwxr-xr-x. 7 root root 4096 12月 13 23:21 144

drwxr-xr-x. 7 root root 4096 12月 13 23:20 145

drwxr-xr-x. 7 root root 4096 12月 13 23:21 146

drwxr-xr-x. 7 root root 4096 12月 13 23:20 147

drwxr-xr-x. 7 root root 4096 12月 13 23:21 148

drwxr-xr-x. 7 root root 4096 12月 13 23:20 149

drwxr-xr-x. 7 root root 4096 12月 13 23:21 15

drwxr-xr-x. 7 root root 4096 12月 13 23:21 150

drwxr-xr-x. 7 root root 4096 12月 13 23:20 153

drwxr-xr-x. 7 root root 4096 12月 13 23:21 154

drwxr-xr-x. 7 root root 4096 12月 13 23:21 156

drwxr-xr-x. 7 root root 4096 12月 13 23:21 157

drwxr-xr-x. 7 root root 4096 12月 13 23:21 158

drwxr-xr-x. 7 root root 4096 12月 13 23:20 159

drwxr-xr-x. 7 root root 4096 12月 13 23:21 16

drwxr-xr-x. 7 root root 4096 12月 13 23:21 166

drwxr-xr-x. 7 root root 4096 12月 13 23:20 167

drwxr-xr-x. 7 root root 4096 12月 13 23:21 168

drwxr-xr-x. 7 root root 4096 12月 13 23:21 169

drwxr-xr-x. 7 root root 4096 12月 13 23:21 170

drwxr-xr-x. 7 root root 4096 12月 13 23:21 171

drwxr-xr-x. 7 root root 4096 12月 13 23:20 172

drwxr-xr-x. 7 root root 4096 12月 13 23:20 173

drwxr-xr-x. 7 root root 4096 12月 13 23:21 174

drwxr-xr-x. 7 root root 4096 12月 13 23:21 175

drwxr-xr-x. 7 root root 4096 12月 13 23:21 176

drwxr-xr-x. 7 root root 4096 12月 13 23:21 177

drwxr-xr-x. 7 root root 4096 12月 13 23:20 178

drwxr-xr-x. 7 root root 4096 12月 13 23:20 179

drwxr-xr-x. 7 root root 4096 12月 13 23:21 180

drwxr-xr-x. 7 root root 4096 12月 13 23:21 181

drwxr-xr-x. 7 root root 4096 12月 13 23:20 182

drwxr-xr-x. 7 root root 4096 12月 13 23:21 183

drwxr-xr-x. 7 root root 4096 12月 13 23:20 184

drwxr-xr-x. 7 root root 4096 12月 13 23:21 185

drwxr-xr-x. 7 root root 4096 12月 13 23:21 186

drwxr-xr-x. 7 root root 4096 12月 13 23:20 187

drwxr-xr-x. 7 root root 4096 12月 13 23:21 188

drwxr-xr-x. 7 root root 4096 12月 13 23:21 189

drwxr-xr-x. 7 root root 4096 12月 13 23:21 190

drwxr-xr-x. 7 root root 4096 12月 13 23:21 192

drwxr-xr-x. 7 root root 4096 12月 13 23:21 193

drwxr-xr-x. 7 root root 4096 12月 13 23:21 194

drwxr-xr-x. 7 root root 4096 12月 13 23:21 195

drwxr-xr-x. 7 root root 4096 12月 13 23:20 196

drwxr-xr-x. 7 root root 4096 12月 13 23:21 197

drwxr-xr-x. 7 root root 4096 12月 13 23:21 27

drwxr-xr-x. 7 root root 4096 12月 13 23:21 28

drwxr-xr-x. 7 root root 4096 12月 13 23:20 29

drwxr-xr-x. 7 root root 4096 12月 13 23:21 3

drwxr-xr-x. 7 root root 4096 12月 13 23:21 40

drwxr-xr-x. 7 root root 4096 12月 13 23:21 41

drwxr-xr-x. 7 root root 4096 12月 13 23:20 47

drwxr-xr-x. 7 root root 4096 12月 13 23:21 51

drwxr-xr-x. 7 root root 4096 12月 13 23:21 52

drwxr-xr-x. 7 root root 4096 12月 13 23:21 53

drwxr-xr-x. 9 root root 4096 12月 13 23:21 56

drwxr-xr-x. 7 root root 4096 12月 13 23:21 57

drwxr-xr-x. 7 root root 4096 12月 13 23:21 58

drwxr-xr-x. 7 root root 4096 12月 13 23:21 59

drwxr-xr-x. 7 root root 4096 12月 13 23:21 60

drwxr-xr-x. 7 root root 4096 12月 13 23:21 61

drwxr-xr-x. 7 root root 4096 12月 13 23:20 62

drwxr-xr-x. 7 root root 4096 12月 13 23:21 63

drwxr-xr-x. 7 root root 4096 12月 13 23:21 64

drwxr-xr-x. 7 root root 4096 12月 13 23:20 65

drwxr-xr-x. 9 root root 4096 12月 13 23:21 66

drwxr-xr-x. 7 root root 4096 12月 13 23:21 67

drwxr-xr-x. 7 root root 4096 12月 13 23:20 68

drwxr-xr-x. 7 root root 4096 12月 13 23:21 69

drwxr-xr-x. 7 root root 4096 12月 13 23:20 70

drwxr-xr-x. 7 root root 4096 12月 13 23:21 71

drwxr-xr-x. 7 root root 4096 12月 13 23:21 72

drwxr-xr-x. 7 root root 4096 12月 13 23:20 73

drwxr-xr-x. 7 root root 4096 12月 13 23:21 74

drwxr-xr-x. 7 root root 4096 12月 13 23:21 75

drwxr-xr-x. 7 root root 4096 12月 13 23:21 81

drwxr-xr-x. 7 root root 4096 12月 13 23:21 82

drwxr-xr-x. 7 root root 4096 12月 13 23:21 83

drwxr-xr-x. 7 root root 4096 12月 13 23:20 84

drwxr-xr-x. 7 root root 4096 12月 13 23:21 85

drwxr-xr-x. 7 root root 4096 12月 13 23:21 86

drwxr-xr-x. 7 root root 4096 12月 13 23:21 87

drwxr-xr-x. 7 root root 4096 12月 13 23:20 88

drwxr-xr-x. 7 root root 4096 12月 13 23:20 89

drwxr-xr-x. 7 root root 4096 12月 13 23:21 90

drwxr-xr-x. 7 root root 4096 12月 13 23:21 91

drwxr-xr-x. 7 root root 4096 12月 13 23:21 92

drwxr-xr-x. 7 root root 4096 12月 13 23:21 93

drwxr-xr-x. 7 root root 4096 12月 13 23:20 94

drwxr-xr-x. 7 root root 4096 12月 13 23:20 98

drwxr-xr-x. 7 root root 4096 12月 13 23:21 99

[root@localhost repositories]#

b 查找哪个repository包含上述报错的“22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc”关键字

[root@localhost repositories]# find  ./ |xargs grep -ri “22a78e5d8324e7c3fdaa5f9c88b02c7c7622dc”

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

./66/refs/heads/master:f422a78e5d8324e7c3fdaa5f9c88b02c7c7622dc

[root@localhost repositories]#

 

c 执行git fsck

[root@localhost repositories]# cd 66

[root@localhost 66]# git fsck

检查对象目录中: 100% (256/256), 完成.

error: object file ./objects/1a/d1162a6381f39960d7efb38aee8e989965489e is empty

error: object file ./objects/1a/d1162a6381f39960d7efb38aee8e989965489e is empty

fatal: loose object 1ad1162a6381f39960d7efb38aee8e989965489e (stored in ./objects/1a/d1162a6381f39960d7efb38aee8e989965489e) is corrupt

[root@localhost 66]#

d 然后到控制台,依然报错(此步骤非必须):

 

e 删除包含关键字为66的repository:

[root@localhost repositories]# rm -rf 66

[root@localhost repositories]#

f 最后到控制台上删除包含错误的repository以及其工程project。

删除之后,之前报错的repository不再出现。

三 小结解决思路

1在Git服务器上创建新的项目和对应的repository;

2 手工把本地源码push到该新建的项目下;

3 删除出错的旧工程及其所有的repository;

4 删除出错,可以到Git服务器的BITBUCKET_HOME,/data/atlassian/application-data/bitbucke/shared/data/repositories子目录下,通过将包含错误信息的repository手工删除来处理。

Linux环境设置zookeeper、memcached、activemq、dubbo自动启动

一 zookeeper

1 修改zkServer.sh(/usr/local/zookeeper-3.4.5/bin/zkServer.sh)文件的第一行:

#!/usr/bin/env bash

为:

#!/bin/bash

# description: Zookeeper Start Stop Restart

# processname: zookeeper

# chkconfig: 244 30 80

 

2 修改:

# use POSTIX interface, symlink is followed automatically

ZOOBIN=”${BASH_SOURCE-$0}”

ZOOBIN=`dirname ${ZOOBIN}`

ZOOBINDIR=`cd ${ZOOBIN}; pwd`

 

if [ -e “$ZOOBIN/../libexec/zkEnv.sh” ]; then

# use POSTIX interface, symlink is followed automatically

ZOOSH=`readlink $0`

ZOOBIN=`dirname $ZOOSH`

ZOOBINDIR=`cd $ZOOBIN; pwd`

ZOO_LOG_DIR=`echo $ZOOBIN`

 

if [ -e “$ZOOBIN/../libexec/zkEnv.sh” ]; then

 

3 创建软链接:

[root@dev-middleware ~]# ln -s /usr/local/zookeeper-3.4.5/bin/zkServer.sh  /etc/init.d/zookeeper

 

4 添加自动启动

[root@dev-middleware ~]# chkconfig –list zookeeper

zookeeper 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig –add zookeeper”)

[root@dev-middleware ~]# chkconfig –add zookeeper

[root@dev-middleware ~]# chkconfig –level 2345 zookeeper on

[root@dev-middleware ~]# chkconfig –list zookeeper

zookeeper       0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@dev-middleware ~]#

 

5 参考

http://positivealex.github.io/blog/posts/how-to-install-zookeeper-as-service-on-centos/

二 memcached

[root@dev-middleware ~]# chkconfig –list memcached

memcached 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig –add memcached”)

[root@dev-middleware ~]# chkconfig –add memcached

[root@dev-middleware ~]# chkconfig –level 2345 memcached on

[root@dev-middleware ~]# chkconfig –list memcached

memcached       0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@dev-middleware ~]#

三 activemq

1 修改文件activemq (/usr/local/apache-activemq-5.9.0/bin/activemq),第1行:

#!/bin/sh

为:

#!/bin/sh

### BEGIN INIT INFO

# Provides:             activemq

# Required-Start:       $remote_fs $syslog

# Required-Stop:        $remote_fs $syslog

# Default-Start:        2 3 4 5

# Default-Stop:         0 6

# Short-Description:    ActiveMQ server

### END INIT INFO

 

2 创建软链接:

[root@dev-middleware bin]# ln -s /usr/local/apache-activemq-5.9.0/bin/activemq /etc/init.d/activemq

[root@dev-middleware bin]#

 

3 添加自动启动

[root@dev-middleware bin]# chkconfig –list activemq

activemq 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig –add activemq”)

[root@dev-middleware bin]# chkconfig –add activemq

[root@dev-middleware bin]# chkconfig –level 2345 activemq on

[root@dev-middleware bin]# chkconfig –list activemq

activemq        0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@dev-middleware bin]#

 

4 参考

http://www.liaoxuefeng.com/article/0013738918072162b1c2a36eb0f40e690d3902acf60c8fb000

四 dubbo

 

[root@dev-middleware ~]# ll /etc/init.d/tomcat-dubbo-admin

-rwxr-xr-x 1 root root 1969 9月   8 13:49 /etc/init.d/tomcat-dubbo-admin

[root@dev-middleware ~]# /etc/init.d/tomcat-dubbo-admin

start/stop

[root@dev-middleware ~]# chkconfig –list tomcat-dubbo-admin

tomcat-dubbo-admin 服务支持 chkconfig,但它在任何级别中都没有被引用(运行“chkconfig –add tomcat-dubbo-admin”)

[root@dev-middleware ~]# chkconfig –add tomcat-dubbo-admin

[root@dev-middleware ~]# chkconfig –level 2345 tomcat-dubbo-admin on

[root@dev-middleware ~]# chkconfig –list tomcat-dubbo-admin

tomcat-dubbo-admin      0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@dev-middleware ~]#