단일 디스크 드라이브를 여러 드라이브에 동시에 복제


12

단일 디스크 드라이브를 둘 이상의 디스크 드라이브에 동시에 복제하는 방법을 찾고 있습니다.

1TB 디스크에서 시스템 이미지를 준비했으며 한 디스크를 다른 디스크로 복제하는 데 거의 2 시간이 걸리고 30 개의 디스크를 복제하려면 기하 급수적으로 증가합니다.

하나의 디스크를 하나 이상의 대상으로 복제 할 수 있다면 전체 절차를 크게 단순화 할 수 있습니다.

또한 이런 종류의 작동을 방해하는 것이 있습니까? 내가 아는 모든 디스크 복제 소프트웨어가 단일 대상 드라이브 만 지원하는 특별한 이유가 있습니까?

감사!

답변:


17

bash의 "프로세스 대체"를 tee 명령과 함께 사용하여이를 수행 할 수 있습니다.

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

또는 명확성을 위해 (약간의 효율성을 희생시키면서) 마지막을 dd다른 것과 같은 방식으로 호출하고 tee의 표준 출력을 / dev / null로 보낼 수 있습니다.

cat drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) | /dev/null

설치 한 경우 파이프 표시기 를 사용 cat하여 유용한 진행률 표시기를 얻을 수 있습니다 .

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

소스 이미지를 한 번만 읽으므로 소스 드라이브에 헤드 스 래싱이 발생하므로 다른 방법으로 이미지를 여러 번 복사하려고하면 지수가 느려질 수 있습니다. 사용하여 tee위와 같이, 프로세스는 느린 대상 드라이브의 속도로 실행해야합니다.

대상 드라이브가 USB를 통해 연결된 경우, 모두 버스 대역폭을 공유 할 수 있으므로 USB 버스가 소스 또는 대상 드라이브가 아닌 병목 상태가되기 때문에 병렬로 여러 개를 쓰는 것이 순차적으로 쓰는 것보다 빠르지 않을 수 있습니다.

위의 내용은 Linux 또는 이와 유사한 것을 사용한다고 가정합니다 (장치 이름이 다를 수 있지만 OSX에서도 작동해야 함) .Windows 또는 다른 것을 사용하는 경우 다른 솔루션이 필요합니다.

편집하다

사용하는 소프트웨어가 특정 형식의 브로드 캐스트 또는 멀티 캐스트 전송을 지원하지 않는 한 네트워크를 통한 이미징은 USB를 통해 많은 드라이브를 이미징하는 것과 유사한 문제가 있습니다. 전송 채널은 드라이브 대신 병목 현상이 발생합니다.

dd방법을 사용하면 각 머신에서 다음과 같이 데이지 체인 netcat+ tee+ dd프로세스를 수행 할 수 있습니다.

  1. 소스 머신 cat/ pv/ 는 목적지 머신 1까지 dd데이터를 통과 nc합니다.
  2. 대상 시스템 (1)가있다 nc소스 장치로부터 데이터를 수신하고 그것을 통해 배관 tee되는 것은 턴에 송신되어 dd(그래서 디스크)와 다른 nc목적지 장치 (2)에 송신하는 방법.
  3. 목적지 머신 (2)은 nc목적지 머신 (1)으로부터의 데이터를 수신하고이를 통해 tee이를 파이프 dd(및 디스크로) 및 nc목적지 머신 (3)으로 전송하는 다른 프로세스를 통해 파이핑한다 .
  4. nc이전 머신에서 데이터를 가져 와서이를 통해 디스크로 보내는 마지막 머신까지 계속 됩니다 dd.

이렇게하면 스위치와 네트워크 카드가 모두 전이중 링크를 협상했다고 가정하고 전체 네트워크 대역폭을 사용하고있을 가능성이 있습니다. 소스 머신이 10 개의 데이터 사본을 전송하는 대신 (10 개의 대상 머신을 가정) 각각이 송신하는 송신 대역폭의 1/10로 제한됩니다. 다시. 당신의 버퍼 크기 설정을 조정할해야 할 수도 있습니다 pv, nc그리고 dd가장 실용적인 성능을 가까이 할 수 있습니다.

