'동기화'작업의 진행 상황을 볼 수 있습니까?


103

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

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


자세한 내용은 다음을 참조하십시오 : lwn.net/Articles/572911
lanoxx

답변:


162

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

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

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


4
내 시스템에서, Writeback은 Dirty가 비었을 때 거의 끝날 때까지 몇 메가에 머물러 있습니다.
mattdm

24

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

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


3
편리한 답변을 위해 다른 답변의 아이디어를 결합하십시오.watch -t -n1 'awk "{ print \$9 }" /sys/block/sdd/stat'
mattdm

4
내 USB 스틱의 경우 복사 작업이 진행되는 동안과 그 sync이후에 약 150 개가 호버링되는 경향이 있습니다 . 0으로 이동하지만 맨 끝에 만 있습니다. 따라서 다른 답변은 조급히 진행 상황을 보는 데 더 유용합니다.
mattdm

1
(그러나 이론 상으로는 시스템 전체 정보가 아닌 적절한 장치 만 보는 것이 좋습니다.)
mattdm

쓰거나 (동기화, 비우기) 바이트를 가져와 드라이브에 쓰도록 캐시하는 방법이 있습니까? 드라이브 당 쓰기 캐시 크기가 있으면이를 사용 du하여 드라이브에서 동기화되는 실제 데이터를 계산할 수 있습니다 .
unfa

10

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

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

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

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

1]  + 27260 done        sync

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


BTW : 이것은 오래된 질문이라는 것을 알고 있지만 누군가 그것을 찾을 때 Google에 나타나는 첫 번째 질문이며 찾은 솔루션을 추가하고 싶었습니다.
jflemieux

1
동기화 / 마운트가 너무 나쁘면 커널에서 업데이트를받지 못했으며 이러한 정보를 직접 인쇄 할 수 있습니다.
mcr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.