目 录CONTENT

文章目录

拒绝“爆盘”焦虑!高存储VPS数据盘挂载与Docker/1Panel数据无缝迁移终极指南

传家宝VPS
2025-12-28 / 0 评论 / 0 点赞 / 4 阅读 / 0 字
RackNerd Mobile Leaderboard Banner

有任何子分区,我们需要先建立分区:

sudo fdisk /dev/vdb
# 依次输入: n (新建) -> p (主分区) -> 1 (默认分区号) -> 回车 (默认起始) -> 回车 (默认结束) -> w (写入配置)

注:超过2TB的硬盘请使用 parted 进行GPT分区。

刷新分区表并格式化为 ext4 文件系统:

# 刷新分区状态
sudo partprobe /dev/vdb
# 格式化分区
sudo mkfs.ext4 /dev/vdb1

3. 配置开机自动挂载(UUID方案)

为了防止盘符漂移(如 vdb 变成 vdc),我们推荐使用 UUID 进行挂载。

  1. 创建挂载点

    sudo mkdir -p /mnt/data  # 该路径可根据习惯自定义
  2. 获取 UUID

    sudo blkid /dev/vdb1
    # 复制输出中 UUID="xxxx-xxxx" 引号内的字符串
  3. 写入 /etc/fstab

    # 备份原文件以防万一
    sudo cp /etc/fstab /etc/fstab.bak
    # 编辑文件
    sudo nano /etc/fstab

    在文件末尾添加以下内容(替换你的UUID):

    UUID=你的UUID /mnt/data ext4 defaults,nofail,x-systemd.device-timeout=30 0 2

    技巧:nofail 参数至关重要,它能确保即使硬盘故障,系统也能正常启动,不会卡在救援模式。

  4. 验证挂载

    sudo mount -a
    # 如果无报错,说明配置成功

第二阶段:1Panel 面板数据“乾坤大挪移”

如果你使用的是 1Panel 面板,直接移动数据并使用“软链接”是最稳妥的方案。

1. 准备新家

在数据盘创建专用目录结构,保持整洁:

sudo mkdir -p /mnt/data/server-data/{1panel,docker,containerd}

2. 迁移核心数据

步骤逻辑:停止服务 -> 同步数据 -> 建立替身(软链接) -> 恢复服务。

# 1. 停止面板服务
sudo 1pctl stop

# 2. 使用 rsync 同步数据(保留权限和属性)
# 注意:/opt/1panel 是默认安装路径,如有变动请自行调整
sudo rsync -avP /opt/1panel/ /mnt/data/server-data/1panel/

# 3. 备份原目录(确认迁移成功后可删除)
sudo mv /opt/1panel /opt/1panel.bak

# 4. 创建软链接:让系统以为数据还在原处
sudo ln -s /mnt/data/server-data/1panel /opt/1panel

# 5. 重启面板
sudo 1pctl start

安全提示:除用户个人目录外,服务类数据目录建议保持 root:root 权限,不要随意 chown 整个挂载点。


第三阶段:Docker 与 Containerd 的深度迁移

这是最关键的一步。很多教程只迁移 Docker,却忽略了 containerd,导致存储空间依然告急。

1. 彻底停止容器服务

必须停止所有相关服务,防止数据写入导致迁移不完整。

sudo systemctl stop docker.socket
sudo systemctl stop docker
sudo systemctl stop containerd

2. 修改 Docker 配置文件

编辑 /etc/docker/daemon.json,指定新的数据根目录并限制日志大小(防止日志爆盘):

{
    "data-root": "/mnt/data/server-data/docker",
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    }
}

注意:如果文件已存在,请将上述键值对合并进去,确保 JSON 格式正确。

执行 Docker 数据同步:

sudo rsync -aHAX --numeric-ids -vP /var/lib/docker/ /mnt/data/server-data/docker/

3. 迁移 Containerd (使用 Bind Mount)

由于 containerd 不像 Docker 那样方便通过配置文件修改路径,我们使用 Linux 的 Bind Mount 机制,将新目录“映射”回原路径。

  1. 同步数据

    sudo rsync -aHAX --numeric-ids -vP /var/lib/containerd/ /mnt/data/server-data/containerd/
  2. 清空原目录并重建

    sudo mv /var/lib/containerd /var/lib/containerd.bak
    sudo mkdir -p /var/lib/containerd
  3. 配置 fstab 自动映射: 编辑 /etc/fstab,在末尾添加:

    /mnt/data/server-data/containerd /var/lib/containerd none defaults,bind,nofail 0 0
  4. 挂载并验证

    sudo mount -a
    # 检查是否挂载成功
    mount | grep /var/lib/containerd

4. 重启与终极验证

完成以上步骤后,恢复服务:

sudo systemctl daemon-reload
sudo systemctl start containerd
sudo systemctl start docker

验证清单

  1. 输入 docker info | grep "Docker Root Dir",确认路径已变更为 /mnt/data/...

  2. 检查你的容器是否正常启动。

  3. 确认业务正常后,可删除 /var/lib/docker.bak/var/lib/containerd.bak 释放空间。


总结

通过以上操作,你已经成功将 VPS 的存储压力转移到了大容量数据盘上。这不仅解决了系统盘空间不足的隐患,在未来重装系统或迁移服务器时,数据保留在独立盘中也更加安全方便。

广告 广告
博主关闭了所有页面的评论