전체 디스크의 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

디스크를 무작위로 만드는 것보다 복사를 원하는 사람들을 위한 알림일 뿐입니다.저것skip=BLOCKScommon) : 시작하는 데 사용할 수 있습니다.독서적절한 위치에서 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첫 번째 예에서 와 not 을 사용하는 이유는 중단되기 전에 완전히 복사된 블록 크기 레코드의 수 59012때문입니다 . 59011(녹음).

답변4

가능하다면

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

시작 또는 끝 중 하나에서 로그 파일을 삭제하고 ctrl-c 등을 눌러야 하는 경우 ddrescue는 자체 로그 파일을 읽고 자동으로 재개합니다. 또한 먼저 모든 것을 쉽게 복사하고 로그 파일에서 다시 시작할 수 있으므로 다른 사용자를 위해 "돌아가서 더 열심히 노력하세요"라고 지시할 수 있습니다.

관련 정보