멀티 캐스트 만 지원하는 일부 소프트웨어를 찾으면 훨씬 쉬울 것입니다. 그러나 위의 시도는 시도하기에 충분할만한 해키 솔루션입니다 ...

다시 편집

또 다른 생각. 드라이브 이미지가 잘 압축되면 (대부분의 청크가 0으로 가득 찬 경우) 한 번에 많은 대상으로 전송하더라도 소스 시스템의 발신 대역폭에는 문제가 없습니다. 먼저 이미지를 압축하고 tee+를 사용하여 어디서나 전송 nc하고 대상 (네트워크 nc->-> 압축 풀기 dd->-> 디스크)의 압축을 푸십시오 .


프로세스에 대한 자세한 설명을 주셔서 감사합니다. 정말 도움이되었습니다. 현재 멀티 캐스트를 사용하여 네트워크 복제 옵션을 탐색 중이며 실패하면이 DD 벡터를 더 살펴볼 것입니다.
mr.b

드라이브가 다른 컴퓨터에 연결되었다고 말하지 않았습니다.
marcusw

이는 로컬 컴퓨터와 컴퓨터 네트워크가 일대 다 디스크 복제와 동시에 가장 가깝습니다. 자세한 설명 감사합니다!
mr.b

Linux 기반의 네트워크 복제 옵션의 경우 Clonezilla를 고려할 수 있습니다. 멀티 캐스트 및 DD를 포함한 여러 로컬 복제 옵션을 통해 복제 할 수 있습니다.
user35060

5

google에서 제안한 첫 번째 답변 (Linux 시스템) : dd if=/dev/sdb of=- | tee >(dd of=/dev/sdc) >(dd of=/dev/sdd) >(dd of=/dev/sde)/ dev / sdb는 복제하려는 하드 드라이브이고 / dev / sdc, / dev / sdb 및 / dev / sde는 복제 할 드라이브입니다 ( 원하는만큼 복사하여 붙여 넣기 만하면됩니다. LiveCD가 그렇게해야하며 드라이브 문자에주의해야합니다!


1
진실. 이 질문을하기 전에 약간의 조사를했지만 다른 사람들의 경험을 듣는 데 관심이있었습니다. DD는 매우 유용한 유틸리티이지만 1) 실제 데이터 내용에 대한 인식이 부족합니다 (섹터별로 빈 공간도 복사 함). 2) 둘 이상의 드라이브에 복제 할 때 성능 문제가보고 된 사람 이런 식으로. 더 이상의 아이디어?
mr.b

"[...] 여기서 / dev / sdb는 복제하려는 하드 드라이브이고 / dev / sdc, / dev / sdb 및 / dev / sde는 복제 할 드라이브입니다 [...]"---> "[...] 그리고 드라이브 문자에주의해야합니다!" : DI 동의 !!!
dag729

1
@ mr.b : 1) 내 마음에, 비트 비트 복사는 잠재적으로 위험한 바로 가기를 사용하는 것보다 낫습니다. 2) Meh, 내가 생각할 수있는 가장 좋은 방법은 dd 소스를 엉망으로 만들어 여러 위치에 동시에 복사하는 것이지만 느린 방법으로 복사하는 것이 더 빠릅니다.
marcusw

확실 of=-합니까? 그냥 -나를 위해 표준 출력으로 출력하는 대신 출력 파일을 만듭니다 . of옵션을 생략하면 해결할 수 있습니다 .
거기서부터

그런 식으로 "티"를 사용하면 작동하지 않습니다. 다음을 참조하십시오 : joshhead.wordpress.com/2011/08/04/…
user35060

2

내가 아는 것은 하드 드라이브 복제기라는 것이 있다는 것입니다. 이들은 동시에 여러 드라이브에 HD를 복제 (복제)하는 특수 장치입니다. 아마 이 기사는 당신을 도와줍니다.


