dd가있는 드라이브에 0을 dd로두면 어떻게됩니까?


10

dd if=/dev/zero of=/dev/sda bs=1Mdd 명령이 원래 / dev / sda에 있었던 경우이 명령이 성공합니까? 그때 dd가 메모리에 있기 때문에 이것이 완료됩니까?

답변:


40

발생할 수있는 세 가지가 있습니다.

  1. 명령이 시작되고 완료 될 때까지 실행되며 프롬프트로 되돌아갑니다. 디스크가 효과적으로 지워 지므로 그 이후로는 많은 것을 할 수 없지만 일부 쉘 내장 명령으로 운이 좋을 수도 있습니다.
  2. 명령이 시작됩니다. 어떤 시점에서 메모리 압력으로 인해 페이징 아웃됩니다. 일반적으로 스왑의 디스크 (변경되지 않은 데이터)에서 일부를 다시로드 할 수 있기 때문에 이것은 문제가되지 않습니다. 그러나 방금 이것들을 지우면 디스크를 채우면서 dd 명령이 부분적으로 실패합니다.
  3. 세 번째 옵션은 BSD의 것입니다. 마운트 된 디스크의 MBR은 덮어 쓰기로부터 보호됩니다. 명령을 루트로 실행하더라도 수십 개의 Linux 배포판이 있으며 모두 약간 다릅니다. 그들 중 일부는 이것을 모방하는 것이 가능합니다.


이론을 위해 지금까지. 실용 테스트를 위해 지금.

VM에 새로운 Ubuntu 12.10을 설치했습니다. (기본 옵션 및 10GB 가상 디스크를 사용하는 win7-x64의 VMware 워크 스테이션).

dd 명령이 성공적으로 완료되었으며 작동 프롬프트가 표시되는 부분으로 되돌아갔습니다. 분명한 이유로 실패 할 수 있지만 새 명령을 입력 할 수 있습니다.

디스크를 닦은 후 Ubuntu VM의 스크린 샷


9
실기 시험에 큰 +1!
Doug Harris

10
나는 Segmentation fault당신이 성공적으로 완료했다고 주장하고 ...?
Alvin Wong

1
찬성. 디스크를 읽을 수 없게 만들었습니다. 나는 그것이 목표라고 생각합니다. 보안 지우기를 위해서는 실제로 다른 것을 시도해야합니다 (예 : 보안 지우기 명령).
Hennes

내가 얻은 최고의 답변 중 하나입니다. 감사!
agz

6

Damn Small Linux를 사용하는 가상 머신에서의 빠른 실험은 dd 명령이 예상대로 완료되었음을 나타냅니다. 프로그램은 처음에 실행하기 위해 메모리에로드되며 프로세스 중에 실행 파일을 반복해서로드하는 것은 거의 의미가 없습니다. 결국 dd는 종료되고 '장치에 남은 공간 없음'을보고합니다.

그 후 운영 체제는 처음에는 정상적으로 작동하는 것처럼 보이지만 첫 번째 명령 후에는 더 이상 명백한 이유로 실행할 수 없어 응답하지 않습니다. 하드 드라이브 내용을 간단히 검사 한 결과 파티션이 실제로 0으로 표시되었습니다.


4

로부터 mmap리눅스 페이지 :

MAP_SHARED Share this mapping.  Updates to the mapping are visible to other processes that map this  file,
           and  are  carried  through  to the underlying file.  The file may not actually be updated until
           msync(2) or munmap() is called.


MAP_PRIVATE
           Create a private copy-on-write mapping.  Updates to the mapping are not visible to other  pro‐
           cesses  mapping  the  same  file,  and  are  not carried through to the underlying file.  It is
           unspecified whether changes made to the file after the mmap() call are visible  in    mapped
           region.

실행 파일은 mmap함수에 대한 내부 호출을 통해 커널에 의해 메모리에 매핑됩니다 . MAP_PRIVATE타입 매핑 (에서 살펴 요청 fs/binfmt_elf.c커널 소스 트리를).

따라서 mmap파일의 변경 사항이나 해당 파일이 참조하는 기본 블록 장치가 이미 페이징되어 있고 존재하는 매핑 페이지로 전파되는지 여부 에 따라 동작이 요약됩니다 .

