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.