哪些文件系统支持通过Linux拼接(2)拼接?

splice系统调用的手册页说,如果出现以下情况, splice可能会失败并将errnoEINVAL

目标文件系统不支持拼接; 这两个描述符都不是指pipe道; 或给予不可search设备的偏移量

哪些文件系统支持拼接?

我原来的回答部分是不正确的,这是一个重大的改写。

Linux 2.6.30.10及以下版本

在Linux 2.6.30.10和更旧版本中,当源或目标文件系统不支持拼接时, splice返回EINVAL 。 以下是支持拼接文件系统

  • 在读模式 :adfs,affs,afs,bfs,btrfs,coda,ecryptfs,exofs,ext2,ext3,ext4,fat,fuse,hpfs,jffs2,jfs,minix,nfs,nilfs2,ntfs,ocfs2,omfs,qnx4, reiserfs,smbfs,sysv,ubifs,udf,ufs。
  • 在写模式下 :exofs,ext2,ext3,ext4,jfs,ocfs2,reiserfs,ubifs。

详情如下。 支持在“文件到管道”情况下的do_splice_from()函数和“管道到文件”情况下的do_splice_to()函数中确定的拼接。 这是通过检查相关的struct file_operations是否分别包含.splice_read.splice_write完成的。 为了生成上面列出的文件系统,我已经为.splice_read.splice_write grepped fs/*/file.c .splice_write

Linux 2.6.31及以上版本

从Linux 2.6.31开始, 所有的文件系统都支持在读写模式下进行拼接

详情如下。 当文件系统的struct file_operations中没有.splice_read.splice_write时,将使用一个回退函数:分别为default_file_splice_readdefault_file_splice_write 有关实现,请参阅do_splice_to()do_splice_from() 注意:由于文档中列出的其他原因, EINVAL仍可能被退回。

根据这一点 ,EXT3呢。 看起来你可能没有使用任何FUSE文件系统。