bs=10G에서 dd를 사용하는 것에 반대하는 주장이 있습니까?

bs=10G에서 dd를 사용하는 것에 반대하는 주장이 있습니까?

임의의 위치에 잘못된 슈퍼블록(또는 블록)이 있는 드라이브가 있다고 가정해 보겠습니다. 1~8TB의 거대한 드라이브입니다. ext3으로 포맷되지 않기 때문에 제대로 포맷할 수 있도록 0으로 가득 채워 작성하고 있습니다. lsblk -fFSTYPE은 빈 문자열로 표시됩니다.

아래 명령을 실행하지 않을 이유가 있습니까?

sudo dd if=/dev/zero bs=10G status=progress of=/dev/bad_disk

답변1

블록을 쓰는 동안에는 프로그램을 중단할 수 없으며 10GB를 쓰는 데 상당한 시간이 걸릴 것으로 생각됩니다. 내 경험상 블록 크기를 통한 성능 향상은 상당히 빠르게 진행되므로 보다 합리적인 크기(4MB...)를 고수하겠습니다.

답변2

내 대답은 제목과 정확히 일치합니다.

ddwith 사용에 반대하는 주장이 있습니까 bs=10G?

하지만 당신의 경우에는 좀 그렇죠XY 문제. 근본적인 문제(불량 블록)는 가 아닌 smartctl및 로 접근해야 합니다 .badblocksdd


메모리 사용량

이것은 또 다른 대답이다"블록 크기에 따른 성능 향상"에 대해 언급합니다.

블록 크기가 상당히 빠르게 정체되면서 성능이 향상됩니다.

사실이지만 이는 bs이야기의 "거의 0에 가까운" 부분일 뿐입니다. 질문의 맥락에서 우리는 " bs무한대로 간다" 부분을 말해야 합니다.

현실 세계에서는 고원이 실제로 큰 규모로 붕괴됩니다 bs. 이 도구를 사용하면 bs=10G10GiB의 메모리 할당을 시도합니다. 성공할 수도 있고 실패할 수도 있습니다(메모리 부족). 성공하더라도 여전히 문제가 있습니다.

  • 다른 프로세스에서는 할당된 메모리를 디스크로 교체할 수 있습니다.
  • 버퍼가 dd디스크로 교체될 수 있습니다. 도구는 이를 지속적으로 사용하므로 OS는 아마도 최근에 액세스하지 않은 다른 데이터를 먼저 교체할 것입니다. 그래도 8GiB RAM과 16GiB 스왑이 있다면 bs=10GRAM에 맞출 방법이 없습니다.
  • 나중에 메모리가 필요하면OOM 킬러가 공격을 개시할 수 있습니다.. 당신은 dd죽일 첫 번째 프로세스 일 수 있습니다.

물론 이것은 모두 RAM 용량, 스왑 공간 용량, 다른 프로세스의 기능에 따라 달라집니다.


힌트

개인적으로 선호하는 것은 bs0.1~1초 안에 전송되는 크기를 사용하는 것입니다. bsRAM 사용량이 문제가 될 수 있는 경우에는 더 작습니다 . 이렇게 하면 dd거의 즉시 중단할 수 있습니다(이것이 이 작업의 요지입니다).이미 언급한 답변). 하드웨어 제한이 dd10GiB/s를 초과하도록 허용되고 여유 RAM이 40GiB 이상인 경우 bs=10G. 집에서는 그 이상으로 올라가는 일이 거의 없습니다 bs=64M.

유용할 수 있는 한 가지 사용 사례 bs=10G는 다음을 처리하려는 경우입니다.정확히만큼의 데이터를 사용합니다 count=1(예: 5배: count=5).하지만실제로는 큰 것을 bs얻을 수 있습니다더 적은, 사용하지 않는 한 iflag=fullblock(참조이 답변). 메모리 사용량 때문에 bs어쨌든 더 작게 다시 계산할 것입니다.

관련 정보