#Docker #磁盘管理 #服务器运维

背景

N100 系统盘(117G SSD)长期维持在 85-91% 使用率,Docker 镜像占用约 10 GB,是主要的可迁移项。

当前磁盘布局:

设备 大小 文件系统 挂载点 使用率
sda2 (SSD) 117G ext4 / ~91%
sdc1 (HDD) 1.9T btrfs /nfs ~25%
sdb2 (HDD) 3.7T exFAT /smb ~52%

性能影响评估

阶段 影响 说明
容器启动 慢 2-5 秒 从 HDD 读取镜像层,仅启动时一次性
容器运行中 无影响 镜像层被 overlayfs 挂入页面缓存,与存储位置无关
容器写入(可写层) 轻微 取决于应用写入频繁程度

结论:mt-photos、qbittorrent、openclaw 等均为长驻服务,启动多几秒可接受,运行性能无损失。


迁移目标选择

  • /nfs(btrfs):完整 Linux 文件系统,支持 Unix 权限、符号链接、硬链接,可行

  • /smb(exFAT):不支持 Unix 权限和符号链接,Docker 会报错,不可行


迁移步骤(待执行)

1. 停止所有容器

1
docker stop $(docker ps -q)

2. 停止 Docker 服务

1
sudo systemctl stop docker

3. 创建新数据目录

1
sudo mkdir -p /nfs/docker

4. 迁移现有数据

1
sudo rsync -aP /var/lib/docker/ /nfs/docker/

rsync 完成后先不要删除原目录,验证正常后再清理。

5. 修改 Docker 数据根目录

1
sudo nano /etc/docker/daemon.json

写入(若文件已存在则合并):

1
2
3
{
"data-root": "/nfs/docker"
}

6. 重启 Docker 并验证

1
2
3
4
5
6
sudo systemctl start docker
docker info | grep "Docker Root Dir"
# 期望输出:Docker Root Dir: /nfs/docker

docker ps # 确认所有容器恢复运行
docker images # 确认镜像完整

7. 验证无误后清理原目录

1
2
# 确认新路径完全正常后再执行
sudo rm -rf /var/lib/docker

预期收益

  • SSD 释放约 10 GB,使用率从 ~91% 降至 ~83%

  • /nfs 剩余 1.4T,存放 Docker 数据绰绰有余


注意事项

  1. rsync 必须在 Docker 停止后执行,否则迁移中数据不一致

  2. btrfs 写时复制特性:Docker overlayfs 在 btrfs 上需确认兼容性,若遇问题可在 daemon.json"storage-driver": "overlay2"

  3. ext-mount.service 依赖 /nfs 挂载:确保系统启动时 /nfs 先于 Docker 挂载(当前 fstab 配置已满足)

  4. 迁移前备份 daemon.json(若已有自定义配置)


延伸阅读