미사용 및 사용에 따른 진행상황 및 예상 작성시간sync
진행률을 표시하고 전체 쓰기 프로세스의 예상 시간 ETA(예상 도착 시간)를 추정하는 동안 버퍼를 플러시하는 도구(또는 쉬운 방법)를 찾지 못했습니다.
pv
운영 체제에서 보는 대로 진행 시간을 표시하는 것이 가능하지만 대상 드라이브가 느리고 RAM이 많은 경우 데이터가 버퍼에 기록될 때까지의 시간만 표시합니다. 이 시간은 버퍼가 플러시되기 전 실제 시간의 일부일 수 있습니다.dd
사용된 데이터 양, 시간 및 전송 속도에 대한 최종 보고서를 준비합니다. 또한 "진행" 보고서를 작성하는 데에도 사용할 수 있습니다. 예전에는 그보다 더 나은 추정치를 제공했지만pv
이제는 USB 드라이브와 메모리 카드가 여전히 매우 느린 반면 다른 프로세스는 빠르고 사용 가능한 버퍼 메모리가 엄청납니다. 따라서dd
버퍼가 플러시되기 전에도 완료됩니다.명령
sync
사용 을 포함하여 쓰기 과정의 "시간"을 측정할 수 있습니다.time
time ( write command; sync )
실제로 사용된 시간을 알려주므로 유용하지만 사용이 완료된 후에만 가능합니다. 진행 상황이 표시되지 않으며 남은 총 시간도 추정되지 않습니다.
읽기 및 쓰기 진행 상황과 읽기 및 쓰기 속도를 표시하기 위해 실행할 수 있지만
iotop
남은 시간은 추정되지 않습니다.
진행 상황 및 예상 시간을 표시하는 방법모두글쓰기 과정?
플러시 버퍼 사용을 포함하여 전체 쓰기 프로세스의 진행률과 예상 시간, ETA(예상 도착 시간)를 어떻게 표시합니까 sync
?
관련 질문 링크
답변1
쉘 스크립트
사용 중에 보고된 "더러운" 데이터의 양에 대한 제안을 주신 @LinuxSecurityFreak에게 감사드립니다 /proc/meminfo
.
나는 다음과 같은 쉘스크립트를 만들었다 flusher
. 버퍼 플러시의 진행 상황과 예상 시간을 보여줍니다. 예를 들어 Linux 운영 체제에서 라이브 드라이브를 생성하기 위해 iso 파일에서 USB 드라이브 또는 메모리 카드로 복제한 후 사용할 수 있습니다.
#!/bin/bash
timeorig=$(date '+%s')
deltat=5 # checking time interval
dirtorig=$(grep -e 'Dirty:' /proc/meminfo | tr -s ' ' '\t' | cut -f2)
dirt0=$dirtorig
echo -n "dirty = $dirt0 kB - before sync"
sync & spid=$!
while ps -A|grep "$spid" > /dev/null
do
sleep "$deltat"
dirty=$(grep -e 'Dirty:' /proc/meminfo | tr -s ' ' '\t' | cut -f2)
deltad=$((dirt0-dirty))
if [ $deltad -gt 0 ]
then
eta="$((dirty*deltat/deltad)) s"
rate="$(((deltad+500)/deltat/1000)) MB/s"
else
eta="n.a."
rate="n.a."
fi
echo -en "\0033[2K\0033[1G"
echo -n "dirty = $dirty kB -- syncing -- rate = $rate -- eta = $eta"
dirt0="$dirty"
done
echo -e "\0033[2K\0033[1GDone syncing :-)"
timefinal=$(date '+%s')
timeused=$((timefinal-timeorig))
if [ $timeused -gt 0 ]
then
rate="$(((10*dirtorig+5)/timeused/10))"
if [ $rate -ge 10000 ]
then
rate="$(((dirtorig+500)/timeused/1000)) MB/s"
else
rate="$rate kB/S"
fi
else
rate="n.a."
fi
echo "syncing time = $timeused s -- rate = $rate"
데모 예시
느린 드라이브에 복제(USB 2)
$ sudo dd if=xubuntu-18.04.1-desktop-amd64.iso of=/dev/sde bs=1M ; ./flusher
[sudo] password for sudodus:
1367+1 posts in
1367+1 posts ut
1434386432 bytes (1.4 GB, 1.3 GiB) copied, 0.408724 s, 3.5 GB/s
출력 flusher
:
dirty = 840600 kB -- syncing -- rate = 5 MB/s -- eta = 156 s
...
Done syncing :-)
syncing time = 302 s -- rate = 4639 kB/S
빠른 드라이브로 복제(eSATA)
$ sudo dd if=xubuntu-18.04.1-desktop-amd64.iso of=/dev/sda bs=1M ; ./flusher
1367+1 posts in
1367+1 posts ut
1434386432 bytes (1.4 GB, 1.3 GiB) copied, 0.404442 s, 3.5 GB/s
출력 flusher
:
dirty = 727508 kB -- syncing -- rate = 59 MB/s -- eta = 12 s
...
Done syncing :-)
syncing time = 25 s -- rate = 56 MB/s
편집하다:
현재 버전에는 업데이트된 버전이 있습니다 flusher
.watch-flush
mkusbu. 다음 별칭을 통해 자체 창과 별도로 사용할 수 있습니다.
alias wf='xterm -title "watch-flush" -fa default -fs 13 -fg yellow -bg "#504030" -geometry 70x7 -e bash -c "watch-flush;read -n1" 2> /dev/null'