본문 바로가기

프로그램/소개/다운로드/메뉴얼

SDelete - 간단한 명령형 파일 보안 삭제 및 빈 공간 정리 프로그램


블로그 다운로드(1.61)

SDelete.zip

공식 사이트 http://technet.microsoft.com/ko-kr/sysinternals/bb897443(en-us).aspx


SDelete 란 마이크로소프트에서 무료로 제공하는 파일 완전 삭제 및 빈 공간 정리(보안 삭제) 유틸리티입니다. 명령형 유틸리티이기 때문에 명령 프롬프트를 통해 작업을 진행하며, 언뜻 다소 어려워 보이지만 실질적인 사용법은 매우 단순하며 쉽습니다. 그렇기 때문에 한 번만 사용법을 보시면 바로 이해하실 수 있으실 겁니다. 개인적인 평가로 특히나 빈 공간 정리 및 최적화 작업에 있어서는 최고의 효율을 자랑하는 프로그램이 아닐까 생각합니다.

프로그램은 설치가 필요 없는 SDelete.exe 단일 파일로 구성되어 있습니다. 그러니 제공하는 파일을 다운로드 받으신 후에 압축을 풀면 나오는 SDelete.exe 파일을 \Windows\System32 폴더로 넣어두시면 명령 프롬프트 어느 경로에서나 사용할 수 있습니다. 참고로 최초 실행시 아래와 같은 라이센스 동의 창이 뜨게 되며 그대로 확인하시어 사용하시면 됩니다.



과거 백업 블로그에서 소개해드린 적이 있는 프로그램이지만 버전업도 되었고, 그 때와는 조금 바뀐 부분도 있기 때문에 새로이 내용들도 좀 보충하고 다시 소개해드리도록 하겠습니다. 참고로 이러한 보안 삭제 유틸리티를 사용하기 이전에 먼저 아래의 글을 읽어 보시는 것이 좋습니다.

작성중 - 언젠간 완성 됨...

※ 보안 삭제란?

간단하게 윈도우는 파일을 삭제할 때 디스크에서 실제로 파일은 삭제하지 않고 해당 파일에 대한 정보를 담고 잇는 메타 데이터만을 삭제하는 방식을 사용합니다.(파일과의 연결만 끊는 방식) 그래서 윈도우에서 파일을 삭제하더라도 실제 파일은 디스크에 고스란히 남아 있게 되죠. 이러한 이유로 삭제한 파일을 파일 복구 프로그램들을 통해 다시 복구할 수 있는 위험이 있습니다. 그러한 위험을 없애기 위해 파일을 삭제할 때 메타 데이터 뿐만 아니라 실제 파일도 의미없는 다른 데이터로 덮어쓰기를 진행하여 완전히 삭제함으로써 파일이 복구될 가능성을 없애는 것을 보안 삭제(안전 삭제, 완전 삭제, Secure Delete, Secure Erase, Wiping)라고 합니다. 또한 이미 빈 공간 또는 드라이브나 디스크 전체에 대한 청소(Wiping) 작업도 동일한 보안 삭제 작업으로 분류됩니다.

참고로 자동 TRIM 기능이 지원되는 SSD 에서는 보안 삭제(파일 완전 삭제, 빈 공간 정리) 작업은 필요 없으며, SSD 라는 저장 매체의 특성상 SSD 에서 자체적으로 제공하는 툴이 아닌 다른 프로그램을 통한 보안 삭제 작업들은 권장하지 않습니다. 그러니 SDelete 와 같은 써드 파티 프로그램을 통해 진행하는 완전 삭제 작업은 자기 기록 방식의 HDD 에서만 적용하시길 바랍니다.

이하 글에서는 이러한 삭제 작업은 모두 보안 삭제로 통일하도록 하겠습니다.







1. SDelete 의 기본적인 명령 구조

아래는 SDelete 의 기본 명령 구조와 매개 변수 스위치를 정리해놓은 것입니다.

