전체 디스크의 DD 복원

전체 디스크의 DD 복원

내 하드 드라이브를 이전 임의 데이터로 덮어쓰고 있습니다 dd.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

이것은 2TB 어레이이고 내 MacBook(Linux를 실행 중)은 약 3.7MB/s의 속도로만 데이터를 쓸 수 있습니다. 집에 있는 데스크톱이 20MB/s의 속도로 쓰는 것을 볼 수 있기 때문에 매우 슬픈 일입니다. 오늘 밤 집에 도착하면 dd여기서 달리는 것을 멈추고 집에 가져가서 더 강력한 기계로 하룻밤 사이에 어떤 진전을 이룰 수 있는지 확인하고 싶습니다.

진행 상황을 모니터링하기 위해 간단한 루프를 사용해 왔습니다.

while true; do kill -USR1 $PID ; sleep 10 ; done

출력은 다음과 같습니다.

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

dd집에서 패스를 복원한 경우 어떻게 다시 시작할 수 있나요? 이 매개변수를 알고 있지만 seek레코드 번호 또는 바이트 수 중 무엇을 가리켜야 합니까?

답변1

@don_crissti가 이미 언급했듯이 seek=복구에만 사용하십시오.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU dd바이트 단위 조회도 지원되므로 블록 크기에 관계없이 정확하게 복구할 수 있습니다.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

./dev/urandom

더 빠른 대안을 찾고 있다면 cryptsetup plainOpen임의의 키를 사용하여 0으로 만들 수 있으며 /dev/urandom훨씬 더 빠르거나(AES-NI 없음) 최대 속도로 실행될 수도 있습니다(AES-NI 사용).

shred -n 1사용 사례에 충분하다면 의사 난수 데이터를 사용할 수도 있습니다. shred매우 느린 컴퓨터에서도 전체 디스크 속도를 활용할 수 있어야 합니다.

답변2

단지 디스크를 무작위로 만드는 것이 아니라 복사하려는 사람들을 위한 알림입니다.저것common) : 이를 사용하여 skip=BLOCKS시작할 수 있습니다.읽다제자리에 놓고 seek=BLOCKS시작글쓰기올바른 위치에 있습니다. 두 옵션 모두 바이트가 아닌 블록을 사용합니다. 중단/재시동 시 만일의 경우를 대비해 블록을 여러개 삭제하는 것이 좋습니다. bs많은 양의 데이터를 지속적으로 읽는 경우 성능이 향상되므로 일반적으로 값을 512 이상으로 높이는 것이 좋습니다 .

귀하의 경우에는 실제로 에 전달해야 하는 블록 값입니다 seek. 아마도 bs속도를 향상시킬 수 있는지 확인하기 위해 조정을 시도해야 할 것입니다. 속도가 /dev/random꽤 빨라야 하기 때문입니다(엔트로피를 사용할 수 없을 때 의사 무작위 및 비차단).

답변3

디스크를 복제합니다.

확장됨이것이 스레드에서 답변한 내용은 전체 디스크를 복제하고 복원하는 방법입니다.

이 예는 5400rpm 회전 드라이브에서 특정 시스템의 SSD로 복사하는 데 최적화되어 있습니다. gdd대표하다 GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

다음 두 가지 방법 중 하나로 이 작업을 복원할 수 있습니다.

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

또는:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

59011첫 번째 예에서 우리가 사용하고 사용하지 않는 이유는 중단되기 전에 얼마나 많은 청크 크기 레코드가 완전히 복사되기 59012때문입니다 . 59011(녹음하세요).

답변4

가능하다면

#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile

로그 파일을 멀리 보관하십시오. ctrl-c 또는 다른 키를 눌러야 하는 경우 ddrescue는 자체 로그 파일을 읽고 자동으로 복구합니다. 또한 단순히 모든 것을 먼저 복사하고 로그 파일에서 복구할 수 있으므로 다른 것으로 "돌아가서 더 열심히 노력하라"고 지시할 수 있습니다.

관련 정보