이미 0인 바이트를 덮어쓰지 않고 장치를 0으로 채우는 방법은 무엇입니까?

이미 0인 바이트를 덮어쓰지 않고 장치를 0으로 채우는 방법은 무엇입니까?

나는 USB 플래시 드라이브 usb 3을 가지고 있으며 읽기 속도가 쓰기 속도보다 훨씬 빠릅니다. 플래시의 99%가 이미 0으로 채워져 있다고 가정하면, 100%까지 모든 메모리 플래시를 0으로 덮어써서 0으로 채우고 싶습니다 dd if=/dev/zero of=/dev/FLASH.

이 프로세스는 시간이 오래 걸리며 플래시 드라이브의 예상 수명을 최소화합니다.

나는 어떤 영역이 0이 아닌지 확인하고 0이 아닌 영역을 0으로 덮는 것이 더 빠를 것이라고 생각했습니다.

이를 수행할 수 있는 방법이 있습니까? 흥미롭다면 보안상의 이유로 이 모든 것이 필요합니다.

답변1

안전상의 이유는 제쳐두고 그냥 해보자. 우리는 GNU를 (남용)할 수 있습니다 ddrescue.

제로 섹터를 감지하는 데 --generate-mode유용합니다 .

ddrescueoptions 와 함께 호출 되면 --generate-mode기본 "구조 모드"와는 다른 "빌드 모드"에서 실행됩니다. 즉, 이 --generate-mode옵션을 사용하면 ddrescue아무것도 저장되지 않습니다. 나중에 사용하기 위해 생성을 시도합니다 mapfile.

[…]

ddrescue어떤 경우에는 sum 의 (부분) 복사본인 sum mapfile에서 근사값을 생성할 수 있는데 , 이는 거의 정확한 것만큼 좋습니다 . 이는 단순히 모두 0을 포함하는 섹터가 저장되지 않는다고 가정하여 수행됩니다.infileoutfilemapfile

[…]

ddrescue --generate-mode infile outfile mapfile

(원천)

outfile귀하의 장치가 마지막 ddrescue으로 실행된 장치 라고 가정해 보겠습니다 . 우리는 그것을 사용할 수 없습니다 infile(동일한 파일일 때 작동을 거부하기 때문에 ddrescue). 더미 파일이 필요하며 그러면 그렇게 됩니다. 장치의 물리적 섹터 크기를 알고 선택적으로 사용해야 합니다. 이 명령이 도움이 될 수 있습니다.infileoutfile/dev/zero-b

lsblk -o NAME,PHY-SEC /dev/FLASH

여기서 나는 그것이라고 가정합니다 512.

ddrescue -b 512 --generate-mode /dev/zero /dev/FLASH flash.map

이제 각 섹터 는 0으로 채워졌는지 여부에 따라 flash.map시도되지 않음( ?) 또는 완료됨( )으로 설명됩니다. +다음 단계는 0이 아닌 섹터를 0으로 채우는 것입니다. --fill-mode이는 작업에 적합합니다.

ddrescueoptions 와 함께 호출 되면 --fill-mode기본 "복구 모드"와는 다른 "채우기 모드"로 실행됩니다. 즉, 이 --fill-mode옵션을 사용하면 ddrescue아무것도 저장되지 않습니다. 상태 문자가 옵션 인수로 지정된 유형 문자 중 하나와 일치하는 infile블록에서 읽은 데이터 만 채웁니다.outfilemapfile--fill-mode

(원천)

-b출력 장치 와 동일한 값을 사용해야 하며 --generate-mode추가로 --force출력 장치를 재정의해야 합니다. 이것은 명령입니다:

ddrescue -b 512 --force --fill-mode=+ /dev/zero /dev/FLASH flash.map

이번에 /dev/zero는 단순한 더미 매개변수가 아니라 장치에 기록된 실제 데이터 소스(0)입니다.

이제 /dev/FLASH0으로 채워집니다. 장치를 물리적으로 연결 해제하기 전에 버퍼를 플러시해야 할 수도 있습니다(유용한 링크:1,2,).

관련 정보