그래, 나는이 장치들의 존재를 알고있다. 그러나 제 제 예산이
적은

1
완전히 제로 비용은 아니지만, 여분의 기계 (괜찮은 전원 공급 장치가 있음)가 있으면 지휘관이 될 수 있고 저렴한 SATA 컨트롤러 몇 개를 구입할 수 있습니다 (가정용 기계에는 2 포트 컨트롤러가 필요합니다) "단일 소스에서 읽기, 많은 쓰기"를 지원하는 일부를 효율적으로 찾을 수있는 경우 고유 한 복제 시스템을 만들고 dd + tee 방법 또는 다른 소프트웨어를 사용할 수 있습니다.
David Spillett

(이것은 내가 당신이 나의 초기 답변에서하려고했다고 가정 한 것입니다.)
David Spillett

1

아직 아무도 언급하지 않았으므로 Clonezilla 와 Server Edition에 대해 언급하겠습니다 . (불행히도 직접 링크가 보이지는 않지만 사이트의 왼쪽 탐색 메뉴에서 "Server Edition"을 찾을 수 있습니다 ...)

Clonezilla Live 에디션으로 큰 행운을 얻었지만 아직 Server Edition을 사용해 보지 않았습니다. 그래도 꽤 매끄러운 보인다.


귀하가 제공 한 피드백을 바탕으로 귀하에게 적합한 솔루션으로 보이는 것으로 Clonezilla를 두 번째로 설명하겠습니다.
user35060

1

Mac OS X을 사용하는 경우 내장되어 있습니다. 머신에서 멀티 캐스트 asr 세션을 시작하여 이미지를 제공 할 것입니다. 클라이언트 실행에서 부팅 디스크까지 터미널을 열고 asr 멀티 캐스트 스트림에 연결하십시오. 비어 있는.

세부 사항 : http://www.bombich.com/mactips/multicast.html


1

나는 이것과 관련하여 웹에서 2 개의 유용한 링크를 발견했다. 한 사람은 고양이없이 dd를 사용하여 디스크 듀피를 수행했습니다.

dd if=/dev/sdb | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://joshhead.wordpress.com/2011/08/04/multiple-output-files-with-dd-utility

진행률 표시기를 표시하기 위해 다른 링크로 추가로 확장됩니다.

dd if=/dev/sdb | pv -s $(blockdev --getsize64 /dev/sdb) | tee >(dd of=/dev/sdc) | tee >(dd of=/dev/sdj) | dd of=/dev/sdh

http://www.commandlinefu.com/commands/view/6177/dd-with-progress-bar-and-statistics


0

나는 다윗의 대답을 넓히고 싶었다

pv drive.image | tee >(dd of=/dev/sda) >(dd of=/dev/sdb) >(dd of=/dev/sdc) | dd of=/dev/sdd

drive.image실제로 같은 다른 장치 일 수있다/dev/sde

둘째, dd적절한 bs설정으로 명령이 더 빠르게 작동 합니다. 내가 사용하는 bs=64k10 분 1 시간에서 40 공연 파티션을 복사하는 6 배의 속도 증가를 보았다.

따라서 최종 명령은 다음과 같습니다.

pv drive.image | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd

소스가 파일이 아닌 드라이브 인 경우 다음과 같습니다.

pv /dev/sde | tee >(dd bs=64k of=/dev/sda) >(dd bs=64k of=/dev/sdb) >(dd bs=64k of=/dev/sdc) | dd bs=64k of=/dev/sdd


0

병렬 하드 디스크 복제는 컴퓨터 법의학에서 일반적인 작업입니다. dc3dd( man page )는 단일 소스를 여러 대상으로 병렬 복사 할 수 dd있고 여러 of=옵션을 허용하는 UNIX 와 같이 작동하는 전용 도구입니다 .

소스 볼륨 및 사본의 해싱을 활성화하여 무결성을 확인할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.