답변:
발생할 수있는 세 가지가 있습니다.
이론을 위해 지금까지. 실용 테스트를 위해 지금.
VM에 새로운 Ubuntu 12.10을 설치했습니다. (기본 옵션 및 10GB 가상 디스크를 사용하는 win7-x64의 VMware 워크 스테이션).
dd 명령이 성공적으로 완료되었으며 작동 프롬프트가 표시되는 부분으로 되돌아갔습니다. 분명한 이유로 실패 할 수 있지만 새 명령을 입력 할 수 있습니다.
Segmentation fault
당신이 성공적으로 완료했다고 주장하고 ...?
Damn Small Linux를 사용하는 가상 머신에서의 빠른 실험은 dd 명령이 예상대로 완료되었음을 나타냅니다. 프로그램은 처음에 실행하기 위해 메모리에로드되며 프로세스 중에 실행 파일을 반복해서로드하는 것은 거의 의미가 없습니다. 결국 dd는 종료되고 '장치에 남은 공간 없음'을보고합니다.
그 후 운영 체제는 처음에는 정상적으로 작동하는 것처럼 보이지만 첫 번째 명령 후에는 더 이상 명백한 이유로 실행할 수 없어 응답하지 않습니다. 하드 드라이브 내용을 간단히 검사 한 결과 파티션이 실제로 0으로 표시되었습니다.
로부터 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
도 이전 호출 에서 캐시 될 수 있습니다 .
최근에 실수를했습니다. 나는 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를 사용하여 시스템을 정상적으로 종료 할 수 있지만 오류는 없습니다.
따라서 이것은 귀하의 질문에 정확하게 대답하지는 않지만 디스크의 시작을 지우면 어떻게되는지 알려줍니다.
디스크에있는 대부분의 내용은 여전히 복구 할 수 있지만, 내가 관심있는 모든 것이 백업 된 이후로 귀찮게하지 않을 것입니다.
다른 실행중인 구성 요소가 누락 된 파일을 요청하고 커널을 패닉시키기 때문에 완료되지 않을 가능성이 큽니다. 디스크를 실제로 제로화하려면 라이브 CD를 사용하십시오. 그렇지 않으면 결과를 보장 할 수 없습니다.