TelnetでFTPアップロードの進行状況を測定する方法

TelnetでFTPアップロードの進行状況を測定する方法

telnet私はFTPサーバーに接続して大容量ファイルを保存するスクリプトを書いています。

プロジェクト環境のためにftpを使用する必要がありますscprsync

アップロードの進行状況をどのように確認できますか?

pureftpとの間でサーバー側を切り替えることができますproftpd

トランスポートチャネルへの書き込みの進行状況を分析しようとしていますが、ファイルがサーバーに到達するずっと前に完了が表示されるため、これは間違っているようです。だからサーバー側のフィードバックを受けたいです。実際にどのくらいのデータが記録されたかについてのフィードバックを提供する魔法のSTORコマンドを探したいと思います。

proftpdでSTATコマンドを見つけましたが、遅延して要求が必要なようです。

これらの進歩を達成する簡単な方法はありますか?

クライアントFTPへの既存のHASHフィードバックはどのように機能しますか?

答え1

観察中の動作は、クライアントがFTPデータ接続のソケットにデータを書き、クライアントカーネルが操作が正常に行われたと応答しましたが(成功したリターンまたはwrite()システムsend()コールを介して)、データはまだすべての種類のバッファであり、まだターゲットファイルにコミットされていません。 。ソースオペレーティングシステムのネットワークバッファにあり、イーサネットカードのバッファにあり、有線にあり、ターゲットのバッファにあり、FTPサーバープロセスのバッファにあり、サーバーのファイルに書き込まれましたが、まだフラッシュされていません。ディスクなど...

これはFTPでのみ発生するものではありません。最新のファイル転送ツールを使用すると、これが起こっていることを簡単に確認できますscpscp世界中の半分にわたるファイル(待ち時間が長いネットワークの場合)、またはストレージが遅いシステムの場合、転送の進行状況は実際よりも速く表示され、100%の完了時に停止したようです。コマンドが実際に完了するまでに少し時間がかかります。

netkit-ftp(Debianのデフォルト/標準FTPクライアント)のソースコードを見ると、#タグの処理に関して特別なことはしないことがわかります。データ接続ソケットに書き込まれたデータ量に基づいてハッシュマークを書き込みます。したがって、〜する観察したのと同じ動作を見せてください。

STOR一般的なFTPクライアントが実行する作業と実行する必要があるのは、制御接続がコマンドへの応答を待つことです。データ接続ソケットをフラッシュして閉じた後、しばらくすると応答が表示されます。応答を受信すると、FTPサーバーにデータがあることがわかります。ディスクに完全にコミットされていない可能性がありますが、これが確認されます。

答え2

クライアント/サーバーに進行状況が表示されない場合は、ファイルの読み取りの進行状況に応じて、クライアント側でアップロードの進行状況を確認できます。

  1. ファイルサイズをアップロードしました。
  2. ファイルをアップロードしたプロセスのPIDを知っています(例:1234)。
  3. /proc/1234/fdを見ると、fdが読み込んでいるファイルに属しています(例:5)。
  4. その後、- /proc/1234/fdinfo/5を見てください。ここでこのような内容を見ることができます。
郵便番号:12313
ロゴ:0100002

つまり、ファイルの場所は12313です。したがって、場所(12313)をファイルサイズに分割すると、全体の進行状況がわかります。

関連情報