tar -cf - --one-file-system / | tar -xf - -C /mnt

通过 tar 打包整个根目录,写入到通道,然后在另外一个通道解包文件。

必须用 root 用户运行这个命令。--one-file-system 参数控制只读去当前文件系统,其他挂载点都会跳过,也就是会跳过 dev sys proc 这些虚拟的目录。- 这个用来表示通道,当然如果不立即写入到文件系统,也可以单单打包成一个 tar 文件。-C /mnt 表示迁移到目标目录。

使用 tar 的好处是默认保留文件的权限信息、所有者信息,还原的时候文件各种属性都能保持一致。

事实上,我用这个命令不断的迁移我正在使用的 ArchLinux 开发环境。这个开发环境只有两个分区:boot 分区和 root 分区。boot 分区是 vfat 格式,存放则系统引导工具还有引导配置文件。引导的配置文件记录着 root 分区的 PARTUUID。root 分区里面有一个 /etc/fstab 记录着系统所有的挂载点。

所以系统迁移的时候,除了完整的文件拷贝(需要拷贝 boot 分区和 root 分区,运行两次上面的命令),还需要另行修改这两个地方,修改之后就能启动。

同样的全盘文件拷贝命令还有 cp rsync ,正常来说 rsync 需要另行安装。