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
.
我在本地安装了一个 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
.