curlftpfs 的最大大小是否为 mounted space,我该如何跳过它?

Has curlftpfs a maximum size of mounted space and how can I skip it?

我在本地安装了一个 ftpserver OS:

curlftpfs user:pass@ftp.server.com /var/test/

我注意到使用 pydf 这个卷的最大大小约为 7.5GB:

Filesystem                                                            Size Used Avail Use%             Mounted on
curlftpfs#ftp://user:pass@ftp.server.com                             7629G    0 7629G  0.0 [.........] /var/test

然后我尝试使用 dd 填充磁盘 space 和一个 8GB 的​​文件,但是在给定的大小下也失败了:

dd if=/dev/zero of=upload_test bs=8000000000 count=1
dd: memory exhausted by input buffer of size 8000000000 bytes (7.5 GiB)

FTP 用户在远程服务器上有无限流量和磁盘 space。 所以我的问题是:为什么有 7.5GB 的限制,我该如何跳过它?

查看 curlftpfs 0.9.2 的源代码,这是最后发布的版本,这个 7629G 似乎是硬编码的默认值。

换句话说,curlftpfs 不检查远程文件系统的实际大小,而是使用一些预定义的静态值。而且实际检查无法执行,因为ftp protocol doesn't provide information about free space.

这意味着您在 7.5 GB 上的文件传输失败不是由报告的免费 space 引起的,因为两者之间存在数量级差异。

详情

函数ftpfs_statfs实现statfs FUSE操作定义空闲块的数量如下:

buf->f_blocks = 999999999 * 2;

文件系统块的大小为:

buf->f_bsize = ftpfs.blksize;

在别处定义为:

ftpfs.blksize = 4096;

所以将这些放在一起得到 999999999 * 2 * 4096 / 2^30 GB ~= 7629.3945236206055 GB,它与您 pydf 输出中的数字相匹配:7629G.