Linux分区数据迁移的完整流程与注意事项
tar(sudo tar -czvf backup.tar.gz /source/path)或rsync(sudo rsync -avh /source/path/ /backup/path/)创建源数据的完整备份,确保数据安全。/dev/sdb1)有足够空间(可通过df -h查看源分区使用量,lsblk查看目标分区大小),并已格式化为兼容文件系统(如ext4、xfs)。Clonezilla或dd;目录迁移推荐rsync;小范围调整推荐cp),并在Live CD/USB环境下操作(避免影响正在运行的系统)。工具:dd命令
适用于源与目标分区大小一致或目标更大的情况,逐块复制分区内容(包括分区表、引导记录、文件系统)。
命令示例:
sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress
if:源分区(如/dev/sda1,系统根分区);of:目标分区(如/dev/sdb1,新硬盘分区);bs:块大小(建议4M,提升复制速度);status=progress:显示复制进度。工具:Clonezilla(图形化工具)
更安全、易操作,支持增量克隆、压缩与校验。
操作步骤:
/dev/sda)与目标磁盘(如/dev/sdb);/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(保留所有属性)。/分区,新增/home)/dev/sda1):sudo e2fsck -f /dev/sda1 # 检查文件系统
sudo resize2fs /dev/sda1 9G # 缩小文件系统到9G(比目标分区小1G)
sudo fdisk /dev/sda # 删除原分区,重新创建更小的分区
/dev/sda2,用于/home),格式化(mkfs.ext4 /dev/sda2);rsync复制/mnt/old_root/home/到/mnt/new_home/);/etc/fstab:将新分区的UUID(通过blkid获取)添加到/etc/fstab,确保开机自动挂载。验证数据完整性:
使用diff命令递归比较源与目标目录,无输出则表示一致:
sudo diff -r /mnt/old_path/ /mnt/new_path/
或使用rsync的--checksum选项(更严格,但耗时):
sudo rsync -avh --checksum /mnt/old_path/ /mnt/new_path/
```。
更新引导配置(系统盘迁移必做):
/etc/fstab(目标分区UUID可通过blkid /dev/sdb1获取):sudo vim /mnt/new_root/etc/fstab
将原UUID替换为新UUID。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
```。
清理源数据:
确认迁移无误后,删除源分区数据(如sudo rm -rf /mnt/old_path),释放空间。
umount卸载,若提示“target is busy”,用lsof /path查找并结束占用进程)。/etc/fstab或GRUB配置,避免启动冲突。ddrescue(sudo ddrescue /dev/sda /dev/sdb rescue.log)替代dd,提高克隆成功率。