背景
/var/opt/gitlab所在磁盘资源不足,现在希望将其无感迁移到**/data/opt/gitlab**
软链接方案
停止 GitLab 服务
1 | sudo gitlab-ctl stop |
迁移数据到新盘目录
1 | sudo mkdir -p /data/opt/gitlab |
rsync会保留文件权限和软链接,比cp安全。rasync执行完后,使用diff指令确认下是否一致,如果不一致,则使用rsync继续进行迁移,直至无差异
备份原目录(以防回滚)
1 | sudo mv /var/opt/gitlab /var/opt/gitlab.bak |
建立软链接
1 | sudo ln -s /data/opt/gitlab /var/opt/gitlab |
权限检查
1 | sudo chown -R git:git /data/opt/gitlab |
GitLab 默认用户是
git,如果你有改过运行用户,替换成对应的用户名。
启动 GitLab
1 | sudo gitlab-ctl start |
验证
1 | sudo gitlab-ctl status |
确认服务正常,并检查网页是否可访问。
💡 注意事项
差异可能是 缓存文件、日志、socket 文件 等(比如
tmp/、log/、hooks/下的文件)。这些文件通常不影响核心数据,可以忽略。
/data要有足够权限和空间,并且最好挂载到一个稳定的磁盘上。成功运行一段时间后,可以删除
/var/opt/gitlab.bak节省空间。
mount bind 挂载的方案
把 GitLab 数据迁到 /data/opt/gitlab,并挂载到 /var/opt/gitlab,这样系统层面和原目录完全一致,比软链接更稳定。
停止 GitLab 服务
1 | sudo gitlab-ctl stop |
创建新目录并迁移数据
1 | sudo mkdir -p /data/opt/gitlab |
备份原目录
1 | sudo mv /var/opt/gitlab /var/opt/gitlab.bak |
创建挂载点目录
1 | sudo mkdir -p /var/opt/gitlab |
挂载(临时生效)
1 | sudo mount --bind /data/opt/gitlab /var/opt/gitlab |
设置开机自动挂载(永久生效)
编辑 /etc/fstab,在最后添加一行:
1 | /data/opt/gitlab /var/opt/gitlab none bind 0 0 |
保存后执行:
1 | sudo mount -a |
确保没有报错。
权限检查
1 | sudo chown -R git:git /data/opt/gitlab |
启动 GitLab
1 | sudo gitlab-ctl start |
验证
1 | sudo gitlab-ctl status |
确认挂载和服务都正常。
这样做完之后,**等一两周确认没问题再删除 /var/opt/gitlab.bak**,避免误操作导致数据丢失。
扩展:diff指令
基础指令
diff -r /var/opt/gitlab.bak /data/opt/gitlab
如果 两个目录完全一致,命令不会有任何输出。
如果有差异,会输出不同的文件路径和差异内容,例如:
1 | Only in /var/opt/gitlab.bak: somefile.tmp |
常用的几个变种
只比较文件列表(不比较内容):
1 | diff -qr /var/opt/gitlab.bak /data/opt/gitlab |
-q表示只输出“是否不同”,不会显示具体内容。
如果你想更直观,可以用 rsync 做 dry-run 检查差异:
1 | rsync -avnc /var/opt/gitlab.bak/ /data/opt/gitlab/ |
-n表示只演示,不执行,能看到哪些文件不一致。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小五的个人杂货铺!
