linux添加新硬盘挂载分区和数据迁移

linux添加新硬盘挂载分区和数据迁移

添加硬盘和挂载分区

开始前,停止所有与迁移数据目录相关的服务和容器

bash 复制代码
systemctl stop nginx
systemctl stop docker
# 关闭自启动,防止重启后有新的请求进入到服务
systemctl disable nginx
systemctl disable docker
  1. 查看现有分区
bash 复制代码
lsblk

看出这里只有一个系统盘vda(虚拟环境的系统都是以vdX命名,例如云服务器,物理设备是以sdX命名)

bash 复制代码
# 查看硬盘是ssd还是hdd,rota为1表示可旋转的hdd,0为ssd
lsblk -d -o name,rota
# 或者
cat /sys/block/vda/queue/rotational
  1. 增加后再次执行lsblk会增加一个类似vdb命名的硬盘
  2. 开始挂载分区
bash 复制代码
# 创建分区
fdisk /dev/vdb
# 在fdisk中: n(新建分区)->p(主分区)->1(分区号)->(默认起始扇区)->(默认结束扇区)->w(保存)

保存之后执行fdisk -l查看新建的分区vdb1

  1. 格式化分区
bash 复制代码
# 高io推荐xfs
mkfs.xfs /dev/vdb1
  1. 开始挂载分区
bash 复制代码
# 新建挂载目录
mkdir /mnt/vdb1
# 临时挂载
mount /dev/vdb1 /mnt/vdb1
# 永久挂载
echo "UUID=$(sudo blkid -s UUID -o value /dev/vdb1) /mnt/vdb1 xfs defaults 0 0" | sudo tee -a /etc/fstab

重启执行lsblk验证

迁移数据

  1. 拷贝数据
bash 复制代码
# 复制数据到新磁盘
rsync -avzh --progress /docker_v/ /mnt/vdb1/docker_v/
# 验证数据完整性,如果无输出,表示完全一致
diff -r /docker_v/ /mnt/vdb1/docker_v/
  1. 重启容器服务
  • 2.1 方式一、使用软连接方式(生产环境优选)
bash 复制代码
# 确保软链接的目标目录权限与原目录一致
chown -R root:root /mnt/vdb1/docker_v
# 重命名原目录(保险操作)
sudo mv /docker_v /docker_v_old
# 创建软连接
ln -sf /mnt/vdb1/docker_v /docker_v

优点

快速无缝迁移:容器无需修改配置,所有路径保持不变

缺点

若软链接被误删或新磁盘挂载失败,或目录权限被更改,Docker 将无法访问数据。

  • 2.2 方式二、修改容器挂载目录方式(建议开发测试环境采用)
  • 修改容器配置,提前记录好每个容器主要参数,如原挂载信息,端口映射,网络模式,镜像版本等(使用docker inspect <容器名>查看,最好保存到文档)
  • 删除容器(不删数据卷)docker rm <容器名>
  • 重新创建容器,将挂载路径改为新目录-v /mnt/vdb1/docker_v/?:/path/in/container(同时留意该容器其他启动参数是否正确)

优点

直接管理数据路径,降低复杂度避免误操作更稳定,灵活性高。

缺点

操作繁琐,需修改容器配置

  1. 测试检查
bash 复制代码
#启动docker容器和相关服务测试有无问题
systemctl start docker
systemctl start nginx
# 无问题,恢复自启动
systemctl enable nginx
systemctl enable docker
相关推荐
雯宝2 小时前
mnt_init 函数
linux
律宏阔8 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔8 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴8 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千8 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei378 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei378 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei378 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh8 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
GeW8 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux