Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
Linux 服务器磁盘扩容与目录迁移rsync bind mount 实现服务无感迁移无需修改配置背景最近服务器原有数据盘容量不足需要将服务和数据迁移至新的更大容量磁盘。但现有服务配置中已经大量写死了原有路径/home/top为了避免修改服务配置、降低风险本次迁移采用:使用rsync进行数据同步使用mount --bind进行目录重映射使路径保持不变但底层存储位置发生改变从而避免修改服务配置。一、数据同步在迁移数据之前先将所有服务暂停避免在复制数据过程中产生新的数据。旧的服务和数据地址/home/top/ (挂载在/dev/vdb1)新的服务和数据地址/mine/top/ 挂载在/dev/vdb2执行以下命令将数据从/home/top/复制到/mine/top/rsync -av /home/top/ /mine/top/【如果数据量较大建议在停止服务前先执行一次 rsync 进行全量同步停止服务后再执行一次 rsync 同步增量数据可有效缩短停机时间。】二、备份原目录执行以下命令将原有数据保存一份副本以便出现意外后恢复数据。mv /home/top /home/top_bak三、目录重映射mkdir /home/top #重新创建原有目录服务相关配置用到了原有路径此时这个目录为空目录 mount --bind /mine/top /home/top #将/home/top目录映射到/mine/top之后写入/home/top的数据实际都存储到/mine/top中。相当于入口不变而底层存储位置改变。【注意bind mount 并不会删除原目录数据而是将原目录作为挂载点覆盖。如果执行umount /home/top仍然可以看到原目录内容。】四、开机自动挂载前面执行的mount --bind /mineDrone/top /home/top只是临时生效。如果此时服务器重启系统会重新加载文件系统挂载信息而我们手动执行的 bind 挂载会失效。此时我们需要设置开机自动挂载。修改/etc/fstab,在文件的末尾增加/mine/top /home/top none bind 0 0 # 源 挂载点 文件系统类型 挂载选项 dump fsck修改完成后不要直接重启先执行mount -a如果没有报错说明配置正确开机自动挂载配置完成。五、迁移验证在完成目录重映射和开机自动挂载配置后需要确认迁移是否真正生效。执行mount | grep top可以看到类似输出:/mine/top on /home/top type none (rw,bind)说明挂载成功。也可以使用findmnt /home/top看到以下输出/dev/vdb2 #新数据盘