텔넷에서 FTP 업로드 진행률을 측정하는 방법

텔넷에서 FTP 업로드 진행률을 측정하는 방법

telnet저는 FTP 서버에 연결하여 대용량 파일을 저장하는 스크립트를 작성하고 있습니다 .

프로젝트 환경으로 인해 ftp를 사용해야 하고 , scp.rsync

업로드 진행 상황을 어떻게 알 수 있나요?

pureftp와 사이에서 서버 측을 전환할 수 있습니다 proftpd.

전송 채널에 대한 쓰기 진행 상황을 분석하려고 하는데 파일이 서버에 도달하기 훨씬 전에 완료가 표시되므로 이는 잘못된 것 같습니다. 그래서 서버측 피드백을 받고 싶습니다. 실제로 얼마나 많은 데이터가 기록되었는지에 대한 피드백을 제공하는 마법의 STOR 명령을 찾고 싶습니다.

proftpd에서 STAT 명령을 찾았지만 지연되고 요청이 필요한 것 같습니다.

이러한 발전을 달성할 수 있는 쉬운 방법이 있습니까?

클라이언트 FTP에 대한 기존 HASH 피드백은 어떻게 작동합니까?

답변1

관찰 중인 동작은 클라이언트가 FTP 데이터 연결의 소켓에 데이터를 썼고 클라이언트 커널이 작업이 성공적으로 발생했다고 응답했지만(성공적인 반환 write()또는 send()시스템 호출을 통해) 데이터가 여전히 모든 유형의 버퍼이며 아직 대상 파일에 커밋되지 않았습니다. 원본 운영 체제의 네트워크 버퍼에 있고, 이더넷 카드의 버퍼에 있고, 유선에 있고, 대상의 버퍼에 있고, FTP 서버 프로세스의 버퍼에 있고, 서버의 파일에 기록되었지만 아직 플러시되지 않았습니다. 디스크 등등...

이는 FTP에서만 발생하는 것이 아닙니다. 최신 파일 전송 도구를 사용하면 이런 일이 발생하는 것을 쉽게 확인할 수도 있습니다 scp. scp전 세계의 절반에 걸쳐 있는 파일(대기 시간이 긴 네트워크의 경우) 또는 저장 속도가 느린 시스템의 경우 전송 진행률이 실제보다 빠르게 표시되고 100% 완료 시 멈춘 것처럼 보입니다. 명령이 실제로 완료되기까지 시간이 좀 걸립니다.

netkit-ftp(데비안의 기본/표준 FTP 클라이언트)의 소스 코드를 보면 # 태그 처리와 관련하여 특별한 작업을 수행하지 않는다는 것을 알 수 있습니다. 데이터 연결 소켓에 기록된 데이터 양을 기반으로 해시 마크를 씁니다. 그러므로 그것은~ 할 것이다관찰한 것과 동일한 행동을 보여주세요.

STOR일반 FTP 클라이언트가 수행하는 작업과 수행해야 하는 작업은 제어 연결에서 명령에 대한 응답을 기다리는 것입니다 . 데이터 연결 소켓을 플러시하고 닫은 후 얼마 후에 응답이 나타납니다. 응답을 받으면 FTP 서버에 데이터가 있다는 것을 알 수 있습니다. 디스크에 완전히 커밋되지 않았을 수도 있지만 이것이 확인을 받게 됩니다.

답변2

클라이언트/서버에 진행 상황이 표시되지 않는 경우 파일 읽기 진행 상황에 따라 클라이언트 측에서 업로드 진행 상황을 확인할 수 있습니다.

  1. 파일 크기를 업로드했습니다.
  2. 파일을 업로드한 프로세스의 PID를 알고 있습니다(예: 1234).
  3. /proc/1234/fd를 보면 fd가 읽고 있는 파일에 속해 있습니다(예: 5).
  4. 그런 다음 - /proc/1234/fdinfo/5를 보면 됩니다. 여기서 이와 같은 내용을 볼 수 있습니다.
우편번호: 12313
로고: 0100002

즉, 파일의 위치는 12313입니다. 따라서 위치(12313)를 파일 크기로 나누면 전체 진행 상황을 알 수 있습니다.

관련 정보