我在我的本地操作系统中安装了一个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的限制,我怎么能跳过它?
答案 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
。