이 페이지는 커널 동작이 아닌 API 표준을 기반으로하므로 "지정되지 않은"것입니다. 실제 동작은 파일에 대한 변경 사항이 이미 존재하는 페이지로 다시 전파되지 않는 것입니다. 물론, 프로그램이 갑자기 페이징되지 않은 코드 페이지로 갑자기 이동하고 삭제가 이미 수행 된 경우 모든 0의 페이지를 얻게됩니다.

그러나 아마도 아마도 시간이 지남에 dd따라 삭제 루프를 계속하는 데 필요한 모든 코드 페이지에서 페이징되었습니다. 루프가 종료되면 존재하지 않는 페이지에있는 일부 코드에 도달 할 가능성이 있습니다. 예를 들어, 함수가 페이지 경계에 걸쳐 있으므로 리턴 명령에 도달하려면 페이지를 가져와야합니다.

그러나 해당 페이지 dd도 이전 호출 에서 캐시 될 수 있습니다 .


1

예. 물론 대부분의 파일 시스템 비용이 들지만 이미 알고있는 것으로 추정됩니다.


0

최근에 실수를했습니다. 나는 2GB의 img를 SD 카드에 쓸려고했지만 실수로 SD 카드에 넣었다 dd if=rasberrypi.img of=/dev/sda. 내 실수를 깨닫고 dd를 취소했지만 그때까지 ~ 600MB (~ 500GB 사용 된 디스크)가 쓰여졌습니다. 파티션 테이블이 망가졌습니다.

아무 일도없는 것처럼 데스크톱 (10GB 메모리 및 몇 주 동안)은 몇 시간 동안 계속 작동했습니다. 최근에 중요한 파일을 dropbox로 변경하고 크롬으로 정상적으로 탐색했습니다. 사실 원래 내가 원했던대로 SD 카드를 dd로 실행할 수 있었지만 정상적으로 작동했습니다.

두 시간 후에 파일 시스템이 읽기 전용 모드로 전환되어 임의의 프로그램이 죽기 시작했습니다. 나는 다른 많은 시스템에 쏟아져 나갔다. 나는 그 세션을 계속 사용할 수 있지만, 새로운 세션을 만들면 ssh 프로그램을 찾을 수 없다는 오류가 발생했다. 현재 크롬에서 열린 탭을 전환 할 수 있지만 탭의 내용이 "걸린"것 같습니다. 새로 고침하면 흰색 화면이 영원히 나타납니다. rsyslogd는 어떤 이유로 100 % CPU (1 코어)를 사용하고 있었으며 아마도 로그를 디스크로 플러시 할 수없는 이유와 혼동되었을 수 있습니다.

VLC에서 350MB 비디오를 열고 일시 중지했는데 여전히 재생할 수 있으며 비디오의 일부로 건너 뜁니다. 최근에 다운로드 한 이후 일 것입니다.

GUI를 사용하여 시스템을 정상적으로 종료 할 수 있지만 오류는 없습니다.

따라서 이것은 귀하의 질문에 정확하게 대답하지는 않지만 디스크의 시작을 지우면 어떻게되는지 알려줍니다.

디스크에있는 대부분의 내용은 여전히 ​​복구 할 수 있지만, 내가 관심있는 모든 것이 백업 된 이후로 귀찮게하지 않을 것입니다.


-1

다른 실행중인 구성 요소가 누락 된 파일을 요청하고 커널을 패닉시키기 때문에 완료되지 않을 가능성이 큽니다. 디스크를 실제로 제로화하려면 라이브 CD를 사용하십시오. 그렇지 않으면 결과를 보장 할 수 없습니다.


2
누락 된 파일을 요청해도 커널에 패닉이 발생하지 않습니다. 그럴 경우 신뢰할 수없는 디스크가 하나만 있으면 시스템이 중단됩니다.
David Schwartz

@DAvid Schwartz의 경우 #rm -rf /는 실제로 전체 파일 시스템을 삭제합니다. 나는 실험에서 그렇지 않다는 것을 안다. 표준이 아닌 일종의 램 디스크 기술이 구현되지 않는 한 시스템은 램에서 완전히 오래 실행될 수 없습니다.
Frank Thomas

@ FrankThomas : 커널이 공황 상태에 있었습니까?
David Schwartz

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