Aktualizacja 2016 : Jeśli używasz GNU coreutils> = 8.24 (domyślnie w Ubuntu Xenial 16.04 w górę), zobacz metodę 2 poniżej, aby uzyskać alternatywny sposób wyświetlania postępu.
Metoda 1: Za pomocą pv
Zainstaluj pv
i umieść go między dd
poleceniami tylko wejścia / wyjścia .
Uwaga : nie możesz go użyć, gdy już zacząłeś dd
.
Z opisu pakietu :
pv
- Pipe Viewer - to terminalowe narzędzie do monitorowania postępu danych przez potok. Można go wstawić do dowolnego normalnego potoku między dwoma procesami, aby wizualnie wskazywać, jak szybko dane przechodzą, jak długo to trwało, jak blisko jest ich ukończenia oraz oszacować, ile czasu to potrwa do zakończenia.
Instalacja
sudo apt-get install pv
Przykład
dd if=/dev/urandom | pv | dd of=/dev/null
Wynik
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
Możesz określić przybliżony rozmiar, --size
jeśli chcesz oszacować czas.
Przykład Założenie, że dysk 2 GB jest kopiowany z / dev / sdb
Polecenie bez pv
byłoby:
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
Polecenie za pomocą pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
Wynik:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
Inne zastosowania
Możesz oczywiście użyć pv
bezpośrednio do potokowania wyjścia na standardowe wyjście:
pv /home/user/bigfile.iso | md5sum
Wynik
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
Pamiętaj, że w takim przypadku pv
automatycznie rozpoznaje rozmiar.
Metoda 2: status
Dodano nową opcję dd
(GNU Coreutils 8.24+)
dd
w GNU Coreutils 8.24+ (Ubuntu 16.04 i nowsze) dostał nową status
opcję wyświetlania postępu:
Przykład
dd if=/dev/urandom of=/dev/null status=progress
Wynik
462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw
.pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000
działa, zweryfikowany. @SopalajodeArrierez, parametry można podać w drugim dd.pv < /dev/sda > /dev/sdb
wydaje się mieć lepszą prędkość ( źródło )dd if=/dev/urandom | pv | of=/dev/sdb
daje ~ 18dd if=/dev/zero | pv | of=/dev/sdb
MB / s zapisu, daje ~ 80 MB / s, a zwykły starydd if=/dev/zero of=/dev/sdb
daje ~ 550 MB / s (blisko maksymalnej prędkości zapisu SSD). Wszystko zbs=4096000
.Od HowTo: Monitoruj postęp dd
Możesz monitorować postęp dd bez zatrzymywania go za pomocą
kill
polecenia.Aby zobaczyć postęp
dd
działania, otwórz inny terminal i wprowadź:Spowoduje to wyświetlenie
dd
postępu wdd
oknie terminala bez zatrzymywania procesu. Jeśli korzystasz z BSD lub OS X, użyjINFO
zamiastUSR1
.USR1
Sygnał zakończenia dd.Jeśli chcesz regularnie otrzymywać informacje o
dd
postępach, wpisz:watch
będzie sondowaćdd
proces co -n sekund (-n5
= 5 sekund) i raportować bez zatrzymywania go.Zwróć uwagę na właściwe pojedyncze cudzysłowy w powyższych poleceniach.
źródło
kill -INFO $(pgrep ^dd$)
w systemach BSD (takich jak OSX).sudo pkill -usr1 dd
jest łatwiejszy do zapamiętania, działa idealnie dobrze (przynajmniej na Ubuntu 14.04) i jest mniej wymagający do pisania.pv
że spowolni transfer, jak pokazał TeddHansen. Założę się też, że wielu ludzi googluje, bo już rozpoczęlidd
operację;)Kilka przydatnych przykładowych zastosowań z
pv
mniejszym pisaniem lub większym postępem niż inne odpowiedzi:Najpierw musisz zainstalować
pv
za pomocą polecenia:Oto kilka przykładów:
Uwaga: pierwsza próbka ma wtedy 5 znaków mniej pisania
dd if=/dev/urandom | pv | dd of=/dev/null
.I mój ulubiony do klonowania dysku (zastąp X literami dysku):
źródło: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
Również do archiwizacji siebie.
źródło
dialog
z poleceniemapt-get install dialog
dialog
przykład. SERENITY TERAZ !dialog
że to niesamowicie pomoże w pisaniu skryptów powłoki: Dbrew install pv dialog
dla Maca. Również ten dżentelmen oblicza się ze stylem. Brawo.Użyj Ctrl+ Shift+ Tpodczas
dd
działania, a wyświetli on postęp (w bajtach):źródło
dd
.^T
na terminalu (z wyjątkiem wielu aplikacji terminalowych przechwytujących Ctrl-Shift-T i otwierających nową kartę). Wielu użytkowników OSX / BSD może docenić tę odpowiedź, ale należy wyjaśnić, że nie dotyczy ona Ubuntu (lub ogólnie GNU / LInux?)Dla kompletności:
Wersja 8.24 z coreutils GNU zawiera łatki dd wprowadzającą parametru drukowania postęp.
Zatwierdzenie wprowadzające tę zmianę ma komentarz:
Wiele wersji, w tym Ubuntu 16.04.2 LTS, korzysta z tej wersji.
źródło
apt install build-essential
aapt-get build-dep coreutils
następnie pobierz coreutils-8.25.tar.xztar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
i uruchommake
. Nowo skompilowanedd
będą wsrc
reż. Możesz skopiować go do / bin i zastąpić istniejący lub uruchomić jus jako src / ddNajlepiej jest użyć http://dcfldd.sourceforge.net/ , jest łatwy do zainstalowania przez apt-get
źródło
dd
i opcjęstatus=on
domyślnie dla komunikatów postępu,statusinterval=N
(N w blokach) dla częstotliwości aktualizacji wiadomości isizeprobe=[if|of]
dla wskaźnika procentowego. Będę to pseudonimDD
:)Natywny status postępu został dodany do dd !!!
Nowa wersja Coreutils (8.24) dodaje do
dd
narzędzia status postępu :Zastosowanie na Xubuntu 15.10:
Otwórz terminal i wpisz następujące polecenia:
Uruchom
dd
jako root:Zobaczysz: Bajty, sekundy i prędkość (Bajty / sekundę).
Aby sprawdzić wersje
dd
:Ojczysty:
Nowy:
źródło
Jeśli już uruchomiłeś dd i piszesz plik, na przykład podczas tworzenia kopii pendrive'a na dysk, możesz użyć polecenia watch, aby stale obserwować rozmiar pliku wyjściowego, aby zobaczyć zmiany i oszacować zakończenie.
Aby zobaczyć tylko rozmiar pliku (widok człowieka):
źródło
dd | pv | dd
Triada mój 50GB VM kopia wziąć 800 sekund, w przeciwieństwie do 260 sekund przy użyciu tylko dd. Przy pomocy tego potoku pv nie ma pojęcia, jak duży jest plik wejściowy, więc nie będzie w stanie powiedzieć, jak daleko jesteś, więc nie ma wady robienia tego w następujący sposób - i zyskujesz przewagę prędkości:Unikałbym pv na czymkolwiek dużym i (jeśli używasz Bash):
Control-Z proces dd
bg
umieścić to w tle. Zauważ, żebg
to da ci wynik jak[1] 6011
tam, gdzie ta ostatnia liczba jest identyfikatorem procesu. Więc wykonaj:while true; do kill -USR1 process_id ; sleep 5; done
gdzie identyfikator_procesu to identyfikator procesu, który zaobserwowałeś. Naciśnij Control-C, gdy zobaczysz coś takiego:
Gotowe.
Edytuj: Silly Systems Administrator! Automatyzuj swoje życie, nie pracuj! Jeśli mam długi proces dd, który chcę monitorować, oto jedna linijka, która zaopiekuje się tobą całą enchiladą; umieść to wszystko w jednym wierszu:
Możesz oczywiście napisać skrypt, być może ustawić 1 $ na plik wejściowy, a 2 $ na plik wyjściowy. Pozostaje to jako ćwiczenie dla czytelnika. Pamiętaj, że potrzebujesz trochę snu przed zabiciem, w przeciwnym razie zabicie może umrzeć, próbując wysłać sygnał do dd, gdy nie będzie jeszcze gotowy. Dostosuj swoje sny według potrzeb (może nawet całkowicie usuń drugi sen).
Bash - FTW! :-)
źródło
while
pętlę. Użyjwatch
.sudo watch pkill dd
. Następniedd
wygodnie oglądaj statystyki.watch pkill -USR1 -x dd
. Ponieważ używam równieżwatch
do innych podobnych zadań, to jest naturalne.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
Gruntownie:
źródło
Najłatwiej jest:
oflag=dsync
utrzyma synchronizację pisania, dzięki czemu informacje będąstatus=progress
bardziej dokładne. Jednak może być nieco wolniejszy.źródło
conv=fsync
jest lepszeW systemie Ubuntu 16.04
Ubuntu 16.04 jest dostarczany z wersją dd (coreutils) w wersji 8.25 . Dlatego opcja
status=progress
jest obsługiwana :-)Aby go użyć, po prostu dodaj
status=progress
wraz zdd
poleceniem.Przykład:
Nadaje status jako
źródło
Użyj opcji,
status=progress
aby uzyskać postęp podczas przenoszenia.Ponadto
conv=fsync
będą wyświetlać błędy We / Wy.Przykład:
źródło
Naprawdę lubię ddrescue, działa jak dd, ale daje dane wyjściowe i nie zawodzi przy błędach, wręcz przeciwnie, ma bardzo zaawansowany algorytm i bardzo ciężko próbuje wykonać udaną kopię ... Jest też wiele GUI
Projekt: https://www.gnu.org/software/ddrescue
Wikipedia: https://en.wikipedia.org/wiki/Ddrescue
źródło
Stworzyłem opakowanie bash,
dd
które będzie używaćpv
do pokazywania postępu. Włóż do swojego.bashrc
i używajdd
jak zwykle:Źródło:
źródło
#!/bin/bash
. Na dole:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
Lub możesz ustalić na stałedd
lokalizację. Następnie użyjlocal dd=/usr/bin/dd
. Nie zapomnij dodać trochę wykonywalny:chmod +x /usr/local/dd
.Więc dzisiaj byłem trochę sfrustrowany próbą uruchomienia
kill
w pętli podczasdd
pracy i wymyśliłem tę metodę równoległego, łatwego uruchamiania:Teraz po prostu używaj
vdd
gdziekolwiek normalnie używaszdd
(przekazuje wszystkie argumenty bezpośrednio przez), a raport postępu będzie drukowany co 5 sekund.Jedynym minusem jest to, że polecenie nie wraca natychmiast po zakończeniu dd; więc możliwe jest, że to polecenie sprawi, że będziesz czekać dodatkowe 5 sekund po powrocie dd, zanim zauważy i zakończy działanie.
źródło
To zmusza dd do dostarczania statystyk co 2 sekundy, co jest domyślne dla zegarka:
Aby zmienić z co 2 sekundy na co 5 sekund, dodaj opcję -n 5 w następujący sposób:
źródło
Na wypadek, gdyby ktoś z ziemi CentOS znalazł ten wątek ...
Opcja „status = postęp” działa z CentOS 7.5 i 7.6
Powyższa odpowiedź autorstwa @davidDavidson sugeruje, że funkcja została nowo dodana w Coreutils 8.24.
Może tak być, ale CentOS może nie stosować tego samego schematu kontroli wersji.
Wersja Coreutils dostarczana z CentOS 7.6.1810 to:
Zainstalowana wersja dd to:
To pokazuje wersje 8.22 .
Jednak przetestowałem „status = postęp” z dd zarówno w CentOS 7.5, jak i CentOS 7.6 (oba w wersji 8.22 Coreutils) i działa poprawnie.
Nie wiem, dlaczego RedHat decyduje się na użycie tak starej wersji Coreutils, ale funkcjonalność istnieje w wersji 8.22.
źródło
Jak wspomniano powyżej, przynajmniej z „dd” z GNU coreutils lub busybox, zareaguje na sygnał USR1, drukując informacje o postępie na stderr.
Napisałem mały skrypt otoki dla dd, który pokazuje ładny procent ukończenia i próbuje nie zakłócać procesu lub sposobu działania dd w jakikolwiek sposób. Możesz go znaleźć na github:
http://github.com/delt01/dd_printpercent
Niestety, ta sztuczka SIGUSR1 działa tylko z GNU dd (z pakietu coreutils) lub w trybie „dd” busyboksa z tą konkretną funkcją włączoną w czasie kompilacji. Nie działa z zapasem „dd” zawartym w większości systemów BSD, w tym FreeBSD i OS X ... :(
źródło
Możesz obserwować postęp dowolnego programu Coreutils
progress - Coreutils Progress Viewer
.Może monitorować:
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat split gpg
Możesz zobaczyć stronę podręcznika
Możesz użyć go w osobnym oknie terminala, gdy polecenie jest uruchomione, lub uruchom je za pomocą polecenia dd:
Tutaj
&
rozwidla pierwsze polecenie i kontynuuje natychmiast, zamiast czekać na zakończenie polecenia.Polecenie postępu jest uruchamiane z:
-m
więc czeka na zakończenie monitorowanego procesu,-p
więc monitoruje dany pid i$!
jest ostatnim pid polecenia.Jeśli wydajesz dd z sudo, musisz też postępować z postępem:
źródło