SDelete SDelete [-p passes] [-a] [-s] [-q] <File or Directory>
SDelete [-p passes] [-z|-c] [Drive Letter]
파일 및 폴더 데이터 또는 빈 공간의 데이터를 완전히 삭제합니다.

  • -a
    읽기 전용 속성을 가진 파일도 삭제합니다. 생략하면 읽기 전용 속성을 가진 파일들은 삭제되지 않습니다.

  • -p passes
    DOD 5220.22-M 알고리즘으로 덮어쓰기 할 횟수를 지정합니다. 생략하면 기본값인 1 회가 적용됩니다.

  • -q
    조용한(Quiet) 모드로 작동합니다. 에러가 발생하더라도 출력하지 않습니다.

  • -s 또는 -r
    폴더 및 하위 폴더의 모든 파일을 삭제합니다. 폴더를 대상으로할 때 지정합니다.

  • -c
    드라이브의 여유 공간 전체를 DOD 5220.22-M 알고리즘으로 덮어써 청소합니다.

  • -z
    드라이브의 여유 공간 전체를 0x00(0) 으로 덮어써 청소합니다. 가상 디스크를 최적화하는 목적으로 사용할 때 좋습니다.


스위치 자체는 크게 어려운 게 없습니다. 이제 SDelete 의 보안 삭제 작업은 크게 파일, 폴더, 드라이브 전체 빈 공간 세 가지를 대상으로 할 수 있으며, 각각의 작업에 알맞는 스위치를 적용하시면 됩니다.






2. SDelete 를 통해 파일을 완전히 삭제하기



위의 세 파일 중 001.jpg 은 일반 속성의 파일이며, 002.jpg 는 읽기 전용 속성의 파일입니다. 그리고 003.jpg 파일은 읽기 전용 속성에 절대 복구되어서는 안 되는 중요한 파일이기에 DOD 5220.22-M 덮어쓰기 작업을 총 세 번을 진행하고 싶습니다. 이럴 땐 아래와 같이 작업을 하시면 됩니다.

01. 일반 파일 보안 삭제

sdelete T:\001.jpg



02. 읽기 전용 속성 파일 보안 삭제

sdelete -a T:\002.jpg



03. 읽기 전용 속성 파일 + 3 번 반복 보안 삭제

sdelete -a -p 3 T:\003.jpg



즉, 읽기 전용 속성 파일을 삭제하고 싶을땐 -a 스위치를 포함시키면 되고, 삭제 기본값인 DOD 5220.22-M 작업의 횟수를 늘리고 싶을 땐 -p 스위치를 추가로 지정해주시면 되는 겁니다. 만약 해당 파일이 읽기 전용 속성인지 일반 속성인지 모르겠다면 그냥 무조건 -a 속성을 지정해주셔도 됩니다.






3. SDelete 를 통해 폴더 전체의 파일 모두를 완전히 삭제하기



간단하게 위 폴더와 폴더 하위에 포함된 하위 폴더의 모든 파일들을 완전히 삭제하고 싶습니다. 이 때 해당 폴더에 포함된 파일들 중에는 읽기 전용 속성을 가진 파일들도 포함이 되어 있습니다. 이럴 땐 앞서 파일의 경우와 마찬가지로 읽기 전용 속성의 파일들을 의미하는 -a 스위치와 함께 서브 폴더의 모든 파일들도 함께 삭제함을 의미하는 -s 스위치를 추가하여 작업을 진행하시면 됩니다. [만약 데이터 삭제 횟수를 지정하고 싶다면 -p 스위치도 추가하여 작업하시면 됩니다.]

참고로 SDelete 의 경우 폴더 안의 모든 파일들은 삭제하지만 폴더 자체는 삭제하지 않는 문제가 있습니다. 그래서 SDelete 로 폴더 삭제 작업을 진행한 후, RD 명령을 통해 폴더 트리도 깨끗하게 지워주는 작업을 추가로 진행하셔야 합니다.

01. 폴더 및 하위 폴더의 모든 파일들을 보안 삭제 (읽기 전용 속성 파일 포함)

sdelete -a -s T:\Picture
rd T:\Picture /s /q




추가로 윈도우에서 폴더를 생성하면 기본적으로 파일처럼 읽기 전용 속성의 체크가 해제되거나 체크된 상태가 아닌 꽉찬 상태로 생성이 됩니다. 먼저 말하지만 해당 상태는 폴더가 읽기 전용 상태임을 의미하는 게 아닙니다. 사실 윈도우는 폴더에 읽기 전용이라는 속성 자체를 설정하지 않는다고 볼 수 있습니다. 윈도우 탐색기 또한 그렇게 작동을 하고요. 그래서 Attrib -R 이나 +R 명령을 통해 폴더에 읽기 전용 속성을 강제로 부여하고 해제하더라도 윈도우 탐색기 상에서는 아무런 변화가 없는 특성이 있습니다. [하지만 또 Attrib 상에서는 확인해보면 읽기 전용 속성이 부여되고 해제된 것처럼 보입니다.] 

아무튼, SDelete 에서는 이러한 폴더의 기본 상태를 읽기 전용으로 보는 듯합니다.

