dd 명령에 가장 적합한 바이트 크기를 결정하는 방법


21

dd if = / dev / hda of = / dev / hdb를 수행하면 깊은 하드 드라이브 복사가 수행된다는 것을 알고 있습니다. 사람들은 "bs"옵션을 사용하여 한 번에 읽고 쓰는 바이트 수 (512)를 늘려 프로세스 속도를 높일 수 있다고 들었습니다.

내 질문은 :

하드 드라이브에서 복사하기위한 이상적인 바이트 크기는 무엇입니까?

이것이 이상적인 바이트 크기를 결정하는 이유는 무엇입니까?


나는 드라이브 또는 파티션의 크기로 완벽하게 균등하게 나누어야한다고 생각했습니다. 따라서 대상 파티션의 정확한 바이트 크기를 결정하고 주요 요소를 얻고 여러 배의 합리적으로 큰 블록을 결정하려고했습니다. 그 주요 요인 중 몇 가지
PP.

답변:


18

Chris S에 따르면 최적의 블록 크기는 하드웨어에 따라 다릅니다. 내 경험상 항상 기본 512 바이트보다 큽니다. 원시 장치로 작업하는 경우 기존 파일 시스템 구조는 영향을 미치지 않습니다. 아래 스크립트를 사용하여 dd의 블록 크기를 '최적화'하는 데 도움을주었습니다.

#!/bin/bash
#
#create a file to work with
#
echo "creating a file to work with"
dd if=/dev/zero of=/var/tmp/infile count=1175000

for bs in  1k 2k 4k 8k 16k 32k 64k 128k 256k 512k 1M 2M 4M 8M 

do
        echo "Testing block size  = $bs"
        dd if=/var/tmp/infile of=/var/tmp/outfile bs=$bs
        echo ""
done
rm /var/tmp/infile /var/tmp/outfile

4
OS X에서 "1M ... 8M"은 "1m ... 8m"으로 소문자 여야합니다.
Matt Beckman

1
dd 앞에 "시간"을 추가하여 IO 대기 시간과 실제 작업량에 대한 추가 정보를 얻을 수 있습니다.
Olivier Dulac

1
@lain /dev/zero이 생성되므로 디스크에서 읽을 필요가 없습니다. 당신은 할 수 dd if=/dev/zero ibs=1M count=32 obs=$bs of=/var/tmp/outfile@ 올리비에 - dulac 잘, dd이미 속도를 인쇄; 나는 생각하지 않는다 time(또는 /usr/bin/time) 정보의 가치를 추가 할 수 있습니다.
bufh 2016 년

1

불행히도 완벽한 크기는 시스템 버스, 하드 드라이브 컨트롤러, 특정 드라이브 자체 및 각 드라이버에 따라 다릅니다. 완벽한 크기를 찾는 유일한 방법은 다른 크기를 계속 시도하는 것입니다. 일부 장치는 하나의 블록 크기 만 지원하지만 이는 드물지만 일반적으로 드라이버가 차이를 구성한다는 경고입니다.

2 ^ 15 또는 2 ^ 16의 블록 크기는 Adaptec SAS RAID 컨트롤러, 4x PCIe, 64 비트 FreeBSD 8.0-STABLE에 연결된 WDC (8mb 캐시) SATA 드라이브에 가장 적합합니다. 그러나 저렴하고 오래된 썸 드라이브의 경우 2 ^ 10 크기가 가장 빠릅니다.

"완벽한 크기"는 거의 항상 2의 거듭 제곱입니다.


0

시간을 낭비하기 전에 사용중인 장치에서 테스트를 수행 한 결과를 측정하는 장점을 보증 할 수 있습니다. 나는 어리석게도 측정하지 않았고 블록 크기를 조정하면 590Gb 전송의 DD 지속 시간이 절반으로 줄었습니다. 동일한 BS 값은 다른 캐디 / 드라이브 콤보를 사용하여 시간을 20 % 단축했을뿐입니다.

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