gcsfuse 上的 sftp 服务器 - 大文件上传成功,但小文件上传 (

gcsfuse 上的 sftp 服务器 - 大文件上传成功,但小文件上传 (

我正在尝试通过 GCS 设置 sftp 服务器。

容器中 gcsfuse 安装的示例是

gcsfuse -o nonempty --only-dir user1 $BUCKET /home/user1/ftp

当我使用 sftp 上传两个文件时:

sftp> put 1024K.txt
Uploading 1024K.txt to /ftp/1024K.txt
1024K.txt                                             100% 1025KB 426.0KB/s   00:02    
sftp> put 8K.txt
Uploading 8K.txt to /ftp/8K.txt
8K.txt                                                100% 8200   117.6KB/s   00:00    
Couldn't close file: Failure

但两个文件都传输正常:

sftp> ls -l
-rw-r--r--    1 1003     1003      1049600 Mar 15 13:33 1024K.txt
-rw-r--r--    1 1003     1003         8200 Mar 15 13:33 8K.txt
  • 我正在标准的 debian-stretch 实例上运行。
  • 该实例具有存储R/W权限。
  • 我尝试了一些 gcsfuse 选项,但没有成功:--type-cache-ttl 0 --stat-cache-ttl 0 --implicit-dirs
  • 我尝试在客户端和服务器上进行 ssh 调试日志记录 - 没有新信息。

由于大文件上传成功,我认为这与权限或 sftp 设置无关。什么原因导致小文件上传失败?

(已编辑删除对 K8 和 GKE 的引用,因为无需此操作即可重现此行为)

答案1

这似乎是由于每次传输后写入没有刷新到磁盘造成的。请参见以下示例:

sftp> put 8K.txt
Uploading 8K.txt to /home/jasper_humphrey/user1/8K.txt
8K.txt                                        100% 8200   111.5KB/s   00:00    
Couldn't close file: Failure
sftp> ls
8K.txt  
sftp> put 8K.txt
Uploading 8K.txt to /home/jasper_humphrey/user1/8K.txt
8K.txt                                        100% 8200   125.9KB/s   00:00    
sftp> ls
8K.txt  
sftp> put 8K.txt
Uploading 8K.txt to /home/jasper_humphrey/user1/8K.txt
remote open("/home/jasper_humphrey/user1/8K.txt"): Failure

如果我在 sftp 客户端上使用 -f 参数,则每次传输后都会触发 fsync,并且不会发生错误。摘自 sftp 手册页:

 -f      Requests that files be flushed to disk immediately after transfer.  When
         uploading files, this feature is only enabled if the server implements the
         "[email protected]" extension.

相关内容