温馨提示×

Linux分区怎样进行数据迁移

小樊
51
2025-10-18 02:31:10
栏目: 智能运维

Linux分区数据迁移的完整流程与注意事项

一、迁移前的准备工作

  1. 备份重要数据:使用tarsudo tar -czvf backup.tar.gz /source/path)或rsyncsudo rsync -avh /source/path/ /backup/path/)创建源数据的完整备份,确保数据安全。
  2. 检查目标存储设备:确认目标分区(如/dev/sdb1)有足够空间(可通过df -h查看源分区使用量,lsblk查看目标分区大小),并已格式化为兼容文件系统(如ext4xfs)。
  3. 准备工具与环境:根据迁移场景选择工具(系统盘迁移推荐Clonezilladd;目录迁移推荐rsync;小范围调整推荐cp),并在Live CD/USB环境下操作(避免影响正在运行的系统)。

二、常见迁移场景与工具选择

1. 整个分区/系统盘迁移(保留所有数据与引导)

  • 工具:dd命令
    适用于源与目标分区大小一致或目标更大的情况,逐块复制分区内容(包括分区表、引导记录、文件系统)。
    命令示例

    sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress
    
    • if:源分区(如/dev/sda1,系统根分区);
    • of:目标分区(如/dev/sdb1,新硬盘分区);
    • bs:块大小(建议4M,提升复制速度);
    • status=progress:显示复制进度。
  • 工具:Clonezilla(图形化工具)
    更安全、易操作,支持增量克隆、压缩与校验。
    操作步骤

    1. 从Clonezilla Live USB启动;
    2. 选择“设备-设备”克隆模式;
    3. 选择源磁盘(如/dev/sda)与目标磁盘(如/dev/sdb);
    4. 开始克隆并等待完成。

2. 特定目录迁移(如/home/usr

  • 工具:rsync(推荐)
    保留文件权限、时间戳、硬链接等属性,支持断点续传,适合大目录迁移。
    命令示例

    sudo rsync -avh --progress /mnt/old_home/ /mnt/new_home/
    
    • -a:归档模式(保留所有属性);
    • -v:详细输出;
    • --progress:显示传输进度。
  • 工具:cp命令(简单场景)
    递归复制目录,保留基本属性(如权限、时间戳)。
    命令示例

    sudo cp -a /mnt/old_home/. /mnt/new_home/
    
    • -a:等同于-dR --preserve=all(保留所有属性)。

3. 系统盘分区调整后迁移(如缩小/分区,新增/home

  • 步骤概述
    1. 使用Live CD启动,缩小源分区(如/dev/sda1):
      sudo e2fsck -f /dev/sda1  # 检查文件系统
      sudo resize2fs /dev/sda1 9G  # 缩小文件系统到9G(比目标分区小1G)
      sudo fdisk /dev/sda        # 删除原分区,重新创建更小的分区
      
    2. 创建新分区(如/dev/sda2,用于/home),格式化(mkfs.ext4 /dev/sda2);
    3. 恢复数据:将源分区数据迁移到新分区(如用rsync复制/mnt/old_root/home//mnt/new_home/);
    4. 更新/etc/fstab:将新分区的UUID(通过blkid获取)添加到/etc/fstab,确保开机自动挂载。

三、迁移后的验证与收尾

  1. 验证数据完整性
    使用diff命令递归比较源与目标目录,无输出则表示一致:

    sudo diff -r /mnt/old_path/ /mnt/new_path/
    

    或使用rsync--checksum选项(更严格,但耗时):

    sudo rsync -avh --checksum /mnt/old_path/ /mnt/new_path/
    ```。  
    
    
  2. 更新引导配置(系统盘迁移必做)

    • 若目标分区UUID与源不同,需更新/etc/fstab(目标分区UUID可通过blkid /dev/sdb1获取):
      sudo vim /mnt/new_root/etc/fstab
      
      将原UUID替换为新UUID。
    • 重新安装GRUB引导加载器(确保从新硬盘启动):
      sudo mount /dev/sdb1 /mnt/new_root  # 挂载新根分区
      sudo mount /dev/sdb2 /mnt/new_root/boot  # 挂载新boot分区(若有)
      sudo chroot /mnt/new_root           # 切换到新系统环境
      sudo grub-install /dev/sdb          # 安装GRUB到新硬盘
      sudo update-grub                    # 更新GRUB配置
      exit                                # 退出chroot
      ```。  
      
      
  3. 清理源数据
    确认迁移无误后,删除源分区数据(如sudo rm -rf /mnt/old_path),释放空间。

四、关键注意事项

  • 避免分区重叠:确保目标分区未被挂载或正在使用(可通过umount卸载,若提示“target is busy”,用lsof /path查找并结束占用进程)。
  • 保持UUID一致:若目标分区UUID与源相同,需修改/etc/fstab或GRUB配置,避免启动冲突。
  • 处理坏道:若源硬盘有坏道,使用ddrescuesudo ddrescue /dev/sda /dev/sdb rescue.log)替代dd,提高克隆成功率。
  • 测试启动:迁移完成后,从新硬盘启动系统,确认所有功能正常(如登录、文件访问、服务运行)。

0