Google-Cloud-Platform
sftp-server over gcsfuse - 大型上傳成功,但小型上傳(<0.5MB)會出錯
我正在嘗試通過 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 實例上執行。
- 實例具有儲存讀寫權限。
- 我嘗試了一些 gcsfuse 選項但沒有成功: –type-cache-ttl 0 –stat-cache-ttl 0 –implicit-dirs
- 我嘗試在客戶端和伺服器上進行 ssh 調試日誌記錄 - 沒有新資訊。
由於大文件上傳成功,我認為它與權限或 sftp 設置無關。什麼可能導緻小文件上傳失敗?
(編輯刪除了對 K8 和 GKE 的引用,因為該行為是可重現的)
這似乎是由於每次傳輸後沒有將寫入刷新到磁碟造成的。看這個例子:
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 "fsync@openssh.com" extension.