我买了一个 SSD,想让它成为我的新 Linux 启动驱动器。但是,它比我当前硬盘的 Linux 根分区小,所以我想复制文件系统并排除一些目录(我会将它们留在另一块硬盘上)。因此,我不能只用 parted 或类似程序克隆分区,因为它太大了。
我想确保所有数据、元数据、链接等都得到保留。这似乎排除了“cp”,因为它没有保留所有元数据和链接信息。
我能识别的两种基本技术似乎是这样的:
find / -xdev -print0 | cpio -pa0V /mnt/dst
和:
rsync -avP -H -S --numeric-ids / /mnt/dst
有人能说出他们过去使用过的方法吗,无论是其中一种还是其他方法,或者他们是否发现这些方法存在任何缺陷。
答案1
不确定您所说的元数据是什么意思。Inode 编号?cp -a 将复制所有权限、链接等。如果您想排除某些内容,我会使用 rsync 的 --exclude 选项。如果您有稀疏文件(除非您正在进行虚拟化,否则可能没有),那么如果您要使用 rsync,则应该使用 -S 选项。
如果它是您的启动驱动器,那么您还需要重新安装您的引导加载程序等,并可能配置您的分区。
答案2
总体而言,使用 find 和 cpio 的方法应该没问题(我倾向于使用 find、xargs 和 tar,但这更多是由于对这些工具的现有了解)。通常,tar 和 cpio 是用于备份的,因此它们应该存储所需的一切。然而,它们可能会遗漏一些元数据(ACL,如 SELinux 标签),星星显然对此有更好的支持。我预计 rsync 比 cp 更好,但在处理额外元数据方面比 star 差。