더 나은 압축을 위해 Windows에서 가상 디스크의 여유 공간을 0으로 채우는 방법은 무엇입니까?


46

더 나은 압축을 위해 Windows에서 가상 디스크의 여유 공간을 0으로 채우는 방법은 무엇입니까?

나는 그것을 위해 간단한 오픈 소스 도구 (또는 적어도 무료)를 원합니다. 아마도 가능한 큰 파일을 가득 채우고 0나중에 지워야합니다. 한 번만 통과합니다 (보안상의 이유가 아니라 압축을 위해 가상 머신을 백업 함).

디스크가 아닌 내부 창에서 실행해야합니다.

Linux에서는 다음과 같이 (사용자로) 수행합니다.

cd
mkdir wipe
sudo sfill -f -l -l -z ./wipe/

편집 1 : 허용 된 답변에서 sdelete 를 사용하기로 결정했습니다 . 나는 sdelete의 도움을 보았다.

C:\WINDOWS\system32>sdelete /?

SDelete - Secure Delete v1.51
Copyright (C) 1999-2005 Mark Russinovich
Sysinternals - www.sysinternals.com

usage: sdelete [-p passes] [-s] [-q] <file or directory>
       sdelete [-p passes] [-z|-c] [drive letter]
   -c         Zero free space (good for virtual disk optimization)
   -p passes  Specifies number of overwrite passes (default is 1)
   -q         Don't print errors (Quiet)
   -s         Recurse subdirectories
   -z         Clean free space

이것은 구 버전입니다. 두 번째 호출에서 -c 스위치를 사용했으며 이는 매우 빠릅니다 (구문은 V1.6 이전의 이전 버전에만 유효 함).

c:\>sdelete -c c: (OUTDATED!)

나는 이것이 내가 원하는 것을한다는 인상을 가지고 있습니다. sdelete 도구는 사용하기 쉽고 구하기 쉽습니다.

편집 2 : scottbb가 아래의 답변에서 지적했듯이 2011 년 9 월 도구가 변경되었습니다 (버전 1.6) -c 및 -z 옵션이 의미를 변경했습니다. 1.6 이후의 올바른 사용법은

c:\>sdelete -z c:

편집 3 : 2.0 버전의 sdelete 및 sdelete64가 있습니다. 제로화하면 버그가있는 것으로 보입니다. 매우 긴 시간 동안 100 %로 멈춘 것처럼 보입니다. 어떤 사람들은 10-40 배 더 오래보고했습니다. 이전 버전 1.61에는이 문제가 없습니다. https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils를 참조 하십시오.

편집 4 : 이제 동적으로 할당 된 가상 디스크 공간 문제가 있습니다. 100GB 디스크가 꽉 차지 않고 호스트에서 30GB 만 사용하는 경우 동적 할당의 목적에 위배되므로 디스크 크기를 크게 늘리지 않아야합니다 . Oracle VM VirtualBox https://superuser.com/q/907196/44402에 대한 답변이 있지만 VMWare, Xen, XenServer 등과 같은 다른 스택에서는 별도로 답변해야합니다.


2
sdelete이 작업에 적합한 도구이지만 2011 년 9 월 도구 (버전 1.6)를 변경하면 위의 답변이 잘못되었습니다. -c-z옵션은 변경된 의미를 갖습니다. 올바른 사용법은 다음과 같습니다sdelete -z c:\
scottbb

또한 동일한 기본 설치를 기반으로하는 시스템이 많은 경우 COW (Copy on Write) 스타일 이미지를 사용해야합니다.
Matt

답변:


46

Windows에서는 sysinternals 도구 sdelete 를 사용하여 모든 빈 공간을 제로화하십시오. 원하는 명령은 다음과 같습니다 sdelete -z c:.

사용법 : sdelete [-p 패스] [-s] [-q] ...  
sdelete [-p 패스] [-z | -c] [드라이브 문자] ...  
-a 읽기 전용 속성을 제거합니다.  
-c 여유 공간을 청소하십시오.  
-p pass 겹쳐 쓰기 패스 수를 지정합니다 (기본값은 1).  
-q 오류를 인쇄하지 않습니다 (Quiet).  
-s 또는 -r 하위 디렉토리를 반복합니다.  
-z 여유 공간이 없습니다 (가상 디스크 최적화에 적합 함).

Linux의 경우 zerofree 사용하는 것이 좋습니다 .


