如何通过Linux分卷进行数据迁移
小樊
46
2025-11-22 09:06:26
Linux分卷数据迁移实用指南
一、场景与方案总览
- 跨网络或介质传输大文件时,先对数据做分卷压缩,再逐包传输,最后在目标端合并与校验,可显著降低中断重传成本,适合带宽不稳或介质容量受限的环境。
- 在同一台服务器或同网段内做存储迁移时,使用LVM的在线迁移能力,可将数据从旧磁盘无中断迁移到新磁盘,业务无需停机。
- 需要按目录或选择性打包时,结合zip 分包与排除规则,分批迁移并可在目标端直接解压首个分卷完成合并。
二、基于分卷压缩的迁移步骤
- 源端打包分卷
- 文件夹整体分包:zip -r -s 100G image2.zip ./image2/(-s 指定分卷大小,如100G、1G)。
- 单文件分包:zip -s 10G image2.zip image.tar。
- 排除目录:zip -r -s 100G image2.zip /image2/ -x “image2/exclude_dir1/" "image2/exclude_dir2/”。
- 传输分卷
- 使用 rsync/scp/对象存储/移动硬盘等,将生成的分卷(如 image2.z01、image2.z02、…、image2.zip)全部传至目标端。
- 目标端合并与解压
- 直接解压首个分卷即可自动拼合:unzip image2.zip。
- 若遇到“bad zipfile offset (local header sig)”等损坏提示,先修复再解压:zip -F A.zip --out B.zip && unzip B.zip。
- 完整性校验
- 对比源端与目标端校验值:md5sum image2.zip 或 md5sum image.tar,确保一致。
三、基于 LVM 的在线磁盘到磁盘迁移
- 适用前提
- 数据位于LVM 逻辑卷上;新增一块磁盘(如 /dev/sdb)准备承接数据。
- 操作步骤
- 准备新盘并加入卷组
- 分区并初始化:pvcreate /dev/sdb1(分区类型建议 Linux LVM/8e)。
- 扩容卷组:vgextend <VG名> /dev/sdb1。
- 在线迁移数据
- 方式一(推荐)镜像后剥离:
- 添加镜像:lvconvert -m 1 /dev/<VG名>/<LV名> /dev/sdb1(将镜像放到新盘)。
- 同步完成后移除旧盘镜像:lvconvert -m 0 /dev/<VG名>/<LV名> /dev/<旧PV>。
- 方式二 直接数据迁移:pvmove /dev/<旧PV> /dev/sdb1(将旧盘数据迁到新盘)。
- 清理旧盘
- 从卷组移除旧盘:vgreduce <VG名> /dev/<旧PV>;必要时 pvremove。
- 验证
- 检查 LV 设备映射与数据可用性:lvs -o+devices;mount | grep <挂载点>;业务侧读写验证。
- 说明
- 上述迁移过程在线进行,通常无需停机;LVM 支持在不同类型磁盘(如 SATA/SSD/SAS/iSCSI/FC)间迁移。
四、仅扩容逻辑卷与文件系统
- 当卷组已有空闲空间,可直接扩展 LV 并调整文件系统大小:
- 扩展 LV:lvextend -l +100%FREE /dev/<VG名>/<LV名>。
- 调整文件系统:
- ext4:resize2fs /dev/<VG名>/<LV名>
- xfs:xfs_growfs <挂载点>
- 验证:df -h 查看容量变化。
五、注意事项与最佳实践
- 校验与回滚
- 任何迁移前后都进行校验和(如 md5sum/sha256sum);重要业务先演练,准备回滚方案。
- 一致性与可用性
- 迁移期间避免对源数据做结构性变更(如大量删除/重命名);数据库等场景建议停写或维护窗口。
- 工具与兼容性
- LVM 方案需系统安装 lvm2 工具;跨平台或离线介质传输时,zip 分卷通用性更好。
- 故障处理
- 分卷压缩若损坏,优先用 zip -F 修复再解压;LVM 迁移失败可回退镜像或中止 pvmove 后检查。