답변:
2016 업데이트 : GNU coreutils> = 8.24 (Ubuntu Xenial 16.04 이상에서 기본값)를 사용하는 경우 진행률을 표시하는 다른 방법은 아래 방법 2를 참조하십시오.
pv
pv
입 / 출력 전용 dd
명령 사이에 설치 하고 배치하십시오 .
참고 : 이미 시작한 후에는 사용할 수 없습니다 dd
.
에서 패키지 설명 :
pv
-파이프 뷰어-파이프 라인을 통한 데이터 진행을 모니터링하기위한 터미널 기반 도구입니다. 두 프로세스 사이의 일반 파이프 라인에 삽입하여 데이터가 얼마나 빨리 전달되는지, 얼마나 오래 걸 렸는지, 완료까지 걸리는 시간 및 완료까지 소요되는 시간을 시각적으로 표시 할 수 있습니다.
설치
sudo apt-get install pv
예
dd if=/dev/urandom | pv | dd of=/dev/null
산출
1,74MB 0:00:09 [ 198kB/s] [ <=> ]
--size
시간 추정을 원한다면 대략적인 크기를 지정할 수 있습니다.
예 / dev / sdb에서 2GB 디스크를 복사한다고 가정
없는 명령 pv
은 다음과 같습니다.
sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096
명령 pv
:
sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096
산출:
440MB 0:00:38 [11.6MB/s] [======> ] 21% ETA 0:02:19
다른 용도
물론 pv
출력을 stdout으로 파이프하는 데 직접 사용할 수 있습니다 .
pv /home/user/bigfile.iso | md5sum
산출
50,2MB 0:00:06 [8,66MB/s] [=======> ] 49% ETA 0:00:06
이 경우 pv
크기를 자동으로 인식합니다.
status
옵션 추가dd
dd
GNU Coreutils 8.24 이상 (Ubuntu 16.04 이상) status
에는 진행률을 표시 하는 새로운 옵션이 있습니다.
dd if=/dev/urandom of=/dev/null status=progress
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
작동합니다. @SopalajodeArrierez, 매개 변수는 두 번째 dd에 제공 될 수 있습니다.
pv < /dev/sda > /dev/sdb
것 같습니다 더 나은 속도 (얻을 소스 )
dd if=/dev/urandom | pv | of=/dev/sdb
~ 18MB / s 쓰기, dd if=/dev/zero | pv | of=/dev/sdb
~ 80MB / s, 보통 old dd if=/dev/zero of=/dev/sdb
~ 550MB / s (SSD 최대 쓰기 속도에 근접). 모두와 함께 bs=4096000
.
kill
명령 을 사용하여 정지하지 않고 dd의 진행 상황을 모니터 할 수 있습니다 .
dd
일단 실행중인 진행 상황을 보려면 다른 터미널을 열고 다음을 입력하십시오.
sudo kill -USR1 $(pgrep ^dd)
프로세스를 중단하지 않고 터미널 창에 dd
진행률 이 표시 dd
됩니다. BSD 또는 OS X를 사용 INFO
하는 경우 대신을 사용하십시오 USR1
. USR1
신호 DD를 종료한다.
dd
진행 상황을 정기적으로 업데이트하려면 다음을 입력하십시오.
watch -n5 'sudo kill -USR1 $(pgrep ^dd)'
watch
dd
-n 초마다 프로세스 를 검사하고 ( -n5
= 5 초) 중단하지 않고보고합니다.
위의 명령에서 올바른 작은 따옴표를 참고하십시오.
kill -INFO $(pgrep ^dd$)
OSX와 같은 BSD 시스템 에서 사용해야 합니다.
sudo pkill -usr1 dd
기억하기 쉽고, 적어도 우분투 14.04에서는 완벽하게 작동하며 입력하기가 쉽지 않습니다.
pv
TeddHansen이 보여 주듯이 전송 속도가 느려질 것이므로 두려워 합니다. 또한 많은 사람들이 이미dd
작업을 시작 했기 때문에 이것을 검색 하고 있습니다.)
pv
타이핑이 적거나 진행률이 낮고 다른 답변보다 몇 가지 편리한 샘플 사용법 :
먼저 다음 pv
명령을 사용하여 를 설치해야합니다 .
sudo apt-get install pv
그런 다음 몇 가지 예는 다음과 같습니다.
pv -n /dev/urandom | dd of=/dev/null
pv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror
참고 : 첫 번째 샘플은 5 자 미만의 타이핑 dd if=/dev/urandom | pv | dd of=/dev/null
입니다.
그리고 디스크 드라이브를 복제하는 것을 좋아합니다 (X를 드라이브 문자로 바꿉니다).
(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0
출처 : http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/
또한 나 자신을 보관합니다.
dialog
명령으로apt-get install dialog
dialog
예를 좋아 하십시오 . 평온 지금 !
dialog
D :이 미친 듯이 쉘 스크립트 작성에 도움이 될 것입니다
brew install pv dialog
Mac 용. 또한이 신사는 스타일로 계산합니다. 브라보.
실행 중 Ctrl+ Shift+ T를 사용 dd
하면 진행률 (바이트)이 출력됩니다.
load: 1.51 cmd: dd 31215 uninterruptible 0.28u 3.67s
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
dd
.
^T
는 터미널 로만 출력 됩니다 (많은 터미널 앱은 Ctrl-Shift-T를 가로 채서 새 탭을 엽니 다 제외). OSX / BSD에 많은 수색자는이 답변을 주셔서 감사합니다 수 있지만, 그것은 우분투 아니다 분명해야한다 (또는 일반적으로 GNU / 리눅스?)
완전성을 위해 :
버전 8.24 의 GNU의로 coreutils는 진행 상황을 인쇄하는 매개 변수를 도입 DD에 대한 패치가 포함되어 있습니다.
이 변경 사항을 도입 한 커밋 에는 다음과 같은 주석이 있습니다.
dd : 통계를 주기적으로 인쇄하기위한 새로운 상태 = 진행 수준
Ubuntu 16.04.2 LTS를 포함한 많은 배포판 에서이 버전을 사용합니다.
apt install build-essential
및을 컴파일 한 방법을 추가하고 apt-get build-dep coreutils
coreutils-8.25.tar.xz를 다운로드 tar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
하고 실행하십시오 make
. 새로 컴파일 dd
된 src
디렉토리 는 dir입니다. 당신은 / 빈에 복사 한 SRC / DD로 실행 나타나서 기존 대체 할 수있다
가장 좋은 방법은 http://dcfldd.sourceforge.net/ 을 사용 하는 것입니다. apt-get을 통해 쉽게 설치할 수 있습니다.
dd
옵션 및 옵션 이 있습니다 . 나는 그것을 별칭합니다 :)status=on
statusinterval=N
sizeprobe=[if|of]
DD
기본 진행 상태가 dd에 추가되었습니다 !!!
새 버전의 Coreutils (8.24)는 dd
도구에 진행 상태를 추가합니다 .
Xubuntu 15.10에서의 사용법 :
터미널을 열고 다음 명령을 입력하십시오.
wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xz
tar -xf coreutils-8.24.tar.xz
cd coreutils-8.24
./configure && make -j $(nproc)
dd
루트로 실행하십시오 .
sudo su
cd src
./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress
바이트, 초 및 속도 (바이트 / 초)가 표시됩니다.
버전을 확인하려면 다음을 수행하십시오 dd
.
원주민:
dd --version
새로운:
cd coreutils-8.24/src
./dd --version
이미 dd를 시작했고 펜 드라이브를 디스크에 복사 할 때와 같은 파일을 작성하는 경우 watch 명령을 사용하여 출력 파일의 크기를 지속적으로 관찰하여 변경 사항을 확인하고 완료를 추정 할 수 있습니다.
watch ls -l /pathtofile/filename
파일 크기 만 보려면 (인간보기) :
watch ls -sh /pathtofile/filename
dd | pv | dd
트라이어드는 DD 사용 260초 반대로 내 50기가바이트의 VM 사본이 800 초가 소요했다. 이 파이프 라인을 사용하면 pv는 적어도 입력 파일의 크기를 알지 못하므로 얼마나 멀리 있는지 알 수 없으므로 다음과 같이 단점이 없으며 속도 이점이 뛰어납니다.
큰 것에 대해서는 pv를 피하고 (Bash를 사용하는 경우) :
Control-Z dd 프로세스
bg
배경에 넣습니다. 그 관찰 bg
과 같은 당신에게 줄 것이다 출력 [1] 6011
후자의 수는 프로세스 ID입니다를. 따라서 다음을 수행하십시오.
while true; do kill -USR1 process_id ; sleep 5; done
여기서 process_id는 관찰 한 프로세스 ID입니다. 다음과 같이 보일 때 Control-C를 누르십시오.
[1]+ Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse
-bash: kill: (60111) - No such process
끝났습니다.
편집 : 바보 시스템 관리자! 당신의 인생을 자동화, 작동하지 않습니다! 내가 모니터링하고 싶은 긴 dd 프로세스가 있다면, 여기에 전체 enchilada를 처리 할 하나의 라이너가 있습니다; 이 모든 것을 한 줄에 넣으십시오.
dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done
물론 스크립트를 작성하여 $ 1을 입력 파일로 만들고 $ 2를 출력 파일로 만들 수 있습니다. 이것은 독자를위한 연습으로 남습니다. 죽이기 전에 약간의 잠이 필요합니다. 그렇지 않으면 아직 준비가되지 않았을 때 신호를 dd로 보내려고하면 죽을 수도 있습니다. 원하는대로 수면을 조정하십시오 (두 번째 수면을 완전히 제거 할 수도 있음).
배쉬-FTW! :-)
while
루프를 압축하십시오 . 사용하십시오 watch
.
sudo watch pkill dd
. 그런 다음 dd
통계를 편안하게 출력하는 것을보십시오 .
watch pkill -USR1 -x dd
. watch
다른 유사한 작업 에도 사용 하기 때문에 자연스럽게 발생합니다.
http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
원래:
kill -USR1 < dd pid >
dd if=... of=... bs=4M status=progress oflag=dsync
oflag=dsync
글을 동기화 상태로 유지하므로 정보 status=progress
가 더 정확합니다. 그러나 조금 느려질 수 있습니다.
conv=fsync
것이 좋습니다
Ubuntu 16.04는 dd (coreutils) 버전 8.25 와 함께 제공됩니다 . 따라서 옵션 status=progress
은 지원됩니다 :-)
사용하려면 명령 status=progress
과 함께 추가 하십시오 dd
.
예 :
dd bs=4M if=/media/severus/tools-soft/OperatingSystems/ubuntu-16.04-desktop-amd64.iso of=/dev/null status=progress && sync
상태를 다음과 같이 제공합니다
1282846183 bytes (1.2 GiB, 1.1 GiB) copied, 14.03 s, 101.9 MB/s
나는 ddrescue를 정말로 좋아하지만, dd로 작동하지만 출력을 제공하고 오류가 발생하지 않습니다. 반면에 매우 고급 알고리즘을 가지고 있으며 성공적인 사본을 실제로 시도하기가 어렵습니다 ... 많은 GUI가 있습니다.
프로젝트 : https://www.gnu.org/software/ddrescue
진행률을 표시 dd
하는 pv
데 사용할 bash 래퍼를 만들었습니다 . 그것을 넣고 평소처럼 .bashrc
사용 하십시오 dd
.
# dd if=/dev/vvg0/root of=/dev/vvg1/root bs=4M
2GB 0:00:17 [ 120MB/s] [===========================================================>] 100%
0+16384 records in
0+16384 records out
2147483648 bytes (2.1 GB) copied, 18.3353 s, 117 MB/s
출처:
dd()
{
local dd=$(which dd); [ "$dd" ] || {
echo "'dd' is not installed!" >&2
return 1
}
local pv=$(which pv); [ "$pv" ] || {
echo "'pv' is not installed!" >&2
"$dd" "$@"
return $?
}
local arg arg2 infile
local -a args
for arg in "$@"
do
arg2=${arg#if=}
if [ "$arg2" != "$arg" ]
then
infile=$arg2
else
args[${#args[@]}]=$arg
fi
done
"$pv" -tpreb "$infile" | "$dd" "${args[@]}"
}
#!/bin/bash
. 하단 : tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
또는 dd
위치 를 하드 코딩하고 싶을 수도 있습니다. 그런 다음을 사용하십시오 local dd=/usr/bin/dd
. 실행 비트를 추가하는 것을 잊지 마십시오 : chmod +x /usr/local/dd
.
그래서 오늘 나는 달리는 kill
동안 루프에서 실행하려고하는 것에 약간 좌절했으며 dd
, 병렬로 쉽게 실행할 수있는이 방법을 생각해 냈습니다.
function vdd {
sudo dd "$@" &
sudo sh -c "while pkill -10 ^dd$; do sleep 5; done"
}
이제 vdd
일반적으로 사용 하는 모든 곳에서 사용하십시오 dd
(모든 인수를 직접 전달 함) 5 초마다 진행 보고서가 인쇄됩니다.
유일한 단점은 dd가 완료 될 때 명령이 즉시 반환되지 않는다는 것입니다. 따라서이 명령을 사용하면 dd가 통지하고 종료하기 전에 리턴 한 후 추가 5 초 동안 대기 할 수 있습니다.
CentOS 토지의 누군가 가이 스레드를 발견하는 경우를 대비하여 ...
'status = progress'옵션은 CentOS 7.5 및 7.6에서 작동합니다.
@davidDavidson의 위 답변은 Coreutils 8.24에 기능이 새로 추가되었음을 나타냅니다.
GNU coreutils 버전 8.24에는 진행률을 인쇄하기위한 매개 변수를 소개하는 dd 패치가 포함되어 있습니다.
이러한 경우가있을 수 있지만 CentOS는 동일한 버전 관리 체계를 따르지 않을 수 있습니다.
CentOS 7.6.1810과 함께 제공되는 Coreutils 버전은 다음과 같습니다.
coreutils-8.22-23.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
그리고 설치된 dd 버전은 다음과 같습니다.
[root@hostname /]# dd --version
dd (coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Paul Rubin, David MacKenzie, and Stuart Kemp.
버전 8.22가 표시됩니다 .
그러나 CentOS 7.5 및 CentOS 7.6 (Coreutils 버전 8.22 모두)에서 dd로 'status = progress'를 테스트했으며 제대로 작동합니다.
RedHat이 이전 버전의 Coreutils를 사용하기로 선택한 이유는 모르겠지만 기능은 8.22와 함께 존재합니다.
위에서 언급했듯이 적어도 GNU coreutils 또는 busybox의 'dd'를 사용하면 진행 정보를 stderr에 인쇄하여 USR1 신호에 응답합니다.
나는 dd를위한 작은 래퍼 스크립트를 작성하여 멋진 퍼센트 완료 표시기를 보여 주며 어떤 식 으로든 dd의 프로세스 또는 작동 방식을 방해하지 않습니다. github에서 찾을 수 있습니다 :
http://github.com/delt01/dd_printpercent
불행히도,이 SIGUSR1 트릭은 컴파일 타임에 특정 기능이 활성화 된 GNU dd (coreutils 패키지의) 또는 busybox의 'dd'모드에서만 작동합니다. FreeBSD 및 OS X를 포함하여 대부분의 BSD 시스템에 포함 된 재고 'dd'에서는 작동하지 않습니다 ... :(
을 사용하여 coreutils 프로그램의 진행 상황을 볼 수 있습니다 progress - Coreutils Progress Viewer
.
다음을 모니터링 할 수 있습니다.
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
맨 페이지를 볼 수 있습니다
명령이 실행되는 동안 별도의 터미널 창에서 사용하거나 dd 명령으로 실행할 수 있습니다.
dd if=/dev/sda of=file.img & progress -mp $!
여기서 &
첫 번째 명령을 분기하고 명령이 끝날 때까지 기다리지 않고 즉시 계속 진행합니다.
progress 명령은 다음과 같이 시작됩니다. -m
따라서 모니터링되는 프로세스가 끝날 때까지 대기 -p
하므로 지정된 pid를 모니터링 $!
하고 마지막 명령 pid입니다.
sudo와 함께 dd를 발행하면 다음과 같이 진행해야합니다.
sudo dd if=/dev/sda of=file.img &
sudo progress -m
# with no -p, this will wait for all coreutil commands to finish
# but $! will give the sudo command's pid