如果我们在磁盘上有一个文件并创建指向它的硬链接,那么我们就有对同一数据的两个引用。如果一个链接被删除,它不会影响另一个链接,因为它直接指向数据。
如果我有两个指向文件 ABC 的链接(A 和 B),并且我将链接 A 移动到另一个磁盘,那么我将拥有数据的两个副本。链接A将指向新磁盘上的数据,链接B将指向旧磁盘上的数据。
如果我想将链接 A 和 B 移动到新磁盘,如何才能做到这一点而不最终在新磁盘上拥有两个数据副本?
答案1
rsync
能够为您复制硬链接。检查-H
选项:
-H, --hard-links preserve hard links
答案2
您所描述的实际上是三(3)个指向磁盘上数据的指针:
- ABC
- A
- 乙
如果您mv A
使用新的文件系统,它实际上会在新文件系统上创建数据的副本。
如果您进入新的文件系统,它会创建在新文件系统上mv B
命名的数据的另一个副本。B
但是,ABC 仍然保留在原始文件系统上。
如果您想在新文件系统上复制原始文件和链接,您应该做什么(将 source/ 和 new-file-system/ 替换为正确的路径):
cp source/ABC new-file-system/ABC
ln new-file-system/ABC A
ln new-file-system/ABC B
rm source/ABC source/A source/B
这将在新文件系统上复制/创建数据,在新文件系统上创建硬链接 A 和 B,然后删除旧数据和硬链接。
在完成命令之前,请务必仔细检查所有语法,以免丢失数据。