sync
を使用した場合と使用しない場合の進捗状況と書き込み予定時間進行状況を表示し、書き込みプロセス全体の推定時間であるETA(Estimated Time of Arrival)を推定するときに、バッファーをフラッシュすることを含むツール(または簡単な方法)は見つかりませんでした。
pv
は、オペレーティングシステムから見た進行状況の時間を表示できますが、ターゲットドライブが低速で、RAMが多い場合は、データがバッファーに書き込まれるまでの時間のみが表示されます。この時間は、バッファがフラッシュされるまでのリアルタイムのごく一部である可能性があります。
dd
は、データ使用時間と転送速度に関する最終レポートを作成します。 「進捗状況」レポートを作成することもできます。以前はpv
よりもはるかに優れた見積もりを提供していましたが、現在ではUSBドライブとメモリカードは非常に低速ですが、他のプロセスは高速で、バッファに使用できるメモリは大きくなっています。したがって、dd
も、バッファがフラッシュされるずっと前に終了します。
sync
コマンドを使用してtime
を含む書き込みプロセスの「時間を計る」ことができます
time ( write command; sync )
リアルタイムで使用できるので便利ですが、それが終わってからです。進行状況は表示されず、合計残り時間も推定されません。
iotop
を実行して、読み取りと書き込みのプロセス、および読み取りと書き込みの速度を表示できますが、残り時間は推定されません。
バッファをsync
でフラッシュすることを含め、書き込みプロセス全体、ETA(Estimated Time of Arrival)の進行状況と推定時間を表示するにはどうすればよいですか?
/proc/meminfo
で報告された「ダーティ」データの量を使用するためのアドバイスを@LinuxSecurityFreakに称賛します。
次のシェルスクリプトflusher
を作成しました。バッファをフラッシュするための進行状況と推定時間を示します。たとえば、ISOファイルからUSBドライブまたはメモリカードにクローンを作成した後、Linuxオペレーティングシステムでライブドライブを作成するために使用できます。
#!/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"
$ 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
$ 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