Nie dd
tyle zużyłem, ale na razie jeszcze mnie to nie zawiodło. W tej chwili mam dd
ponad 12 godzin - piszę obraz z powrotem na dysk, z którego pochodzi - i trochę się martwię, ponieważ mogłem dd
z dysku na obraz około 7 godzin.
Używam OSX 10.6.6 na MacBooku z Core 2 Duo z prędkością 2,1 GHz / rdzeń z 4 GB pamięci RAM. Czytam z pliku .dmg na dysku twardym o prędkości 7200 obr / min (dysku rozruchowym) i piszę na dysku o prędkości 7200 obr / min podłączonego przez złącze SATA-USB. Domyślnie zostawiłem rozmiar bloku, a obraz ma około 160 GB.
EDYCJA: A po 14 godzinach czystego stresu wszystko dd
działało idealnie. Jednak następnym razem zamierzam go uruchomić pv
i śledzić strace
. Dziękujemy wszystkim za wszelką pomoc.
osx
hard-disk
dd
file-transfer
eckza
źródło
źródło
dd ... bs=16M
to moja sugestia, biorąc pod uwagę pamięć RAM, rozmiar dysku i szybkość.dd
wynika , że w systemie Mac OS X ma tendencję do zawieszania się do tego stopnia, że nie mogę nawet zabić procesu, ale muszę zrestartować system. Następnie wykonuję pracę na maszynie wirtualnej z systemem Linux.Odpowiedzi:
Możesz wysłać
dd
określony sygnał za pomocąkill
polecenia, aby wyprowadził bieżący status. Sygnał jestINFO
w systemach BSD (w tym OSX) iUSR1
Linux. W Twoim przypadku:Identyfikator procesu można znaleźć (
$PID
powyżej) za pomocąps
polecenia; lub zobacz alternatywne opcje pgrep i pkill na Mac OS X, aby uzyskać bardziej dogodne metody.Mówiąc prościej, jak AntoineG wskazuje w swojej odpowiedzi , możesz pisać
ctrl-T
w powłoce z uruchomionym dd, aby wysłać muINFO
sygnał.Jako przykład w systemie Linux możesz
dd
ustawić status wszystkich aktywnych procesów w następujący sposób:Po wyprowadzeniu jego statusu
dd
będzie kontynuował kopiowanie.źródło
pkill -USR1 -x dd
INFO
sygnał. Linux nie ma SIGINFO iUSR1
zamiast tego używa .dd if=/dev/zero of=/dev/null
. :)W systemie OS X (nie próbowałem w systemie Linux) możesz po prostu wpisać Ctrl+ Tw uruchomionym terminalu
dd
. Wyświetli to samo wyjściekill -INFO $PID
, plus użycie procesora:Dowiedziałem się o tym czytając ten wątek i próbując otworzyć nową kartę w moim terminalu, ale mieszając ⌘+ Tz Ctrl+ T.
źródło
load
użycie procesora?^T
się echem od terminala.Dla
dd
możesz wysłać sygnał . W przypadku innych poleceń, które odczytują lub zapisują do pliku, możesz obserwować ich pozycję w pliku za pomocąlsof
.Jeśli planujesz z wyprzedzeniem, przeprowadź dane przez potok
pv
.źródło
pv
wygląda jak bilet.Bardziej ogólnym sposobem jest użycie,
iotop
które wyświetla bieżącą ilość odczytu / zapisu na dysku na program.EDYCJA:
iotop -o
pokazuje tylko programy, które wykonują obecnie operacje We / Wy (dziękuję Jasonowi C za ten komentarz).źródło
iotop -o
ukryje procesy, które nie działają we / wy i ułatwią szybkie sprawdzenie, co się dzieje.Zwykle dołączam się
strace
do takiego uruchomionego procesu (z-p $PID
opcją), aby sprawdzić, czy pozostaje on zablokowany w wywołaniu systemowym, czy też jest nadal aktywny.Lub jeśli denerwujesz się wysyłaniem sygnału do uruchomionego dd, uruchom kolejne dd, aby sprawdzić, czy to działa.
źródło
strace
? Również zacząłem innydd
i wysłałem mu jeden z sugerowanych sygnałów i ... to go zabiło.Następnym razem możesz po prostu użyć
pv
od samego początku (jeśli jest dostępny za pośrednictwem menedżera pakietów, zainstaluj go). Jest to narzędzie, którego jedynym celem jest przesyłanie danych wejściowych do wyjścia oraz monitorowanie postępu i prędkości.Następnie, aby zapisać obraz na dysku, powiedzmy o rozmiarze bloku 4 MB:
Oprócz początkowego buforowania (przesuniętego przez ostateczną synchronizację, którą można wykonać,
dd
jeśli chcesz), pokaże Ci pasek postępu, średnią prędkość, aktualną prędkość i ETA.Te
iflag=fullblock
siły opcja dd chwycić pełne bloki wejścia przezpv
, w przeciwnym razie jesteś na łasce rury na rozmiar bloku.Aby przejść w drugą stronę, użyj dd do odczytu i pv do zapisu, chociaż musisz jawnie określić rozmiar, jeśli źródłem jest urządzenie blokowe. W przypadku urządzenia 4 GB:
Możesz również automatycznie określić rozmiar, na przykład:
Naprawdę nie ma znaczenia, w jakiej kolejności
dd
ipv
w jakiej kolejności się zajmujesz , jest to całkowicie związane z wydajnością - jeśli urządzenie, z którego czytasz lub z którego odczytujesz, ma optymalną wydajność dla niektórych bloków, których chcesz użyćdd
zamiastpv
uzyskiwać dostęp do tego urządzenia. Możesz nawet przykleićdd
oba końce, jeśli chcesz, lub wcale, jeśli nie zależy ci:źródło
Począwszy od wersji
coreutils
8.24,dd
ma natywne wsparcie dla pokazywania postępu. Po prostu dodaj opcjęstatus=progress
.Przykład:
Źródło
źródło
ddrescue
poda statystyki podczas działania.demo: http://www.youtube.com/watch?v=vqq9A01geeA#t=144s
źródło
Czasami możesz nie być w stanie użyć sygnału INFO lub USR1, ponieważ strumień stderr
dd
procesu nie jest dostępny (np. Ponieważ terminal, w którym został wykonany, był już zamknięty). W takim przypadku obejściem jest wykonanie następujących czynności (testowane na FreeBSD, mogą się nieco różnić w Linuksie):Służy
iostat
do szacowania średniej prędkości zapisu (MB / s) na urządzeniu docelowym, np .:iostat -d -w30 ada0
ada0
Podaj tutaj nazwę urządzenia docelowego i poczekaj minutę, aż da kilka wyników. Parametr „w” określa liczbę sekund między próbkami. Zwiększenie go da lepsze średnie oszacowanie przy mniejszej wariancji, ale będziesz musiał czekać dłużej.Służy
ps
do określaniadd
czasu działania:ps -xo etime,command | grep dd
Przelicz to na sekundy, aby uzyskać całkowitą liczbę sekund czasu wykonywania.
Uzyskaj rozmiar urządzenia w MB dzięki:
grep ada0 /var/run/dmesg.boot
Zastąp nazwę urządzenia docelowego
ada0
. Podziel wynik przez średnią szybkość zapisu, aby uzyskać całkowity czas przesyłania w sekundach. Odejmij czas, który upłynął do tej pory, aby uzyskać pozostały czas.Ta strategia działa tylko wtedy, gdy
dd
pisze nieprzerwanie z bieżącą średnią szybkością zapisu od początku. Jeśli inne procesy konkurują o zasoby procesora lub we / wy (w tym magistralę we / wy), może to zmniejszyć szybkość przesyłania.źródło
Zacząłem używać dcfldd (1), który lepiej pokazuje operacje dd.
źródło
Podczas
dd
wykonywania uruchamiam to w innym terminalu jako root:Drukuje
dd
status co 1 sekundę w oryginalnym oknie terminala, w którymdd
jest wykonywany, i kończy działanie po wykonaniu polecenia.źródło
Możesz użyć,
progress
który w szczególności pokazuje postęp biegudd
. Wykorzystuje/proc/$pid/fd
i/proc/$pid/fdinfo
które można również monitorować ręcznie.źródło
wchar
Linia (znaki napisane) w/proc/$pid/io
można uzyskać dokładne informacje na tematdd
procesu. Tak długo, jak się zmienia, Twójdd
nadal działa!Oto schludny mały skrypt php, który można zapisać, a następnie wykonać
php filename.php
za pomocą,dd
aby wyświetlić zapisane bajty. Miła korzyść z oglądania/proc/$pid/io
nakill -USR1 $(pidof dd)
to, że nie trzeba przełączać się pomiędzy terminalami, co nie zawsze jest możliwe.źródło