폴더의 읽기 전용 속성은 해당 폴더가 아닌 폴더에 포함된 파일들의 읽기 전용 속성을 설정하는 옵션입니다.



SDelete 의 -a 스위치라는 것은 먼저 읽기 전용 속성을 해제한 후 삭제라는 개념을 가지고 있습니다. 결론적으로 폴더에도 -a 스위치를 적용하여 읽기 전용 속성을 해제하지만 폴더엔 변화가 없고 결국엔 삭제되지 않는 것이죠. 뭐 같죠. 그냥 SDelete 작업 후에는 추가적으로 RD 작업을 통해 폴더를 지워줘야 한다라고 하고 넘어가죠.






4. SDelete 를 통해 드라이브의 빈 공간을 청소하기

SDelete 는 특정 드라이브의 빈 공간에 대한 정리 작업(보안 삭제)를 지원합니다. 참고로 이는 해당 드라이브의 모든 파일을 삭제하는 게 아닙니다. 단순히 비어있는 공간(여유 공간)에 삭제되지 않고 남아 있는 데이터들을 청소하는 작업입니다. 그래서 해당 드라이브에서 사용 중인 다른 파일들에는 아무런 영향을 주지 않습니다. [혹시나 헷갈리실까 봐요. ^^;;;]

아무튼, SDelete 는 빈 공간 정리에 DOD 5220.22-M제로필(Zerofill) 이라는 두 가지 알고리즘을 지원합니다. 이 때 DOD 5220.22-M 이 1 pass 작업에 더 많은 덮어쓰기를 진행하기 때문에 보다 강력한 방식이지만, 일반적으로 가정에선 1 pass 에 한 번의 덮어쓰기만을 진행하는 제로필만으로도 충분합니다. [당연하겠지만 DOD 5220.22-M 방식이 작업에 더 오랜 시간이 걸립니다.]


작업은 간단하게 빈 공간의 정리를 원하는 드라이브를 지정해주면 되며, 이 때 DOD 5220.22-M 알고리즘으로 정리를 진행하고 싶으면 -c 스위치를, 제로필 알고리즘으로 정리를 진행하고 싶으면 -z 스위치를 통해 작업을 진행하시면 됩니다. [* 남아 있는 빈 공간의 용량에 따라 작업에 오랜 시간이 걸릴 수 있습니다.]

01. DOD 5220.22-M 알고리즘으로 빈 공간을 정리

sdelete -c T:



02. 제로필 알고리즘으로 빈 공간을 정리

sdelete -z T:



참고로 이러한 빈 공간 정리 작업은 아래와 같이 먼저 원하는 드라이브로 이동한 뒤 드라이브 지정 없이 -c 나 -z 스위치만을 주는 방식으로도 작업을 진행할 수 있습니다.

03. 먼저 드라이브 경로로 이동한 뒤 빈 공간 정리 작업 (-c, -z 공통)

T:
sdelete -z




이제 여기에 파일 및 폴더 때와 동일하게 덮어쓰기 작업을 여러 차례 반복하고 싶으면 -p 스위치를 추가하시면 됩니다. 간단하죠?


그런데 한 가지 더 알아두셔야 할 것이 있습니다. 보통 SDelete 의 빈 공간 정리는 VHD 나 VMDK 와 같은 가상 디스크, 그 중에서도 동적 확장 방식으로 사용 중인 가상 디스크의 빈 공간을 정리하여 용량을 최적화하기 위한 용도로도 많이 사용하게 됩니다. 이렇게 SDelete 의 빈 공간 정리를 가상 디스크를 최적화하기 위한 용도에 활용할 때는 단순 제로필인 -z 옵션을 사용하는 것이 좋습니다.

이유는 간단합니다. DOD 5220.22-M 알고리즘을 사용하는 -c 옵션은 단순히 0 으로 가득채우는 제로필 -z 옵션에 비해 쓸데없이(가상 디스크에서는 굳이 필요 없는) 덮어쓰기 작업을 더 많이 진행하기 때문에, 불필요한 쓰기 작업을 유발하며 그만큼 작업 시간도 오래 걸리기 때문입니다. 또한 가상 디스크 포맷에 따라 -c 옵션을 사용하는 경우 최적화가 아닌 오히려 가상 디스크 파일의 용량을 늘리는 역효과가 발생할 수도 있습니다. 그러니 SDelete 의 빈 공간 정리를 가상 디스크를 최적화하는 용도로 사용할 때는 -z 옵션을 사용하시길 바랍니다.

