有部分小伙伴把服务直接部署在系统盘内,占用了大量的系统盘空间,需要定期清理服务产生的日志文件很麻烦,接下来我就以docker服务为例,做一下数据迁移。
📦 通过软链接(安全且无损)
1. 停止 Docker 服务
bash
sudo systemctl stop docker
2. 备份原数据(重要!)
bash
sudo cp -a /var/lib/docker /var/lib/docker.bak
3. 迁移数据到数据盘
bash
# 创建目标目录
sudo mkdir -p /data/docker
# 复制数据(保留权限)
sudo rsync -avxP /var/lib/docker/ /data/docker/
说明:使用 rsync 比 mv 更安全,可避免数据丢失
4. 重命名原目录(作为临时备份)
bash
sudo mv /var/lib/docker /var/lib/docker.old
5. 创建软链接
bash
sudo ln -s /data/docker /var/lib/docker
6. 修复 SELinux 上下文(如果启用 SELinux)
bash
sudo restorecon -Rv /var/lib/docker
7. 启动 Docker 并验证
bash
sudo systemctl start docker
docker info | grep "Docker Root Dir" # 应显示 /data/docker
docker ps -a # 检查容器状态
docker images # 检查镜像是否正常
8. 确认无误后清理(谨慎操作)
bash
# 运行3-4天确认无问题后
sudo rm -rf /var/lib/docker.old
sudo rm -rf /var/lib/docker.bak
⚠️ 关键注意事项
磁盘空间要求
-
确保 /data 有足够空间容纳整个 /var/lib/docker
-
建议预留 20% 以上空间供 Docker 使用
软链接权限
确保软链接的权限一致:
bash
ls -ld /var/lib/docker # 应显示 lrwxrwxrwx … /var/lib/docker -> /data/docker
挂载点配置
确保 /data 在 /etc/fstab 中配置了自动挂载,避免重启后失效:
bash
# 查看 /data 的文件系统类型
df -Th /data
# 示例 /etc/fstab 条目(根据实际情况修改)
/dev/sdb1 /data xfs defaults 0 0
容器存储驱动兼容性
如果使用特定存储驱动(如 btrfs, zfs),需确保目标文件系统支持
🔄 替代方案:修改 Docker 配置(更推荐)
如果担心软链接的兼容性问题,可以直接修改 Docker 数据目录:
编辑配置文件:
bash
sudo mkdir /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"data-root": "/data/docker"
}
EOF
移动数据:
bash
sudo systemctl stop docker
sudo mv /var/lib/docker/* /data/docker/
sudo systemctl start docker
💡 迁移后管理建议
定期清理
bash
# 自动清理无用数据
docker system prune -af
日志管理
在 daemon.json 添加日志限制:
json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
监控磁盘
添加监控告警,当 /data 使用率 >80% 时触发通知
评论前必须登录!
注册