![结合 mkfifo 和 cp --reflink 追加文件而不复制数据](https://linux22.com/image/173650/%E7%BB%93%E5%90%88%20mkfifo%20%E5%92%8C%20cp%20--reflink%20%E8%BF%BD%E5%8A%A0%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E5%A4%8D%E5%88%B6%E6%95%B0%E6%8D%AE.png)
我有巨大的文件{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 没有关于存储源错误的信息,而只是哑管道。