GNU cp:“--link”和“--reflink=always”有什么区别?

GNU cp:“--link”和“--reflink=always”有什么区别?

--link和 和有什么区别--reflink=always

我使用以下命令作为mv替代,我想知道使用是否--reflink是更好的选择。

command gcp -r --link --archive --verbose "${opts[@]}" "$@"
# delete the sources manually

答案1

--link导致cp创建硬链接而不是复制。一旦“复制”完成,假设它位于同一文件系统中(这是硬链接所必需的),则该文件的单个实例将出现在磁盘上,并且有两个或多个目录条目指向它。这是期望的外部状态,IE多个目录条目指向同一个文件的事实是可见的——它们指向同一个 inode。通过其中一个目录条目所做的更改也可以通过另一个目录条目看到。

--reflink=always如果可能的话,请求优化副本。这可以采取多种形式;最著名的是写时复制,但它也可以作为网络文件系统上的服务器端复制来实现。一旦复制完成,可能会出现这样的情况:磁盘上存在数据块的单个副本,但存在两个文件,并且每个目录项都指向不同的文件。通过一个目录条目所做的更改将不会通过另一个目录条目可见;每个文件都有单独的生命周期(除了共享数据块的副作用,例如磁盘损坏将影响这两个文件)。

换句话说,--link显式请求创建指向同一文件的新目录条目,共享后续更改。--reflink=always请求创建新文件,并进行潜在的优化,并隔离后续更改。

作为mv替代方案,--link--reflink=always- 它将减少操作系统的工作量。

相关内容