dd
다음과 같이 명령 을 사용한다면 :
dd if=/dev/zero of=/dev/sdX bs=16M
16M의 정확한 배수가 아닌 경우 디스크 끝에서 어떤 일이 발생합니까? 디스크의 마지막 남은 부분이 0이 아님을 의미합니까?
나는 https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ 에서 미국 정부가 사용한다고 쓴다
dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc
는 IS conv=notrunc
옵션을 닦아 때마다 마지막 바이트를 확인하는 방법?
답변
크기가 전달한 블록 크기의 배수인지 여부에 관계없이 전체 출력 장치가 지워 dd
집니다.
notrunc
디바이스 파일을 절단하는 것은 아무런 영향을 미치지 않기 때문에, 출력은, 디바이스 파일 인 경우 플래그는 아무런 효과가 없다. 출력이 일반 파일 인 경우, 쓰기 전에 출력 파일이 잘리지 않는 효과가 있습니다. 이는 일부 파일 시스템에서 기존 데이터를 덮어 씁니다 (새 데이터 블록을 작성하고 나머지는 첨부하지 않은 상태). 그러나이 속성이 모든 파일 시스템에서 보장되는 것은 아니기 때문에 명령이 파일을 덮어 쓸뿐만 아니라 출력 디스크가 채워질 때까지 (또는 다른 오류가 발생할 때까지) 계속 쓰기 때문에 유용하지 않습니다.
dd
사용하고 올바르게 사용하고 있는지에 대해 걱정 하는 대신 (이 경우에는 작동하지만 복잡 하고 때로는 작동하지 않습니다 ) 그냥 사용하십시오cat
.
cat /dev/zero >/dev/sdX
웹에 대한 대중의 믿음에도 불구하고 dd
, 디스크 쓰기에 더 적합한 마법은 전혀 없습니다 . 마법은 /dev
파일에 있습니다. 같은 현대의 바이너리 데이터에 대처할 수있는 모든 도구 cat
또는 head
같은 일을 할 수있는, dd
당신과 같은 플래그를 전달하는 않는 seek
나 skip
.
문제가에 의해 공유 주 dd
및 cat
성공적인 운영에 그입니다, 그들은 “장치에 남아있는 공간이 없습니다”(ENOSPC) 함께 오류가 있습니다. 이것을 스크립트에 넣으면 오류가 ENOSPC인지 확인하거나 다른 방법을 사용해야합니다. 보다 안정적인 방법은 먼저 장치의 크기를 결정하고 (예 : /proc/partitions
Linux에서 사용)와 같은 도구를 사용하여 정확한 바이트 수를 정확하게 작성하는 것 head
입니다.
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX
답변
문제가 없습니다. 입력이 부족 하거나으로 제한되지 않거나 다른 오류 (예 : 불량 섹터, 케이블이 고르지 않은 등) 가 아닌 한, dd
맨 끝에 쓰기 ( No space left on device
)가됩니다 count=x
.
전체 블록 장치를 덮어 쓰는 것이 목표라면 shred
사용하기가 더 쉽습니다.
shred -v -n 1 /dev/deleteme # pseudorandom data
shred -v -n 0 -z /dev/deleteme # zeroes
또는 cryptsetup
검증 단계가있는 임의의 데이터 (0은 임의의 데이터로 암호화되고 임의의 데이터는 0으로 다시 해독 됨).
또는 blkdiscard
SSD의 경우.
또는 wipefs
처음부터 다시 시작하는 경우 드라이브에 저장된 모든 것을 강제로 제거하지 마십시오.