シェルスクリプト

シェルスクリプト

未使用および使用による進捗状況および予想作成時間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

編集する:

現在のバージョンには更新されたバージョンがありますflusherwatch-flushmkusbu。次のエイリアスでは、独自のウィンドウとは別に使用できます。

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'

おすすめ記事