我有巨大的文件{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 没有关于存储源错误的信息,而只是哑管道。