내 VHD를 압축하기 위해 여기에 왔습니다. TechNet의 .. 일부 관련 링크를 공유 technet.microsoft.com/en-us/library/cc708394%28v=ws.10%29.aspx technet.microsoft.com/en-us/library/cc708317(v=ws.10 ) .aspx
Faiz

제로 채우기가 Linux 표준 암호화 드라이브 LUKS dm-crypt 에 긍정적 인 영향을 미치는지 궁금 합니다. 전체 시스템을 clonezilla 부트 스틱으로 부팅하고 전체 드라이브의 물리적 백업을 수행 하기 전에 . — 암호화 내의 제로 섹션이 외부 디스크의 제로 섹션으로 이어 집니까? 아니면 보안상의 이유로 여전히 (할당되지 않은) 노이즈를 기록합니까? 아니면 원시 마운트 (암호화 된 내용을 보지 않음) 암호화 드라이브를 0으로 만들어야합니까? (그리고 암호화 된 드라이브와 관련하여 할당 테이블을 신뢰할 수 있다는 것이 좋은 생각입니까?)
Frank Nocke

null을 암호화하고 암호화 된 "노이즈"를 디스크에 쓰는 것 이외의 작업을 수행하면 충격을받습니다.
Dan Pritts

15

Windows에는 이미이를 수행하는 명령 줄 도구가 내장되어 있습니다 (CIPHER). / W 옵션을 참조하십시오.

따라서 전체 명령은 다음과 같습니다. cipher / w : c : ( c : 를 실제 드라이브 문자로 바꿉니다)

(사용하지 않는 공간에 0을 쓴 다음 0xff를 기록하므로 0xff를 쓰기 시작할 때 ctrl-c로 멈춰야합니다. 이상적이지는 않지만 XP 이후로는 Windows에서 무료로 사용할 수 있습니다.)


3
흥미로운 접근법. 모든 0을 취소하기 직전에 실행을 중단하십시오. 이미 존재하는 도구를 사용하여 창의적인 솔루션을 +1하십시오!
PsychoData

제로 쓰기가 끝났을 때이를 감지하여 중단시킬 수 있는지 궁금합니다.
Frederick Nord

SSD 하드 드라이브를 사용하는 경우 TRIM이 활성화되어 있는지 확인하십시오. 그런 다음 사용하지 않는 모든 블록은 하드 드라이브 펌웨어에 의해 0xFF 패턴으로 빠르게 지워집니다. 이것은 가상 서버가 만든 가상 디스크 이미지에서 매우 유용합니다. 이 이미지는 간격으로 채워지며 호스팅 파일 시스템에서 파일 시스템 블록을 해제합니다.
Znik

이것은 SDelete -z (다른 피드백을주지 않고 100 %로 붙어 있음)보다 훨씬 잘 작동했습니다.
psychowood

6

SDelete는 가상 디스크 압축 공간을 제로화하지 않습니다. SDelete는 사용 가능한 공간을 0으로 시작한 다음 0xff 및 임의의 바이트로 채 웁니다 . Virtual Server 2005 가상 하드 디스크 파일을 준비하여 Microsoft 기술 지원 서비스에 보낼 방법을 참조하십시오. 압축을 위해 VHD를 설정하는 방법은

어떤 이유로 Precompact.exe를 찾기 어려울 수 있습니다. 여기서 별도의 다운로드 가능한 사본을 찾았 습니다 . 그러나 Windows 가상 PC가있는 경우 % programfiles (x86) % \ Windows Virtual PC \ Integration Components \ Precompact.iso에서 가져올 수도 있습니다.


2
-c 옵션을 사용한 sdelete는 0으로 채워집니다. 아마도 당신은 제로 전용 옵션이없는 Windows 내장 암호 유틸리티를 생각하고 있습니까?
Jeremy M

"SDelete는 단순히 국방부에서 표준 DOD 5220.22-M을 지우고 살균하는 표준 문서를 구현합니다." sdelete -c (을 작성 후)의 여유 공간에서 제로를 수행, sdelete 용도가 미리 압축 등의 가상 드라이브에서 제로로 설계되었습니다 미리 압축보다 더 큰 드라이브에 발생합니다 많은 경우에 동일하지 않습니다하지만 방법
짐 B

이것은 다른 도구를 아는 것이 흥미 롭습니다. 감사합니다
mit

