hdd에서 hdd로 전체 DD 사본


34

원래 질문 :

나는이있는 경우 2 개 동일한 하드 드라이브 는 다음과 같은 특성을 가진를 :

  • SATA 6.0Gb / s
  • 5400 분당 회전 수
  • 3TB

전체 dd 사본을 완료하는 데 얼마나 걸립니까?

지금까지 5 시간 동안 실행되었으며 여전히 진행 중입니다 ...

Linux Ubuntu 12.04 64 비트를 사용하고 있으며 사용중인 명령은 다음과 같습니다.

dd if=/dev/sdb of=/dev/sdc

업데이트 : 1

이제 진행 상황을 볼 수 있으며 430GB를 복사하는 데 6 시간 이상이 걸렸습니다. HDD는 3TB입니다 ...

더 빠른 방법이 없습니까?


업데이트 : 2

이것은 이전보다 훨씬 나아 보입니다 (Groxxda에게 제안 해 주셔서 감사합니다).

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETA는 3TB의 경우 약 9 시간이지만 6 시간 후에 430GB에 도달하기 전에 이전 명령을 사용하면 약 36 시간이 걸렸을 것으로 예상됩니다.


프로세스 통계를 확인하십시오. 실행중인 'dd'프로세스에 USR1 신호를 보내면 I / O 통계가 표준 오류로 인쇄 된 다음 복사가 다시 시작됩니다. $ dd if = / dev / zero of = / dev / null & pid = $! $ kill -USR1 $ pid dd 구현마다 다른 실제 신호에 대해서는 매뉴얼 페이지를 확인하십시오.
groxxda

@Groxxda, 나는 그것을하는 방법을 모른다.
oshirowanen

1
GNU dd는을 사용 SIGUSR1하고 BSD dd는SIGINFO
groxxda

또한 "같은 sata 케이블에 연결되었다"는 것은 무엇을 의미합니까? 일종의 포트 멀티 플라이어를 사용하고 있습니까? (전송 속도가 150MB / s에 도달하면 5-6 시간이 걸리지 만 그 중 절반이 더 현실적이라고 생각합니다.)
groxxda

1
다른 (더 큰) 블록 크기 ( bs=인수를 dd) 로 지정하여 프로세스 속도를 높일 수 있습니다 . 또한 각 HDD를 자체 sata 포트에 연결하는 것을 고려하십시오.
groxxda

답변:


58

dd사람들이 테이프를 사용했을 때 (블록 크기가 중요 할 때) cat이진 안전하지 않을 수도있는 간단한 도구에 유용했습니다 .

요즘 dd if=/dev/sdb of=/dev/sdc은 복잡하고 오류가 발생하기 쉽고 느린 쓰기 방법입니다 cat /dev/sdb >/dev/sdc. dd상대적으로 드문 작업에 여전히 유용 하지만 믿기 ​​좋게 언급 한 자습서 수보다 훨씬 덜 유용합니다. 에 마법이없고 dd, 마법이 모두 있습니다 /dev/sdb.

새로운 명령 sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K은 불필요하게 느리고 복잡합니다. 한 번에 128kB로 데이터를 읽습니다 ( dd기본값 512B 보다 낫지 만 더 큰 값은 아님). 그런 다음 쓰여지기 전에 두 개의 파이프를 통과합니다.

더 간단하고 빠른 cat명령을 사용하십시오 . (일부에서는 벤치 마크 나는 리눅스에서 전에 몇 년을 만들어 cat보다 더 빨리이었다 cp다른 디스크 사이에 복사하고, cp보다 빠른했다 dd어떤 블록 크기, dd같은 디스크에 복사 할 때 큰 블록 크기가 약간 더 빨랐다으로.)

cat /dev/sdb >/dev/sdc

에서이 명령을 실행 sudo하려면 리디렉션을 루트로 수행해야합니다.

sudo sh -c 'cat /dev/sdb >/dev/sdc'

진행률 보고서를 원한다면 Linux를 사용하고 있기 때문에 cat프로세스 의 PID (예 : 1234)를 기록하고 입력 (또는 출력) 파일 디스크립터의 위치를 ​​보면 쉽게 얻을 수 있습니다 .

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

당신이 진행 보고서를 원하는 당신의 유닉스 변종 파일 기술자 위치에서 얻을 수있는 쉬운 방법을 제공하지 않는 경우, 설치하고 사용할 수 있습니다 pv대신 cat.


큰 블록에서 이상한 점은 병목 현상이 디스크라는 cat것입니다 dd. cat캐시 를 사용하는 것일 수 있습니까?
Emmanuel

1
@Gilles, 답변 주셔서 감사합니다. 복제 할 또 다른 3TB 드라이브 5 개가 있으며 다음에 cat 옵션을 시도해 보겠습니다. 내가 알 수있는 한, 새로운 dd 명령은 완료하는 데 약 3 시간이 걸리며 총 11 시간이 걸립니다. 고양이 접근 방식이 두 번째 3TB HDD의 11 시간보다 빠르면 나머지 드라이브에이 방법을 사용합니다.
oshirowanen

