`dd`를 통한 디스크 복제 속도를 최대화하는 방법은 무엇입니까?


1

내가 복사 할 전체 는 / dev에는 / dev / sda를에서 디스크 / 정확하게, 그래서 내가 사용하고자하는 SDB dd리눅스 명령을하지만,이 두 옵션은 저를 혼동 bs하고 sync.

dd if = / dev / sda of = / dev / sdb bs = 4096 conv = notrunc, 오류 없음, 동기화

  • wiki.archlinux.org가 제안한sync 대로 옵션을 추가해야합니까 ?

  • bs=16384kB속도를 최대화하기 위해 더 큰 숫자가 아닌 디스크 캐시 크기로 설정해야합니까 ?

답변:


2

wiki.archlinux.org에서 제안한대로 동기화 옵션을 추가해야합니까?

conv=noerror옵션 을 사용하려는 경우 옵션을 더 잘 사용 conv=sync했거나 쓸모없는 백업으로 끝날 수 있습니다.

Linux 매뉴얼 페이지 당

Each CONV symbol may be: 
...
sync
    pad every input block with NULs to ibs-size; when used with block or unblock, pad with spaces rather than NULs 

패딩을 추가 할 수있는이 옵션은 noerror또는 "읽기 오류 후 계속"옵션을 지정할 때 필요 합니다. 디스크 컨트롤러는 하드 (즉, 복구 불가능한) 읽기 오류가 발생할 때 입력 버퍼에 섹터 데이터를 제공하지 않습니다. dd 가 이러한 오류로 정상적으로 종료 되면 (정상적인 것처럼) 데이터 부족은 문제가되지 않습니다.

그러나 "읽기 오류 후 계속"이 지정되면 데이터 부족이 문제입니다. 읽을 수없는 섹터 (들)를 설명하기 위해 입력 버퍼가 채워지지 않으면, 기록 된 후속 데이터는 기록되어야하는 적절한 섹터로부터 오프셋 될 것이다. 또는 후속 데이터가 오류에 해당하는 대상 섹터를 건너 뛰거나 (또는 해당 섹터를 탐색 ( dd parlance) 한 경우) 해당 건너 뛴 섹터의 가비지 데이터는 원래 데이터의 사본으로 처리됩니다.

dd 를 사용하여 정수 시퀀스 번호가있는 블록을 복사하는 경우 누락 된 블록을 감지하거나 설명하기 위해 패딩이 필요하지 않을 수 있습니다. 원시 디스크 섹터는 이러한 통합 시퀀스 번호를 갖는 것으로 가정 할 수 없으며 복사 된 파일 시스템의 무결성을 유지하기 위해 패딩이 필요합니다.

dd 에는 두 가지 sync옵션이 있습니다 . 하나는 다른 하나는 입니다 . 그들은 다른 의미를 가지고 있습니다.
conv=synciflag=sync

속도를 최대화하기 위해 bs = 16384kB를 더 큰 숫자가 아닌 디스크 캐시 크기로 설정해야합니까?

당신이 말하는 "더 큰 숫자"는 무엇입니까?

bs, 블록 크기, 매개 변수는 캐시 크기와는 아무 상관이 없다 (나는 어느 당신이 언급하고 캐시 모르겠어요 비록합니다.)
도 잠글 훨씬 DMAable 메모리를 사용할 수 없을 수 있으므로 16메가바이트는, 아마도 과잉이다 . 이 블록 크기를 변화에 대한 몇 가지 벤치 마크 테스트가 있으며, 같은 내가 본 것, 이 하나 , 512킬로바이트에 대해 것 같다 (또는 적어도 더 이상) 반환을, 감소의 크기가 나의 의심을 확인합니다.

bsHDD를 복사 할 때 사용되는 클래식 값 은 트랙 크기 (바이트) (또는 num_of_sectors_per_track * 512 바이트)였습니다. 그러나 현대 HDD는 존 비트 기록을 사용하고 면적 밀도를 변화시키기 때문에 "트랙 당 섹터 수"는 고정되어 있지 않습니다. 최신 드라이브에서 "트랙 당 63 개 섹터"에 대해 일반적으로 게시 된 사양은 수치상의 편의에 지나지 않습니다.


1

dd가 작업을 수행하지는 않지만 가능한 경우 dd_rescue 사용을 고려할 수 있습니다. 손상된 섹터를 더 잘 처리 할 수있는 기능을 제공하며 복사 중에 상태 정보를 제공하는 데 더 효과적입니다. 구문은 약간 다릅니다.