2
SDelete는 디스크를 0으로 남겨 둘 수 있지만 사전 압축은 훨씬 빠르게 작동하며 이러한 상황에 적합합니다.
Chris S

2
@romkyns 더 이상 모든 최신 버전의 Windows 및 Hyper-V 지원 trim(Win7 및 Hyper-V 2012 기준)이므로 압축하기 전에 0을 지정할 필요가 없습니다. PreCompact 유틸리티는 삭제 된 파일이있는 디스크의 0 부분 만 사용했습니다. 같은 sdelete것을 사용하면 동적 디스크를 정적 크기로 채우고 실제로 사용 된 크기로 다시 압축 할 수 있습니다.
Chris S

6

fsutil오픈 소스는 아니지만 Windows와 함께 제공되므로 추가 비용이 들지 않습니다. 빈 WD 250GB 7200 RPM 드라이브의 여유 공간을 0으로 만드는 데 사용했습니다 ( F:). 명령 줄에서 실행 한 내용은 다음과 같습니다.

fsutil volume diskfree f:

이 보고서를 보여준

Total # of free bytes        : 249899469856
Total # of bytes             : 249997291520
Total # of avail free bytes  : 249899469856

Total # of avail free bytes다음 명령에 사용 했습니다.

fsutil file createnew F:\clear 249899469856
fsutil file setvaliddata F:\clear 249899469856
fsutil file setzerodata offset=0 length=249899469856 F:\clear
del f:\clear

250GB의 0을 쓰는 데 약 4 시간이 걸렸습니다.


3

나도 Cipher를 사용하여 0x00 만 쓰는 방법을 찾고 있었고 여유 공간에 0xFF 쓰기를 시작할 때 종료했습니다. 이를 통해 최대 여유 공간을 압축 할 수 있습니다. 다음과 같은 기본 PowerShell 작업을 생각해 냈습니다.

d : \를 필요한 드라이브로 교체하십시오.

Function CipherFreeSpace
{
    $cipherjob = @()
    $Job = start-job -ScriptBlock {cipher /w:d:\ }
    while ($cipherjob -notcontains "Writing 0xFF")
    {
        Write-host "." -nonewline 
        Start-Sleep 2
        $cipherjob += $job | Receive-Job 
    }
    $Job | Stop-Job | Remove-Job -Force
}
CipherFreeSpace

사이먼


1

VMware를 사용하는 경우 VMware에 내장 된 도구를 사용하여 가상 드라이브에서 사용하지 않는 공간을 회수하는 것이 훨씬 더 좋습니다.

나는 이것을 사용하여 가상 디스크의 크기를 28 기가 바이트에서 13 기가 바이트로 줄였습니다. 귀하의 마일리지가 다를 수 있습니다.

를 사용해 보았을 때 sdelete -z c:실제로 가상 드라이브의 크기가 최대 크기 인 30GB로 증가 했습니다.

VM웨어 웹 사이트를 참조하십시오 가상 하드 디스크으로 압축 을 받고있다, Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

최신 정보

때때로 GUI 도구는 명령 줄 도구만큼 신뢰할 수 없습니다. GUI 도구가 실패하는 문제가 발생했지만 명령 줄 도구는 제대로 작동합니다. 옵션은 다음과 같습니다 VMware Desktop 10.

C:\Program Files (x86)\VMware\VMware Workstation>vmware-vdiskmanager -h
Diskname or some other argument is missing.
VMware Virtual Disk Manager - build 1895310.
Usage: vmware-vdiskmanager.exe OPTIONS <disk-name> | <mount-point>
Offline disk manipulation utility
  Operations, only one may be specified at a time:
     -c                   : create disk.  Additional creation options must
                            be specified.  Only local virtual disks can be
                            created.
     -d                   : defragment the specified virtual disk. Only
                            local virtual disks may be defragmented.
     -k                   : shrink the specified virtual disk. Only local
                            virtual disks may be shrunk.
     -n <source-disk>     : rename the specified virtual disk; need to
                            specify destination disk-name. Only local virtual
                            disks may be renamed.
     -p                   : prepare the mounted virtual disk specified by
                            the mount point for shrinking.
     -r <source-disk>     : convert the specified disk; need to specify
                            destination disk-type.  For local destination disks
                            the disk type must be specified.
     -x <new-capacity>    : expand the disk to the specified capacity. Only
                            local virtual disks may be expanded.
     -R                   : check a sparse virtual disk for consistency and attempt
                            to repair any errors.
     -e                   : check for disk chain consistency.
     -D                   : make disk deletable.  This should only be used on disks
                            that have been copied from another product.

