结合 mkfifo 和 cp --reflink 追加文件而不复制数据

结合 mkfifo 和 cp --reflink 追加文件而不复制数据

我有巨大的文件{0..9}.bin,我想将其连接成out.bin.之后我就不需要原始文件了。所以我想知道,是否可以通过仅修改文件系统索引而不复制文件内容来实现(请参阅将大文件相互附加而不复制它们以获得高效的复印解决方案)。

在现代文件系统(例如 btrfs)上cp --reflink=always存在。 Fifo 位于文件系统级别(至少btrfs send还跟踪 fifo),因此它们应该具有有关所使用的实际数据块的信息。因此,cp --reflink=always应该能够确定磁盘上的扩展编号并重新使用它们。

所以我想知道是否可以mkfifo与 结合使用cp --reflink=always

更新 目前,它不起作用:

for i in {1..9}; do dd if=/dev/urandom of="in$i.bin" bs=5M count=200; done;
mkfifo fifo
cat in* >fifo &
cp --reflink=always fifo out.bin

结果是 cp: failed to clone 'out.bin' from 'fifo': Invalid argument

也许永远不会,因为 FIFO 没有关于存储源错误的信息,而只是哑管道。

相关内容