Linux文件系统迁移指南
文件系统迁移是将数据从一个存储位置(如分区、磁盘)移动到另一个位置的过程,常见场景包括磁盘空间扩容、分区调整、系统备份或跨设备迁移。以下是具体方法和注意事项:
tar打包或复制到外部存储),防止操作失误导致数据丢失。df -h查看磁盘使用情况),并已格式化为兼容的文件系统(如ext4、XFS)。ls -ld /target/directory检查,必要时用chmod修改权限)。rsync是Linux下最常用的文件同步工具,支持保留文件权限、时间戳、符号链接等属性,且支持增量同步(仅传输变化的部分)。
/old_home迁移到/new_home):sudo rsync -av --progress /old_home/ /new_home/
参数说明:-a(归档模式,保留权限、时间戳等)、-v(详细输出)、--progress(显示传输进度)。/data迁移到远程服务器的/backup):sudo rsync -avz -e ssh /data/ user@remote_host:/backup/
参数说明:-z(压缩传输)、-e ssh(通过SSH加密传输)。tar可将目录打包为压缩文件,适合跨文件系统迁移(如从硬盘分区到外部磁盘),但需手动解压。
/old_home打包到/tmp/data.tar.gz,然后解压到/new_home):# 打包(排除隐藏文件可加 --exclude='.*')
sudo tar -czvf /tmp/data.tar.gz -C /old_home .
# 解压到目标目录
sudo tar -xzvf /tmp/data.tar.gz -C /new_home
参数说明:-c(创建归档)、-z(gzip压缩)、-x(解压)、-v(详细输出)。dd用于复制磁盘的块数据,适合整盘克隆或分区迁移(如将/dev/sda1迁移到/dev/sdb1),但需确保源和目标大小一致。
/dev/sda1到/dev/sdb1):sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4M status=progress
参数说明:if(输入文件,源设备)、of(输出文件,目标设备)、bs(块大小,提高传输效率)、status=progress(显示进度)。dd会复制所有数据(包括空闲空间),速度较慢,适合整盘迁移而非单个目录。若系统使用LVM(逻辑卷管理),可通过扩展逻辑卷实现动态迁移,无需重新分区。
sudo pvcreate /dev/new_disk(如新硬盘/dev/sdb);sudo vgextend volume_group /dev/new_disk(将新物理卷加入现有卷组,如vg0);sudo lvextend -l +100%FREE /dev/vg0/lv_home(扩展逻辑卷lv_home到剩余空间);sudo resize2fs /dev/vg0/lv_home(ext4文件系统)或sudo xfs_growfs /dev/vg0/lv_home(XFS文件系统)。大多数Linux发行版(如Ubuntu、Fedora)的文件管理器(Nautilus、Dolphin)支持拖拽复制,可直观地迁移文件和目录。需确保目标目录有足够空间,且复制过程中保持网络稳定(若跨服务器)。
diff命令对比源和目标目录的内容(如diff -r /old_home /new_home),或使用rsync的--dry-run模式模拟同步(sudo rsync -av --dry-run /old_home/ /new_home/)。ls -l /target/directory检查文件权限是否与源目录一致(如用户、组、读写权限)。/dev/sda1到/dev/sdb1),mv命令会复制后删除源文件(inode变化,硬链接失效),建议优先使用rsync或tar。rsync默认保留符号链接(-a参数),若需复制符号链接指向的实际文件,可添加-L参数(sudo rsync -avL /old_home/ /new_home/)。/usr、/var),需在单用户模式或救援模式下操作,避免影响系统运行。