zsxneil

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

使用的gitlab是用docker启动的,数据目录的owner/group信息被意外全部更改成了root:root导致服务不可用。最终通过复原文件所有者的方式恢复了服务。

步骤如下:

  1. 打包备份gitlab所有的数据目录(我们的是/data/gitlab/data;/data/gitlab/config;/data/gitlab/logs),并清空目录下的所有文件;

  2.   删除gitlab-ce容器,重新从docker镜像启动一个新的gitlab-ce容器,让它生成新的文件,以备后续修正使用。为了让gitlab生成所有需要的文件,启动后,在新服务中新建了user/group/progect等;

  3.   获取gitlab数据目录下所有的文件及其owner/group信息,存到owner.txt中,脚本如下:

 1 #!/bin/bash
 2 function filedic(){
 3     for line in `ls -l $1`
 4     do
 5         filename=`echo $line| awk -F " " '{print $9}'`
 6         if test -n "${filename}"
 7         then
 8             groupname=`echo $line | awk -F " " '{print $4}'`
 9                     ownername=`echo $line | awk -F " " '{print $3}'`
10                     if [ -d $1"/"$filename ]
11                     then
12                             echo $1"/"$filename $groupname $ownername
13                             filedic $1"/"$filename
14                      else
15                              echo $1"/"$filename $groupname $ownername
16                      fi
17     
18         fi
19     done 
20 
21 
22 }
23 
24 IFS=$'\n'
25 INIT_PATH="/data/gitlab";
26 filedic $INIT_PATH

  4.   停掉新服务,将新产生的gitlab的数据文件打包备份,并清空gitlab的数据文件(即/data/gitlab/data;/data/gitlab/config;/data/gitlab/logs下的所有文件,现在这些目录下的文件都是新容器产生的,我们要把它们删除,然后恢复成旧的数据文件)

  5.   将第1步中备份的旧数据文件恢复到原目录中,其中logs文件可以删除

  6.   比对owner.txt中的文件所有者信息,修改上一步恢复的数据文件;脚本如下:

 1 #!/bin/bash
 2 
 3 cat /data/gitlab/script/owner.txt| 
 4 while read line
 5     do    
 6         echo $line
 7         path=`echo $line| awk -F " " '{print $1}'`
 8         groupname=`echo $line| awk -F " " '{print $2}'`
 9         ownername=`echo $line| awk -F " " '{print $3}'`
10         if [ -d "$path" -o -f "$path" ] 
11         then
12             echo  $path $groupname $ownername
13             chown $ownername:$groupname $path
14         fi
15     done

    其中还有一些postgresql的数据文件目录,需要统一全部修改,一般包括global/data及base目录。具体可以通过docker的启动日志查看,我是通过一遍一遍的启动才修改完全部文件的。。。。。。。。。。。

  7. 经过多次启动,查看报错日志,修改数据文件所有者信息,最终服务启动成功。查看仓库---都在;测试提交---正常!!!

  8. 提醒:不要自己作死。。。不要动gitlab的数据文件。。。多做备份

posted on 2019-01-15 19:43  zsxneil  阅读(361)  评论(0编辑  收藏  举报