‘동기화’작업의 진행 상황을 볼 수 있습니까? 돌아가지만, 입력 할 때

큰 파일을 Linux 시스템에 마운트 된 USB 디스크에 비동기식으로 복사했습니다. 이것은 비교적 빠르게 명령 프롬프트로 돌아가지만, 입력 할 때 sync물론 디스크로 이동해야하며 시간이 오래 걸립니다.

속도가 느리다는 것을 알고 있지만 카운터가 0으로 내려가는 것을 볼 수있는 곳이 있습니까? 시청 buffers에서하는 것은 top도움이되지 않습니다.



답변

살펴보면 모든 데이터가 스풀 아웃됨에 따라 시간이 지남에 따라 숫자가 줄어들고 /proc/meminfo있음을 알 Dirty수 있습니다. 그것의 일부도 유출 될 수 Writeback있습니다. 그것은 모든 장치에 대한 요약이지만 시스템의 한 장치가 나머지 장치보다 훨씬 느린 경우 일반적으로 해당 대기열의 모든 것이 관련되어 있습니다. 당신은 아마 찾을 Dirty시작하고 때 많은 수의 sync같은 시간에 대한 완료 그것이 0 대화 형 디스플레이를 얻을이 시도 접근 :

watch -d grep -e Dirty: -e Writeback: /proc/meminfo

일반 디스크를 사용하면 일반적으로 무시할 수 Writeback있지만 USB 전송 경로에 더 자주 포함되는지는 확실하지 않습니다. 명확한 추세없이 위아래로 튀는 경우 Dirty숫자를 볼 수 있습니다.


답변

/sys/block/<device>/stat동기화하는 동안 적절한 장치 에 대한 파일을 볼 수 있습니다 . 9 번째 열에는 장치의 비행 중 요청 수가 표시되며 동기화가 완료되면 0으로 내려갑니다.
이를 바이트 수로 변환하는 방법을 모르지만 여전히 “대기”가 얼마나 보류 중인지 대략적인 아이디어를 제공해야합니다.

자세한 내용은 커널 설명서에서 stat.txt 파일을 참조하십시오. ( inflight내 시스템의 해당 디렉토리에는 읽기 및 쓰기 기내 요청을 포함 할 수 있는 파일이 있지만 그에 대한 문서를 찾을 수 없습니다.)


답변

Greg의 답변을 사용하면 sync메모리에 Dirty 블록의 상태를 표시하면서 백그라운드에서 간단히 실행할 수 있습니다 .

이를 위해서는 간단히 다음 명령을 실행하십시오.

sync & watch -n 1 grep -e Dirty: /proc/meminfo

앞에서 sync실행하는 동안 백그라운드에서 호출 됩니다 watch. 때 sync명령 (더티 블록의 크기가 0에 도달했을 때 주위) 완료됩니다, 당신은 다음과 같습니다 출력을해야합니다 :

1]  + 27260 done        sync

이 명령이 완료하고 죽일 수 있다는 것을 의미 watch와 명령 Ctrl+를 C.