전체 디스크의 DD 재개


10

좋은 오래된 데이터를 사용하여 임의의 데이터로 하드 드라이브를 덮어 쓰고 있습니다 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
레코드 번호를 사용합니까? 블록 쓰기 횟수와 같은가요?
Naftuli Kay

2
블록 수 = 총 바이트 수 / 블록 크기, 이론적으로는 238048755782 / 512 = 464938976이어야하지만 일부 부분 레코드가 있으므로 안전을 위해 숫자에서 몇 블록을 뺍니다. 예seek=464938960
don_crissti

답변:


8

@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가없는 경우).

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


나는 plainOpen지금까지 몰랐다 . 큰! 를 사용하여 12GB 이상에서 256GB와 달리 약 4 시간 내에 2TB 드라이브 스크램블링을 완료했습니다 /dev/urandom.
Naftuli Kay

4

(아니 그냥 무작위 디스크가 아닌 복사하고자하는 사람들을 위해 그냥 알림 것을 사용할 수 : 공통) skip=BLOCKS시작 읽기 적절한 위치에, 그리고 seek=BLOCKS시작 작성 올바른 위치에. 두 옵션 모두 바이트가 아닌 블록을 사용합니다. 깨거나 다시 시작할 때를 대비하여 여러 블록을 제거하는 것이 좋습니다. bs많은 데이터를 연속으로 읽는 경우 더 나은 성능에 도달 할 수 있으므로 일반적으로 512 이상의 값을 올리는 것이 좋습니다.

귀하의 경우에는 실제로 전달 해야하는 블록 값입니다 seek. 아마도 bs속도가 빨라질 수 있도록 속도를 향상시킬 수 있는지 조정해야 할 수도 있습니다 /dev/random(엔트로피가 없을 때 의사 랜덤 및 비 블로킹)


0

dd512 바이트와 같은 작은 블록 크기는 디스크의 최대 처리량보다 훨씬 느릴 수 있습니다. 좋은 성능을 얻으려면 더 큰 블록 크기를 사용하십시오 (빨리 몇 MB라고 말함). 또는 사용 cat- 리눅스에서 내가 발견 cat최대한 빨리 할 dd최적의 블록 크기 (즉뿐만 아니라 OSX를 위해 보유하는 경우 나도 몰라) 하나의 디스크가 포함되었다.

cat도달 한 거리를 찾으려면 lsof -p1234여기서 1234는 프로세스의 프로세스 ID입니다 cat.

위치에서 다시 시작하려면

{ dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/…

여기서 123456은 바이트 단위의 오프셋입니다.


0

디스크 복제

이 스레드 에서이 답변을 확장 하면 전체 디스크를 복제하고 다시 시작하는 방법입니다.

이 예는 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입니다. (기록).

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