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

Hap*_*ace 3 hard-link cp coreutils reflink

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

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

command gcp -r --link --archive --verbose "${opts[@]}" "$@"
# delete the sources manually
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 6

--link导致cp创建硬链接而不是复制。一旦 \xe2\x80\x9ccopy\xe2\x80\x9d 完成,假设 \xe2\x80\x99s 在同一文件系统中(这是硬链接所必需的),则磁盘上存在该文件的单个实例,有两个或多个目录条目指向它。这是所需的外部状态,多个目录条目指向同一文件的事实是可见的 \xe2\x80\x94 它们指向同一 inode。通过其中一个目录条目所做的更改也可以通过另一个目录条目看到。

\n

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

\n

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

\n

作为mv替代方案,--link比 \xe2\x80\x94 更合适,--reflink=always它将减少操作系统的工作量。

\n