Docker磁盘爆满?手把手教你无损迁移数据到新硬盘(附CentOS 7.9实战记录)
Docker磁盘爆满应急指南零停机迁移数据到新存储的全流程解析凌晨三点服务器告警短信惊醒梦中人——/var分区使用率99%。作为刚接手运维工作的开发者这种场景往往让人手足无措。本文将以CentOS 7.9环境为例详解如何在不中断服务的情况下将Docker数据安全迁移至新磁盘。不同于常规教程我们将重点关注在线迁移技巧和故障回滚方案确保即使操作失误也能快速恢复业务。1. 磁盘危机诊断与预处理当df -h显示根分区接近饱和时首先要确定罪魁祸首。通过以下命令快速定位Docker存储消耗du -sh /var/lib/docker/* | sort -rh | head -10典型输出可能显示overlay2目录占用了绝大部分空间这是Docker默认的存储驱动位置。此时需要检查僵尸容器docker ps -a查看已停止但未删除的容器悬空镜像docker image ls -f danglingtrue未清理的构建缓存docker builder prune重要提示执行任何清理操作前务必先通过docker save备份关键镜像如果清理后空间仍不足就需要考虑存储迁移。准备新磁盘时需注意确认磁盘设备标识符如/dev/vdb评估所需容量建议至少预留50%增长空间规划挂载点路径如/data2. 新磁盘配置实战2.1 磁盘分区与格式化对于300GB的新磁盘推荐使用GPT分区表而非传统的MBRparted /dev/vdb mklabel gpt parted -a optimal /dev/vdb mkpart primary 0% 100% mkfs.xfs -f /dev/vdb1 # XFS相比ext4更适合Docker工作负载关键参数说明参数作用推荐值-a optimal对齐物理扇区必选-f强制格式化新磁盘必选-i size512inode大小默认即可2.2 智能挂载配置创建挂载点并设置自动挂载mkdir -p /data mount -o pquota,uquota /dev/vdb1 /data # 启用配额支持在/etc/fstab中添加UUID磁盘UUID /data xfs defaults,pquota,uquota 0 0验证挂载效果mount -a df -Th /data3. Docker在线迁移方案3.1 服务无感知迁移传统方案要求停止Docker服务这在生产环境中不可接受。我们可以利用rsync实现热迁移systemctl start docker # 确保服务运行 rsync -avzP --delete /var/lib/docker/ /data/docker/监控迁移进度时另开终端执行watch -n 1 du -sh /var/lib/docker /data/docker3.2 配置动态切换修改/etc/docker/daemon.json{ data-root: /data/docker, storage-driver: overlay2, storage-opts: [ overlay2.override_kernel_checktrue ] }重载配置而不重启服务systemctl reload docker验证新存储位置docker info | grep Docker Root Dir4. 高级保障措施4.1 回滚方案设计创建快速回滚脚本/usr/local/bin/docker_rollback.sh#!/bin/bash systemctl stop docker mv /data/docker /data/docker_migrated ln -s /var/lib/docker /data/docker systemctl start docker设置可执行权限chmod x /usr/local/bin/docker_rollback.sh4.2 存储性能优化在新存储上启用direct-lvm模式创建物理卷pvcreate /dev/vdb1 vgcreate docker-vg /dev/vdb1 lvcreate --wipesignatures y -n thinpool docker-vg -l 95%VG配置精简池lvcreate --wipesignatures y -n thinpoolmeta docker-vg -l 1%VG lvconvert --type thin-pool --poolmetadata docker-vg/thinpoolmeta docker-vg/thinpool更新daemon.json{ storage-driver: devicemapper, storage-opts: [ dm.thinpooldev/dev/mapper/docker--vg-thinpool, dm.use_deferred_removaltrue ] }5. 迁移后验证与监控执行完整性检查docker container ls -q | xargs docker inspect -f {{.GraphDriver.Data.MergedDir}} | grep ^/data设置Prometheus监控指标# prometheus.yml 新增 - job_name: docker_storage static_configs: - targets: [localhost:9323]启用Docker指标导出dockerd --metrics-addr 0.0.0.0:9323最后建议设置定期维护任务# 每周日凌晨清理 0 0 * * 0 docker system prune -af --filter until168h
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2447315.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!