telnet
私はFTPサーバーに接続して大容量ファイルを保存するスクリプトを書いています。
プロジェクト環境のためにftpを使用する必要がありますscp
。rsync
アップロードの進行状況をどのように確認できますか?
pureftp
との間でサーバー側を切り替えることができますproftpd
。
トランスポートチャネルへの書き込みの進行状況を分析しようとしていますが、ファイルがサーバーに到達するずっと前に完了が表示されるため、これは間違っているようです。だからサーバー側のフィードバックを受けたいです。実際にどのくらいのデータが記録されたかについてのフィードバックを提供する魔法のSTORコマンドを探したいと思います。
proftpdでSTATコマンドを見つけましたが、遅延して要求が必要なようです。
これらの進歩を達成する簡単な方法はありますか?
クライアントFTPへの既存のHASHフィードバックはどのように機能しますか?
答え1
観察中の動作は、クライアントがFTPデータ接続のソケットにデータを書き、クライアントカーネルが操作が正常に行われたと応答しましたが(成功したリターンまたはwrite()
システムsend()
コールを介して)、データはまだすべての種類のバッファであり、まだターゲットファイルにコミットされていません。 。ソースオペレーティングシステムのネットワークバッファにあり、イーサネットカードのバッファにあり、有線にあり、ターゲットのバッファにあり、FTPサーバープロセスのバッファにあり、サーバーのファイルに書き込まれましたが、まだフラッシュされていません。ディスクなど...
これはFTPでのみ発生するものではありません。最新のファイル転送ツールを使用すると、これが起こっていることを簡単に確認できますscp
。scp
世界中の半分にわたるファイル(待ち時間が長いネットワークの場合)、またはストレージが遅いシステムの場合、転送の進行状況は実際よりも速く表示され、100%の完了時に停止したようです。コマンドが実際に完了するまでに少し時間がかかります。
netkit-ftp(Debianのデフォルト/標準FTPクライアント)のソースコードを見ると、#タグの処理に関して特別なことはしないことがわかります。データ接続ソケットに書き込まれたデータ量に基づいてハッシュマークを書き込みます。したがって、〜する観察したのと同じ動作を見せてください。
STOR
一般的なFTPクライアントが実行する作業と実行する必要があるのは、制御接続がコマンドへの応答を待つことです。データ接続ソケットをフラッシュして閉じた後、しばらくすると応答が表示されます。応答を受信すると、FTPサーバーにデータがあることがわかります。ディスクに完全にコミットされていない可能性がありますが、これが確認されます。
答え2
クライアント/サーバーに進行状況が表示されない場合は、ファイルの読み取りの進行状況に応じて、クライアント側でアップロードの進行状況を確認できます。
- ファイルサイズをアップロードしました。
- ファイルをアップロードしたプロセスのPIDを知っています(例:1234)。
- /proc/1234/fdを見ると、fdが読み込んでいるファイルに属しています(例:5)。
- その後、- /proc/1234/fdinfo/5を見てください。ここでこのような内容を見ることができます。
郵便番号:12313 ロゴ:0100002
つまり、ファイルの場所は12313です。したがって、場所(12313)をファイルサイズに分割すると、全体の進行状況がわかります。