奔溃的的开始

昨天公司小伙伴进行,程序更新时。执行了删服务器的操作。

rm -rf /

因为是公司内部测试的服务器,直接使用了root权限,导致整个服务器被删除。幸运的是,经过阿里云运维的一天的努力,将服务器中的数据找回,但是我们的程序和数据库内容需要自己手动恢复。下面就代码git服务的重建和代码恢复过程进行记录。

gogs的搭建

gogs的搭建我们采用docker方式需要进行构建。
阿里云安装docker

yum install -y docker
# 此步骤非必须,主要是因为我的报错了记录一下
yum update

安装完成可以使用系统服务管理工具进行查看

systemctl status docker.service

构建gogs

#获取docker 镜像
docker pull gogs/gogs
# 运行docker 文件
docker run ‐d --restart=always ‐‐name=gogs ‐p 10022:22 ‐p 3000:3000 ‐v /var/gogsdata:/data gogs/gogs

初始化gogs

初始化gogs过程较为傻瓜式,此处不再赘述。有需要可参考
https://blog.csdn.net/qq_29308413/article/details/89083644

gogs仓库的恢复
假设我们原gogs代码库中有一个项目叫做A,那么我们如果想找回A的代码,只需要在新构建的gogs上重建一个项目也叫作A,注意,项目名称非常重要,一定要一样。具体步骤如下:
1我们通过web控制台新建一个项目名称为A的项目。
在这里插入图片描述
2 我们来到gogs仓库在硬盘的位置

/var/gogsdata/git/gogs-repositories/shuaige
ll

在这里插入图片描述
我们将此parking-brain.git删除

rm -rf parking-brain.git/
ll

在这里插入图片描述
3 将服务器被删除前的parking-brain.git复制到新创建的目录下

 cp -r parking-brain.git/ /var/gogsdata/git/gogs-repositories/shuaige/

见证奇迹的一刻,我们再次打开web控制台,发现代码恢复了
在这里插入图片描述

git客户端的改造

此过程非必须,如果新的仓库地址和旧的仓库地址完全一样,可直接跳过。如果不一样,我们以idea为例:
git----->Repository----->Remotes.将新的地址进行替换即可
在这里插入图片描述

波澜又起

就在我们欣喜的进行提交代码时,我们发现出现了一个新的问题

error: unpack failed: unable to create temporary object directory
我们的程序无法进行提交。
经过万能的度娘,发现可能是由于以下几个问题导致。
1 没有写权限
即使赋予777权限,问题仍然存在,排除

chmod +777 A.git

2 磁盘空间不足
经过使用命令查看,空间使用率不足1%,排除。
在这里插入图片描述
3 猜测,权限问题导致。
虽然我们新建的项目和之前的保持了一样的名称,但是项目的权限和hook等信息,肯定和之前的不一样。于是我们想到可以迁移的功能,迁移我们只是将代码进行了迁移,权限等信息将不予关心。经过测试果然有效

第一步 新建库,选择迁移外部仓库

在这里插入图片描述
第二步 填写新建库的信息
克隆地址:我们将无法进行推送的仓库地址填入
仓库名称不能和上面重复,建议随便输入,后期将有问题的仓库删除后,可将新仓库名称改回。
在这里插入图片描述
填写完成后,点击迁移仓库,等待迁移完成。迁移所耗费时间取决于项目的大小。
TIPS:gogs人机交互做的不好,请求是否完成请观察浏览器地址栏是否在转圈。
第三步 删除原有库
打开仓库设置,删除仓库。
在这里插入图片描述
我们仓库目录发现,虽然web控制端看不见了,但是后台仍然存在,这从侧面印证了权限问题导致,我们进行手动删除

rm -rf parking-brian.git

第四步 将迁移库改名

我们将迁移库重新命名,为正式库的名称,
在这里插入图片描述
更新完成后,就可以愉快地进行提交了

事故总结

1 服务器需要分用户,root用户慎用
2 程序和数据库一定要定时备份

更多推荐