나는 dd
그다지 많이 사용 하지는 않았지만 지금까지는 여전히 실패하지 않았습니다. 지금은 dd
12 시간 넘게갔습니다. 디스크에서 이미지를 다시 쓰고 dd
있습니다. 디스크에서 이미지 로 갈 수 있었기 때문에 조금 걱정이되었습니다. 7 시간
4GB RAM의 2.1ghz / core에서 Core 2 Duo가 장착 된 MacBook에서 OSX 10.6.6을 실행하고 있습니다. 7200rpm 하드 드라이브 (부팅 드라이브)의 .dmg를 읽고 SATA-to-USB 커넥터를 통해 연결된 7200rpm 드라이브에 쓰고 있습니다. 기본적으로 블록 크기를 그대로두고 이미지는 약 160gb입니다.
편집 : 그리고 14 시간의 순수한 스트레스 dd
후에 결국 완벽하게 작동했습니다. 다음 번에는을 통해 pv
추적하고 추적 할 것입니다 strace
. 모든 도움을 주셔서 감사합니다.
답변
명령을 dd
사용하여 특정 신호를 보내 kill
현재 상태를 출력 할 수 있습니다. 신호는 INFO
BSD 시스템 (OSX 포함) 및 USR1
Linux에 있습니다. 귀하의 경우 :
kill -INFO $PID
명령으로 프로세스 ID ( $PID
위)를 찾을 수 있습니다 ps
. 보다 편리한 방법 은 mac OS x에서 pgrep 및 pkill 대안을 참조하십시오 .
더 간단히 말하면 AntoineG 가 그의 답변 에서 지적한 것처럼 ctrl-T
dd를 실행하는 쉘에 입력 하여 INFO
신호 를 보낼 수 있습니다.
Linux의 예로 모든 활성 dd
프로세스 출력 상태를 다음과 같이 만들 수 있습니다 .
pkill -USR1 -x dd
상태를 출력 한 후에 dd
는 계속 대처합니다.
답변
OS X (Linux에서는 시도하지 않았 음) 에서 터미널을 실행하는 터미널에 Ctrl+ T를 입력 하면됩니다 dd
. kill -INFO $PID
CPU 사용량과 동일한 출력을 인쇄합니다 .
load: 1.40 cmd: dd 34536 uninterruptible 3.49u 64.58s
5020305+0 records in
5020304+0 records out
2570395648 bytes transferred in 4284.349974 secs (599950 bytes/sec)
이 스레드를 읽고 터미널에서 새 탭을 열려고하지만 ⌘+ T와 Ctrl+를 혼합하려고한다는 것을 알았습니다 T.
답변
에 대해 신호를 보낼dd
수 있습니다 . 파일을 읽거나 쓰는 다른 명령의 경우을 사용하여 파일에서 해당 위치를 볼 수 있습니다 .lsof
lsof -o -p1234 # where 1234 is the process ID of the command
lsof -o /path/to/file
미리 계획하는 경우 데이터를 통해 파이프하십시오 pv
.
답변
보다 일반적인 방법은 iotop
프로그램 당 현재 디스크 읽기 / 쓰기 양을 표시하는 것입니다.
편집 : iotop -o
현재 I / O 작업을 수행하는 프로그램 만 표시하십시오 ( 이 의견 에 Jason C 감사합니다 ).
답변
나는 일반적으로 시스템 호출에서 차단 된 상태로 남아 있는지 또는 여전히 활성 상태인지 확인하기 위해 strace
실행중인 프로세스 ( -p $PID
옵션 포함)에 연결합니다.
또는 실행중인 dd에 신호를 보내는 것이 긴장된 경우 다른 dd를 시작하여 작동하는지 확인하십시오.
답변
다음에 pv
는 처음부터 사용할 수 있습니다 (패키지 관리자를 통해 사용 가능한 경우 설치). 이것은 출력 및 출력 진행 및 속도 모니터링을 위해 배관 입력만을 목적으로하는 유틸리티입니다.
그런 다음 이미지를 드라이브에 쓰려면 4MB 블록 크기로 말합니다.
pv -ptearb /path/to/image.bin | dd iflag=fullblock of=/dev/whatever bs=4M
초기 버퍼링 (최종 동기화에 의한 오프셋, dd
원하는 경우 수행 가능) 외에도 진행률 표시 줄, 평균 속도, 현재 속도 및 ETA가 표시됩니다.
이 iflag=fullblock
옵션을 사용하면 dd를 통해 전체 입력 블록을 가져옵니다 pv
. 그렇지 않으면 블록 크기에 대한 파이프의 책임이 있습니다.
다른 방법으로 가려면 소스가 블록 장치 인 경우 크기를 명시 적으로 지정해야하지만 dd를 사용하여 읽고 pv를 사용하여 씁니다. 4GB 장치의 경우 :
dd if=/dev/whatever bs=4M | pv -ptearb -s 4096m > /path/to/image.bin
다음과 같이 크기를 자동으로 결정할 수도 있습니다.
dd if=/dev/whatever bs=4M | pv -ptearb -s `blockdev --getsize64 /dev/whatever` > /path/to/image.bin
정말 당신이 어떤 순서는 중요하지 않습니다 dd
그리고 pv
당신이 나에서 읽고있는 장치가 사용하려는 특정 blocksizes 최적의 성능이있는 경우 -에, 그것은 전적으로 성능 관련의 dd
대신 pv
해당 장치에 액세스 할 수 있습니다. 당신도 붙어 있습니다 dd
당신은 상관하지 않는 경우 모두에서 전혀 당신이 원하는 경우 종료 여부 :
pv -ptearb /path/to/image.bin > /dev/whatever
sync
답변
현재 coreutils
v8.24, dd
진행률을 표시에 대한 기본 지원합니다. 옵션을 추가하십시오 status=progress
.
예:
dd if=arch.iso of=/dev/sdb bs=4M status=progress