다음은 디스크 축소의 예입니다. 이 명령 행은 GUI의 동일한 명령이 실패하더라도 작동했습니다.

C:\Program Files (x86)\VMware\VMware Workstation>vmware-vdiskmanager.exe -k
 "H:\VMware\WindowsXP.vmdk"
  VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
  Shrink: 100% done.

로 시작하는 오류 메시지 VizDiskLib는 VMware Desktop 10에 새로 도입되었으며 무시해도됩니다.


1
sdelete 자체는 vmdk 크기를 축소하기위한 것이 아닙니다. 축소 작업을 위해 사용 가능한 모든 여유 공간을 사전에 0으로 전환하는 데 사용됩니다. 이 작업을 수행하지 않으면 삭제 된 파일 및 기타 고아 데이터가 디스크에 계속 존재합니다. VMWare 도구가 해당 파일이 여전히 차지하는 디스크 공간을 항상 회수 할 수있는 것은 아닙니다. 이러한 "삭제 된 파일"을 0으로 바꾸면 축소 도구를 실행할 때 디스크 공간을 완전히 회수 할 수 있습니다. 가상 디스크에서 파일 크기가 증가한 이유는 sdelete가 사용 가능한 모든 공간을 0으로 채우기 때문입니다.
레온 루카 디

이것을 명확히 해 주셔서 감사합니다. 도구가 더 나은 이름 지정 및 / 또는 도구를 실행할 때 도구가 수행하는 작업에 대한 한 줄 설명으로 혜택을 얻을 수 있다고 생각합니다.
Contango


-1

미트,

Simon의 powershell 스크립트가 sdelete의 버전 관리 문제없이 필요한 것을 정확하게 수행한다는 것을 알았습니다. (다른 버전에서 다른 일을하는 스위치)

암호가 계속 실행되는 문제가 있었지만 문제를 해결했습니다.

임시 폴더를 정리하기 위해 스크립트를 추가로 수정했습니다.

두 위치에서 F : \를 드라이브 문자로 바꿔야합니다.

Function CipherFreeSpace
{
    $cipherjob = @()
    $Job = start-job -ScriptBlock {cipher /w:F:\ }
    while ($cipherjob -notcontains "Writing 0xFF")
    {
        Write-host "." -nonewline 
        Start-Sleep 2
        $cipherjob += $job | Receive-Job 
    }
    Stop-Process -processname cipher
    Start-Sleep -s 3
    Remove-Item -recurse F:\EFSTMPWP
    $Job | Stop-Job | Remove-Job -Force
}
CipherFreeSpace

-4

Windows에 이미 필요한 모든 것이 포함되어있을 때 타사 도구가 "무료"로 빠른 이유는 무엇입니까?

1) 드라이브 문자는 format X: /fs:XXXX /p:#어디에 있습니까 X? XXXX파일 시스템이며 둘 다 #패스 수입니다.

2) diskpart clean명령 : http://technet.microsoft.com/library/cc766465.aspx , http://support.microsoft.com/kb/300415 ;

Btw, 당신은 하나 이상의 패스를 필요로하지 않습니다-그렇지 않으면 주장은 오래된 디스크 레드 / 쓰기 전략에 대한 오래된 정보, 제품을 밀고있는 사람들, 편집증을 주도하거나 bs가 "전문가 조언"으로 전달 된 것입니다.

편집 : nvm, 여유 공간이 누락되었습니다 ...


1
대부분의 경우 좋은 작업이나 더 나은 작업을 수행하거나 설치가 쉽고 안정적인 타사 도구가 있습니다. 그러나 이것은 전적으로 구약이며, 누가 그것을 쓰느냐에 관한 문제는 아닙니다. 이 외에도 Microsoft는 Sysinternals (SSDelete를 작성한 사람)에게 내장 물건보다 광년이 더 좋았 기 때문에 물었습니다. 불꽃 전을 시작하기 위해 ProcessExplorer와 MS 제품 "TaskManager"-1을 비교해보십시오
Alojz Janez

질문에서 "오픈 소스"요구 사항을 놓쳤습니까?
Alojz Janez
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.