파일 삭제, 포맷, 파티션 삭제만으로는 부족

저장매체(하드디스크, SSD)를 버리거나 타인에게 양도하려면 먼저 데이터를 삭제해야 한다. 저장매체가 포함된 장치(스마트폰, 데스크탑 PC, 노트북 등)를 취급할 때도 마찬가지다.

이 때 데이터 삭제는 단순히 rm 명령이나 파일 관리 프로그램(pcmanfm, 윈도우 탐색기 같은)의 삭제 명령만으로는 불충분하다. 운영체제의 파일 삭제 기능은 데이터를 실제로 삭제하는 것이 아니라 파일 헤더에 ‘삭제됨’ 플래그를 기록하는 것이다. 파일 내용은 다른 데이터로 덮어씌어질 때까지 그대로 남는다. 해커나 정보기관은 물론, 컴퓨터를 조금 다룰 줄 아는 사람이면 그런 식으로 삭제한 파일을 되살릴 수 있다.

저장매체를 포맷하거나 파티션 설정을 초기화하는 것도 마찬가지다. 이 역시 저장매체의 공간 분할과 파일체계 설정을 변경하는 것 뿐이지 실제 데이터를 삭제하는 것이 아니다.

저장매체를 제대로 삭제하려면 저장매체 전체를 새로운 데이터로 덮어써야 한다.

dd로 삭제하기

유닉스의 기본 디스크 복제 프로그램인 dd를 사용하면 저장매체에 새로운 데이터를 쉽게 덮어쓸 수 있다.

$ dd if=/dev/zero of=/dev/sd{X} status=progress bs=4096

위 명령을 실행하면 of에 지정한 저장매체가 초기화된다. 옵션을 살펴보자.

  • if: 복사 원본. /dev/zero는 0의 비트 스트림이다.
  • of: 복사 대상. 삭제할 저장매체를 지정한다. lsblk 명령으로 삭제할 저장매체의 경로를 미리 확인해야 한다.
  • status: 진행 상황을 확인하기 위해 progress로 지정.
  • bs: 버퍼 크기.

랜덤 데이터 덮어쓰기

저장매체를 삭제하려면 아무 데이터로나 덮어쓰면 된다. 가장 간단한 ‘아무 데이터’는 0(/dev/zero)이다. 그런데 좀 더 원래의 의미에 가까운 ‘아무 데이터’, 즉 랜덤 데이터가 필요할 때도 있다. 디스크 전체를 암호화하여 사용하려고 준비할 때가 대표적이다. 이 때는 if 옵션을 /dev/urandom으로 지정하면 된다.

$ dd if=/dev/urandom of=/dev/sda status=progress bs=4096