curlftpfs有最大安装空间大小,我该如何跳过它?

时间:2017-09-18 13:51:20

标签: ftp filesystems libcurl fuse curlftpfs

我在我的本地操作系统中安装了一个ftpserver:

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

然后我尝试使用带有8GB文件的dd填充磁盘空间,但是在给定大小时也失败了:

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用户在远程服务器上拥有无限的流量和磁盘空间。 所以我的问题是:为什么有7.5GB的限制,我怎么能跳过它?

1 个答案:

答案 0 :(得分:0)

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

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

这意味着7.5 GB文件传输失败不是由报告的可用空间引起的,因为两者之间存在一个数量级的差异。

详细

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

buf->f_blocks = 999999999 * 2;

文件系统的大小阻止为:

buf->f_bsize = ftpfs.blksize;

其他地方定义为:

ftpfs.blksize = 4096;

所以把这些放在一起给了我999999999 * 2 * 4096 / 2^30 GB ~= 7629.3945236206055 GB,它与pydf输出中的数字匹配:7629G