디스크 끝의 dd 명령 bs 옵션


10

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 

답변:


12

크기가 전달한 블록 크기의 배수인지 여부에 관계없이 전체 출력 장치가 지워 dd집니다.

notrunc디바이스 파일을 절단하는 것은 아무런 영향을 미치지 않기 때문에, 출력은, 디바이스 파일 인 경우 플래그는 아무런 효과가 없다. 출력이 일반 파일 인 경우, 쓰기 전에 출력 파일이 잘리지 않는 효과가 있습니다. 이는 일부 파일 시스템에서 기존 데이터를 덮어 씁니다 (새 데이터 블록을 작성하고 나머지는 첨부하지 않은 상태). 그러나이 속성이 모든 파일 시스템에서 보장되는 것은 아니기 때문에 명령이 파일을 덮어 쓸뿐만 아니라 출력 디스크가 채워질 때까지 (또는 다른 오류가 발생할 때까지) 계속 쓰기 때문에 유용하지 않습니다.

dd사용하고 올바르게 사용하고 있는지에 대해 걱정 하는 대신 (이 경우에는 작동하지만 복잡 하고 때로는 작동하지 않습니다 ) 그냥 사용하십시오cat .

cat /dev/zero >/dev/sdX

웹에 대한 대중의 믿음에도 불구하고 dd, 디스크 쓰기에 더 적합한 마법은 전혀 없습니다 . 마법은 /dev파일에 있습니다. 같은 현대의 바이너리 데이터에 대처할 수있는 모든 도구 cat또는 head같은 일을 할 수있는, dd당신과 같은 플래그를 전달하는 않는 seekskip.

문제가에 의해 공유 주 ddcat성공적인 운영에 그입니다, 그들은 "장치에 남아있는 공간이 없습니다"(ENOSPC) 함께 오류가 있습니다. 이것을 스크립트에 넣으면 오류가 ENOSPC인지 확인하거나 다른 방법을 사용해야합니다. 보다 안정적인 방법은 먼저 장치의 크기를 결정하고 (예 : /proc/partitionsLinux에서 사용)와 같은 도구를 사용하여 정확한 바이트 수를 정확하게 작성하는 것 head입니다.

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX

8

문제가 없습니다. 입력이 부족 하거나으로 제한되지 않거나 다른 오류 (예 : 불량 섹터, 케이블이 고르지 않은 등) 가 아닌 한, 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으로 다시 해독 됨).

또는 blkdiscardSSD의 경우.

또는 wipefs처음부터 다시 시작하는 경우 드라이브에 저장된 모든 것을 강제로 제거하지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.