有任何子分区,我们需要先建立分区:
sudo fdisk /dev/vdb
# 依次输入: n (新建) -> p (主分区) -> 1 (默认分区号) -> 回车 (默认起始) -> 回车 (默认结束) -> w (写入配置)注:超过2TB的硬盘请使用 parted 进行GPT分区。
刷新分区表并格式化为 ext4 文件系统:
# 刷新分区状态
sudo partprobe /dev/vdb
# 格式化分区
sudo mkfs.ext4 /dev/vdb13. 配置开机自动挂载(UUID方案)
为了防止盘符漂移(如 vdb 变成 vdc),我们推荐使用 UUID 进行挂载。
创建挂载点:
sudo mkdir -p /mnt/data # 该路径可根据习惯自定义获取 UUID:
sudo blkid /dev/vdb1 # 复制输出中 UUID="xxxx-xxxx" 引号内的字符串写入
/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参数至关重要,它能确保即使硬盘故障,系统也能正常启动,不会卡在救援模式。验证挂载:
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 containerd2. 修改 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 机制,将新目录“映射”回原路径。
同步数据:
sudo rsync -aHAX --numeric-ids -vP /var/lib/containerd/ /mnt/data/server-data/containerd/清空原目录并重建:
sudo mv /var/lib/containerd /var/lib/containerd.bak sudo mkdir -p /var/lib/containerd配置 fstab 自动映射: 编辑
/etc/fstab,在末尾添加:/mnt/data/server-data/containerd /var/lib/containerd none defaults,bind,nofail 0 0挂载并验证:
sudo mount -a # 检查是否挂载成功 mount | grep /var/lib/containerd
4. 重启与终极验证
完成以上步骤后,恢复服务:
sudo systemctl daemon-reload
sudo systemctl start containerd
sudo systemctl start docker验证清单:
输入
docker info | grep "Docker Root Dir",确认路径已变更为/mnt/data/...。检查你的容器是否正常启动。
确认业务正常后,可删除
/var/lib/docker.bak和/var/lib/containerd.bak释放空间。
总结
通过以上操作,你已经成功将 VPS 的存储压力转移到了大容量数据盘上。这不仅解决了系统盘空间不足的隐患,在未来重装系统或迁移服务器时,数据保留在独立盘中也更加安全方便。
