标签: reflink

在 Linux 中,哪些文件系统支持引用链接?

btrfs支持引用链接,XFS支持引用链接(我认为是 2017 年以来?)

是否有其他文件系统支持它?

truncate -s 1G test.file;
cp --reflink=always test.file ref.test.file;
Run Code Online (Sandbox Code Playgroud)

linux filesystems reflink

9
推荐指数
1
解决办法
696
查看次数

rmlint 对 btrfs 的“克隆”有什么作用?

我正在阅读rmlint手册,其中一个重复的处理程序是 clone 和 reflink:

·克隆:仅限btrfs。尝试使用 BTRFS_IOC_FILE_EXTENT_SAME ioctl(3p) 克隆这两个文件。这将物理删除重复的范围。至少需要内核 4.2。

· reflink:尝试将重复文件重新链接到原始文件。另请参阅 man 1 cp 中的 --reflink。如果文件系统不支持,则失败。

这个克隆到底做了什么,它与引用链接有什么不同?BTRFS_IOC_FILE_EXTENT_SAME ioctl 有什么作用?

btrfs deduplication ioctl rmlint reflink

6
推荐指数
1
解决办法
841
查看次数

检测 btrfs 重新链接的文件

很明显,cp --reflink foo bar我可以在 btrfs 上复制文件而不会浪费空间。但是我如何检测这两个文件(此处为 foo 和 bar)使用相同的“空间单位”?

如果它们是硬链接,我将用于[ foo -ef bar ]比较或stat -c%i foo获取唯一的 id(在本例中为索引节点)。

btrfs reflinked 文件是否有类似的命令?

我想将其应用到 300G 卷上,由于重复数据删除,该卷的大小实际上为 6T,所以我想避免校验和......

btrfs reflink

6
推荐指数
1
解决办法
1358
查看次数

有没有办法在现有的 XFS 文件系统上启用 reflink?

我目前在小型个人 Linux 服务器上设置了 4TB RAID 1,该服务器在 LVM 中格式化为 XFS。我对启用reflinkXFS的功能很感兴趣,但是当我第一次创建文件系统时我没有这样做(我使用了默认值)。

有没有一种方法可以打开该reflink功能,而无需备份和重新创建文件系统?如果没有,我是否可以期望在未来实现该功能?

filesystems xfs deduplication reflink

6
推荐指数
1
解决办法
1682
查看次数

如何查明文件系统是否支持引用链接副本?

我尝试递归地创建目录的快照副本,但如果文件系统(自定义 shfs)不支持reflink副本,它会为每个文件返回错误:

# cp -a --reflink=always /mnt/user/libvirt /mnt/user/libvirt_copy
cp: failed to clone '/mnt/user/libvirt_copy/libvirt/libvirt.img' from '/mnt/user/libvirt/libvirt.img': Operation not supported
cp: failed to clone '/mnt/user/libvirt_copy/libvirt/test.txt' from '/mnt/user/libvirt/test.txt': Operation not supported
...
Run Code Online (Sandbox Code Playgroud)

由于似乎不可能cp在第一个错误(?)时停止,这意味着对可能数千个文件的无用循环,因此我喜欢预先检查文件系统是否支持引用链接。

一种想法是搜索单个文件并进行测试复制:

if ! find /mnt/user/libvirt -type f -print -quit | xargs -I {} sh -c 'dst_path=$(dirname $(echo {} | sed "s#^/mnt/user/libvirt#/mnt/user/libvirt_copy#")); mkdir -vp $dst_path && cp -a --reflink=always {} "$dst_path"'; then
    echo "Error: Filesystem does not support reflink"
    exit
fi
Run Code Online (Sandbox Code Playgroud)

但这留下了目录和一个空文件,之后需要清理:

# find /mnt/user/libvirt_copy/
/mnt/user/libvirt_copy/
/mnt/user/libvirt_copy/libvirt.img …
Run Code Online (Sandbox Code Playgroud)

bash cp shell-script file-copy reflink

5
推荐指数
1
解决办法
647
查看次数

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

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

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

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

hard-link cp coreutils reflink

3
推荐指数
1
解决办法
961
查看次数