참고로 아래의 박스는 아주 예전부터 SDelete 를 사용하시던 분들께서 참고하실 것을 정리한 내용입니다.

※ SDelete 1.5x 버전은 빈 공간 정리 옵션이 반대

SDelete 1.5x 버전에선 -c 와 -z 스위치의 의미가 반대였습니다. 고로 예전 버전을 사용 중이신 분들은 빈 공간 정리 작업에 알고리즘 옵션의 적용을 반대로 하고 있을 가능성이 있으니 확인해보시길 바랍니다.

SDelete 1.5x : [-c = Zerofill] [-z = DOD 5220.22-M]


SDelete 1.6x : [-c = DOD 5220.22-M] [-z = Zerofill]




※ SDelete 1.6 버전의 버그 문제

바로 이전 버전이었던 SDelete 1.6 버전의 경우 빈 공간 정리에서 드라이브를 지정하는데에 아래와 같은 버그가 있었습니다.

울릉도 호박엿 같은 상황



이것은 1.6 버전에서만 발생하는 버그로, 이게 또 윈도우 PE 3.x 에서 사용할 때는 해당 문제가 발생하지 않습니다. 아무튼, 이전의 1.5x 버전에서는 이러한 버그가 없었고, 1.61 버전은 해당 버그를 해결한 버전입니다. [이 상태로 상당히 오랜 시간 방치되고 있었습니다.] 결론적으로 1.6 버전의 버그 하나 때문에 여러 사람들 헷갈리는 상황이 발생한 셈입니다.

이건 헷갈린 우리들 잘못이 아닙니다. Mark Russinovich 이 양반이 반성해야 하는 문제입니다. 아무튼, 이렇게 1.6 버전을 버그 해결 없이 상당히 오랜 시간을 방치했고, 많은 분들을 헷갈리게 만들었죠. Russinovich 를 RussinoB!tch 로 개명시킬 뻔 했네요. 이런 앙칼진 암캐 같은 냔...

문제의 인물... 내가 애정이 있어서 뭐라고 하는 거야~ 아무튼, 좋은 툴 고마워~








5. SDelete 를 윈도우 PE 에서 활용할 때

Sysinternals 에서 제공하는 유틸리티들의 공통 사항은 최초 실행시 라이센스 동의 창이 뜬다는 것이고, 이는 SDelete 에서도 마찬가지입니다. 그래서 윈도우 PE 에서 사용하는 경우 매번 라이센스를 동의해야 하는 문제가 있죠. 배치 파일에서 사용할 땐 이것이 더더욱 문제가 됩니다. 아무튼, 이러한 SDelete 의 라이센스는 아래와 같은 간단한 레지스트리 값으로 처리가 됩니다.

[HKEY_CURRENT_USER\Software\Sysinternals\SDelete]
"EulaAccepted"=dword:00000001


이는 위의 레지스트리 값을 미리 입력하면 SDelete 실행에 라이센스 동의 창은 뜨지 않는다는 것을 의미합니다. 그래서 윈도우 PE 실행시 자동으로 실행되는 startnet.cmd 파일에 아래와 같이 Reg Add 작업을 추가하여 부팅 때마다 해당 레지스트리를 자동으로 입력하도록 만들어주면 윈도우 PE 에서 라이센스 동의 창 문제를 해결할 수 있습니다.

wpeinit
reg add "HKCU\Software\Sysinternals\SDelete" /v "EulaAccepted" /t REG_DWORD /d "1"



또는 이렇게 배치 파일로 처리하지 않고, 아예 윈도우 PE 의 레지스트리에 해당 값을 미리 추가해도 됩니다. 이 때 윈도우 PE 에서 HKEY_CURRENT_USER 레지스트리는 윈도우와는 다르게 DEFAULT 하이브 파일이 담당하고 있습니다. 그러니 원하는 WIM 이미지를 마운트한 후, 레지스트리 편집기(regeidt)를 실행하여 마운트한 폴더의 \Windows\System32\Config\DEFAULT 하이브를 로드하고 위와 같은 레지스트리 값을 생성하시면 됩니다.




간단하죠? 이 때 WIM 이미지를 언마운트하기 전 레지스트리 편집기에서 로드했던 하이브 파일은 반드시 언로드하셔야 WIM 이미지 파일을 정상적으로 언마운트하고 변경된 내용을 저장할 수 있습니다. 잊지 마세요. 여기까지 하죠. 그럼 SDelete 잘 사용하세요. 이상입니다. ^^