# dd_rescue [options] infile outfile
# using a 1M block size allows dd_rescue to adjust it's reads/writes to the limits of the OS buffer 

dd_rescue -b 1M /dev/sda /dev/sdb

#sample of the status
dd_rescue: (info): Using softbs=1048576, hardbs=4096
dd_rescue: (info): ipos:   1048576000.0k, opos:   1048576000.0k, xferd:   1048576000.0k
               errs:      0, errxfer:         0.0k, succxfer:   1048576.0k
         +curr.rate:  107936kB/s, avg.rate:  107268kB/s, avg.load: 98.6%
         >-----------------------------------------< 100%  ETA:  0:00:00

복제 속도를 약간 높이는 것이 프로세스 시간이 얼마나 걸리는지 알려주는 것보다 덜 중요하다는 것을 알 수 있습니다.

회전 플래터 드라이브의 첫 50GB 정도가 나머지 것보다 최대 30 % 빠르기 때문에 초기 평균 전송 속도가 잘못 될 수 있습니다. 디스크 내부의 물리적으로 짧은 트랙에서 복사하고 트랙이 길어질수록 속도가 느려집니다. 물론 SSD에는 보이지 않습니다.


0

bsb매번 n (바이트)을 읽고 씁니다. 블록 크기를 나타냅니다 . 입력 블록 크기출력 블록 크기에bs 반드시 영향을 미치지는 않습니다 . ibs obs

sync다음 블록으로 이동 하기 전에 모든 데이터가 디스크에 올바르게 기록 될 때까지 프로세스가 대기하도록 지시합니다 . 일반적으로 데이터 무결성을 보장하고 정전시 (데이터 쓰기가 완료된 것처럼 드라이브 연결을 끊는 경우) 데이터 손실을 피하는 것이 좋지만 속도느립니다 .

sync복사 프로세스가 없으면 전체적으로 더 빠르며 장치를 sync사용하도록 설정 한 것보다 빨리 기록 할 수 있지만 정보가 완전히 복사되면 실제로 디스크가 여전히 캐시에서 실제 지원으로 정보를 쓰고있을 수 있습니다. 하드 드라이브 나 복사가 완료 되 자마자 장치 연결을 끊지 않으려는 경우에 유용합니다.

간단히 말해서 :

  • sync → 정보가 실제 지원에 완전히 기록 될 때까지 기다립니다.
  • sync→ 정보를 보내지 않고 . 장치에 넣고 실제 쓰기를 처리하게하십시오.

소량의 시간 동안 디스크에 반복적으로 액세스 하여 전체 프로세스를 느리게 하는 것을 방지하기 위해 sync블록 크기 bs 를 사용하여 옵션을 활성화 하면 프로세스 속도를 약간 높일 수 있습니다 .

나는 항상 옵션 dd없이 사용 했으며 sync아무런 문제도 경험하지 못했습니다. 장치를 꺼내기 전에 정보가 완전히 기록 될 때까지 기다리십시오.


감사. bs=IDE HDD에 어떤 번호 가 더 좋은지 알려주시겠습니까 ? 10000k? 20000k? 또는 512의 배수 (섹터 크기)가 더 좋을까요?
Kevin Dong

conv=sync(질문에있는)에 대한 설명 이 잘못되었습니다. 설명하고 있습니다 iflag=sync(질문에 없음).
톱밥

@sawdust 나는를 sync사용하여 HDD 의사 벤치마킹과 관련된 게시물에 대한 정보를 읽었으며 dd그 옵션을 사용하여 그 동작을 경험했습니다. 그러나 나는 틀릴 수 있습니다. 차이점을 자세히 설명해 주시겠습니까?
arielnmz

@KevinDongNaiJia는 그리고에 관해서는 bs내가 드라이브의 캐시와 동일한 크기를 사용하는 것이 좋습니다 싶지만, 4M좋은 값입니다, 또한 내가 명시 적으로 설정하는 게 좋을 것 ibsobs블록 크기; dd상태에 대한 매뉴얼 페이지로서 bs옵션이 반드시 입력 블록 크기출력 블록 크기를 설정하지는 않습니다 .
arielnmz

1
당신이 모두를 설정 한 경우 @KevinDongNaiJia ibs그리고 obs당신은 지정할 필요가 없습니다 bs. 그것이 매뉴얼 페이지가 dd말한 것입니다.
arielnmz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.