2
@Gilles, 진행 보고서를 얻으려면 sudo sh -c 'pv /dev/sdb >/dev/sdc'대신 대신 사용 sudo sh -c 'cat /dev/sdb >/dev/sdc'합니까?
oshirowanen

1
@oshirowanen 예, 사용하는 pv곳에서 사용하십시오 cat.
Gilles 'SO- 악마 그만해'

1
@unhammer 아니요! 각 장치를 하나씩 복사합니다 (예 :) cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1. 두 부분을 연결하는 것은 의미가 없습니다. btrfs 볼륨의 구조를 변경하거나 두 개의 서브 볼륨이있는 것을 변경하려면 btrfs 도구를 사용하여 구조를 변경하거나 원하는 구조로 새 파일 시스템을 작성하고 파일을 복사 한 것처럼 btrfs 도구를 사용해야합니다 .
Gilles 'SO- 악마 그만'

7

dd기본적으로 매우 작은 블록 크기 (512 바이트)를 사용합니다. 결과적으로 많은 오버 헤드가 발생합니다 ( 512 바이트마다 하나씩 read()write()syscall).

더 큰 블록 크기를 사용하면 훨씬 빠릅니다. 최적의 속도는 약 시작 bs=64k합니다. 대부분의 사람들은 여전히 ​​더 큰 bs=1M것을 사용 하므로 사람이 읽을 수있게됩니다 ( dd복사 할 때 수학을하지 않아도 1234 blocks된다는 것을 알고 있습니다 1234 MiB). 더 큰 블록 크기를 사용하면 속도가 향상되지 않고 메모리 소비가 증가합니다.

따라서 명령은 다음과 같아야합니다.

dd bs=1M if=/dev/sdb of=/dev/sdc

이미 dd실행 속도가 느리면 중단하고 더 빠른 dd인스턴스로 다시 시작할 수 있습니다 . 이를 위해서는 복사가 얼마나 진행되었는지를 아는 것이 중요합니다. dd일반적으로 취소 할 때 진행률을 인쇄하거나 진행 중일 때 USR1신호를 보내 진행률을 인쇄 할 수 있습니다.

kill -USR1 $(pidof dd)

예를 들어을 (를) 이상 복사 한 경우 다음을 사용하여 1234MiB위치에서 다시 시작할 수 있습니다 1234MiB.

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

보다 적게 1234MiB복사하면 사본이 불완전합니다. 이 (가) 이상을 복사하면 1234MiB이미 복사 된 일부 부품이 다시 복사되므로 일반적으로 해를 끼치 지 않습니다. 의심스러운 경우 이미 복사 된 것으로 생각되는 것보다 약간 작은 값을 선택해야합니다.


5

진행중인 dd 프로세스에 대한 통계 얻기

kill적절한 신호와 함께 명령을 사용하여 dd출력 통계를 표준 오류 로 만들 수 있습니다 .
GNU dd 매뉴얼 페이지에서 :

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

다른 dd 구현에서 다를 수 있으므로 맨 페이지에서 올바른 신호를 먼저 확인하십시오 (BSD dd는 SIGINFO를 사용합니다).

프로세스 속도 향상

  1. 각 HDD를 자체 SATA 포트에 연결하여 한 장치에서 동시에 다른 장치에서 데이터를 읽고 쓸 수 있도록합니다.
  2. bs=인수 를 사용하여 적절한 블록 크기를 사용하십시오 . 수퍼 유저에서이 스레드를 살펴보고 직접 값을 사용해보십시오.
  3. dd읽고 쓰려면 별도의 호출을 사용하고 파이프를 사용하여 연결하십시오 ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M).
    이 작업을 수행하고 블록 크기를 지정하면 각 호출에서 동일한 블록 크기를 사용해야합니다.
  4. direct인수 와 같은 다른 최적화를 시도 할 수 있습니다 .
  5. 하드 디스크가 마운트되지 않았거나 사본이 손상 될 수 있는지 확인하십시오.

0

'gparted'를 사용해 보셨습니까? 말 그대로 한 드라이브에서 다른 드라이브로 파티션을 복사하여 붙여 넣기하고 필요에 따라 크기를 조정할 수 있습니다. 전송 속도와 남은 시간을 얻습니다. 리눅스 파티션에는 'e2image'를 사용합니다.


0

HDClone 이라는 상용 소프트웨어가 있습니다 . 프리웨어 및 상업용으로 라이센스됩니다. 두 버전 모두 디스크 복사뿐만 아니라 부팅 가능한 pendrive 또는 DVD를 만들 수 있습니다. 소스 및 대상 HD를 연결하고 GUI 기반 지침을 따르십시오.

무료 버전은 약 80MB / 초의 속도로 전송되지만 유료 버전은 훨씬 빠릅니다. NTFS 및 FAT 파일 시스템의 경우 유료 버전은 HD의 점유 된 비트 만 복제하도록 구성 할 수 있으므로 각 복제 속도가 크게 향상됩니다.


(1)이 제품과 관련이 있습니까? (2) 어디서 구할 수 있습니까?
Scott

1
또는 "cat / dev / sdx> / dev / sdy"를 무료로 사용할 수도 있습니다.
HörmannHH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.