2

我在本地操作系统中安装了一个 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

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

4

1 回答 1

1

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

换句话说, curlftpfs 不会检查远程文件系统的实际大小,而是使用一些预定义的静态值。此外,由于ftp 协议不提供有关可用空间的信息,因此无法执行实际检查。

这意味着您在 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

于 2017-09-29T22:32:50.143 回答