1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# 1. 停止服务(避免数据写入)
systemctl stop docker
systemctl stop containerd
# 2. 修改 Docker data-root(保证 JSON 不被破坏)
tmpfile=$(mktemp)
jq '.["data-root"] = "/data/disk/cache"' /etc/docker/daemon.json > "$tmpfile" \
&& mv "$tmpfile" /etc/docker/daemon.json
# 3. 创建目标目录
mkdir -p /data/disk/cache
mkdir -p /data/disk/containerd
# 4. 迁移 containerd 数据(避免 mv 跨设备问题)
rsync -aHAX /var/lib/containerd/ /data/disk/containerd/
# 5. 备份旧数据(不要直接删)
mv /var/lib/containerd /var/lib/containerd.bak
# 6. 生成 containerd 配置(仅在不存在时)
[ -f /etc/containerd/config.toml ] || \
containerd config default > /etc/containerd/config.toml
# 7. 修改 root/state(精确匹配)
sed -i 's#^root = .*#root = "/data/disk/containerd"#' /etc/containerd/config.toml
sed -i 's#^state = .*#state = "/run/containerd"#' /etc/containerd/config.toml
# 8. 重新加载 systemd(通常可选,但建议)
systemctl daemon-reload
# 9. 启动服务(顺序很重要)
systemctl start containerd
systemctl start docker
|