背景
/var/opt/gitlab 所在磁盘资源不足,现在希望将其无感迁移到 /data/opt/gitlab。
软链接方案
停止 GitLab 服务
迁移数据到新盘目录
1 2
| sudo mkdir -p /data/opt/gitlab sudo rsync -av --progress /var/opt/gitlab/ /data/opt/gitlab/
|
rsync 会保留文件权限和软链接,比 cp 安全。
rsync 执行完后,使用 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
验证
确认服务正常,并检查网页是否可访问。
注意事项
- 差异可能是缓存文件、日志、socket 文件等(比如
tmp/、log/ 、hooks/ 下的文件)。这些文件通常不影响核心数据,可以忽略 /data 要有足够权限和空间,并且最好挂载到一个稳定的磁盘上- 成功运行一段时间后,可以删除
/var/opt/gitlab.bak 节省空间
mount bind 挂载方案
把 GitLab 数据迁到 /data/opt/gitlab,并挂载到 /var/opt/gitlab,这样系统层面和原目录完全一致,比软链接更稳定。
停止 GitLab 服务
创建新目录并迁移数据
1 2
| sudo mkdir -p /data/opt/gitlab sudo rsync -av --progress /var/opt/gitlab/ /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 chown -R git:git /data/opt/gitlab
|
启动 GitLab
验证
1 2
| sudo gitlab-ctl status mount | grep gitlab
|
确认挂载和服务都正常。
这样做完之后,等一两周确认没问题再删除 /var/opt/gitlab.bak,避免误操作导致数据丢失。
扩展:diff 指令
基础指令
1
| diff -r /var/opt/gitlab.bak /data/opt/gitlab
|
如果两个目录完全一致,命令不会有任何输出。
如果有差异,会输出不同的文件路径和差异内容,例如:
1 2
| Only in /var/opt/gitlab.bak: somefile.tmp Files /var/opt/gitlab.bak/config/gitlab.rb and /data/opt/gitlab/config/gitlab
|
常用的几个变种
只比较文件列表(不比较内容):
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 表示只演示,不执行,能看到哪些文件不一致。