Daha iyi sıkıştırma için sanal diskin boş alanlarını Windows'ta nasıl doldurabilirsiniz?


46

Daha iyi sıkıştırma için sanal diskin boş alanlarını Windows'ta nasıl doldurabilirsiniz?

Bunun için basit bir açık kaynak aracı (veya en azından ücretsiz) istiyorum. Muhtemelen dolu bir dosya kadar büyük bir dosya yazmalı 0ve daha sonra silmelidir. Yalnızca bir geçiş (bu güvenlik nedeniyle değil, sıkıştırma için sanal makineleri yedeklemekteyiz).

Bir diskten değil, pencerelerin içinden çalışmalıdır.

Linux'ta bunu şöyle yapıyorum (kullanıcı olarak):

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

Düzenleme 1: Kabul edilen cevaptan sdelete kullanmaya karar verdim . Sdelete'nin yardımına bir göz attım:

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

Bu eski bir versiyondur. 2. çağrıdan -c anahtarını kullandım ve bu oldukça hızlıydı (sözdizimi yalnızca V1.6'dan önceki eski sürümler için geçerlidir):

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

İstediğimi yapan izlenimi edindim. Sdelete aracı kullanımı kolay ve elde etmek kolaydır.

Düzenleme 2: scottbb aşağıdaki cevabında işaret ettiği gibi, araçta Eylül 2011 değişikliği oldu (sürüm 1.6) -c ve -z seçenekleri anlam değiştirdi. 1.6'dan itibaren doğru kullanım

c:\>sdelete -z c:

Düzenleme 3: Sdelete ve sdelete64'ün 2.0 sürümü var. Sıfırlarken buggy gibi görünüyorlar. Son derece uzun süre% 100 oranında sıkışmış gibi görünecektir. Bazı insanlar 10 - 40 kat daha uzun zamandır rapor etmişlerdir. Eski sürüm 1.61 bu sorunu yok. Bkz https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Düzen 4: Şimdi dinamik olarak ayrılmış sanal disk alanı sorunu var . Tam olmayan ve ana bilgisayarda yalnızca 30 GB kullanan 100 GB'lık bir diskiniz varsa, sıfır doldurma , diskin boyutunu önemli ölçüde artırmamalıdır, çünkü bu dinamik ayırma amacına aykırıdır . Oracle VM VirtualBox Https://superuser.com/q/907196/44402 için bir cevap var - ancak VMWare, Xen, XenServer vb. Gibi diğer yığınlarda da ayrı ayrı yanıtlanması gerekiyor.


2
sdeleteiş için doğru araçtır, ancak Eylül 2011'de yapılan bir değişiklik (sürüm 1.6) yukarıdaki cevapları yanlış yapar. -cVe -zseçenekleri değiştirilen anlamlara sahiptir. Doğru kullanım şimdisdelete -z c:\
scottbb

Aynı temel kuruluma dayanan çok sayıda makineniz varsa, COW (Yazma Üzerine Kopyala) tarzı görüntüler kullandığınızdan emin olun.
Matt

Yanıtlar:


46

Pencerelerde, tüm boş alanları sıfırlamak için sysinternals aracını sdelete kullanın. İstediğiniz komut böyle gözükürdü sdelete -z c:.

Kullanımı: sdelete [-p geçer] [-s] [-q] ...  
sdelete [-p geçer] [-z | -c] [sürücü harfi] ...  
-a Salt Okunur özniteliğini kaldırın.  
-c Temiz boş alan.  
-p geçişleri Üzerine yazma geçişlerinin sayısını belirtir (varsayılan 1'dir).  
-q Hataları basmayın (Sessiz).  
-s veya -r Yinelenen alt dizinleri.  
-Z Sıfır boş alan (sanal disk optimizasyonu için iyi).

Linux için sıfır ücretsiz kullanmanızı öneririm .


VHD'lerimi sıkıştırmak için buraya geldim. TechNet'ten bazı ilgili bağlantıları paylaşma technet.microsoft.com/en-us/library/cc708394%28v=ws.10%29.aspx technet.microsoft.com/en-us/library/cc708317(v=ws.10 ) .aspx
Faiz

Sıfır doldurmanın Linux standart şifreli bir sürücü LUKS dm-crypt üzerinde olumlu bir etkisi olur mu merak ediyorum . önce tüm makineyi bir klonez önyükleme çubuğundan başlatmaya ve tüm sürücünün fiziksel yedeğine maruz bırakmadan önce. - Şifreleme içindeki sıfırlanmış bölüm dış diskte sıfırlanmış bölüme yol açar mı? Yoksa güvenlik nedenleriyle hala (tahsis edilmemiş) gürültü mi yazacak? Yoksa çiğ monteli (şifreli içeriğe bakmadan) crypt sürücüsünü sıfırlamalı mıyım? (Bu iyi bir fikir, yani tahsisat masası şifreli bir sürücü bağlamında güvenilir midir?)
Frank Nocke

Boşlukları şifrelemek ve şifreli "paraziti" diske yazmaktan başka bir şey yapsaydı şok olurdum.
Dan Pritts,

15

Windows zaten bunu yapan yerleşik bir komut satırı aracına sahiptir: CIPHER. / W seçeneğine bakınız.

Böylece, komutun tamamı şöyle olacaktır: cipher / w: c: ( c: yerine gerçek sürücü harfi)

(kullanılmayan alana sıfırlar yazar, sonra 0xff, bu yüzden onu izlemeniz ve 0xff yazmaya başladığında ctrl-c ile durdurmanız gerekir - ideal değil, ancak Windows'ta en azından XP'den beri kullanılabilir.


3
ilginç yaklaşım. Tüm sıfırları geri almaya başlamadan hemen önce yürütmeyi durdurun. Zaten orada olan araçları kullanarak yaratıcı bir çözüm için +1!
PsychoData

Sıfırları yazmanın ne zaman biteceğini tespit edip sonra iptal etmek mümkün mü acaba ...
Frederick Nord

SSD sabit sürücü kullanıyorsanız, TRIM’in etkin olduğunu kontrol edin. Daha sonra kullanılmayan tüm blok, 0xFF deseniyle sabit disk bellenimi tarafından hızlı bir şekilde silinir. Bu, sanal sunucular tarafından yapılan sanal disk görüntülerinde çok kullanışlıdır. Bu görüntüler boşluk olarak doldurulacak ve dosya sistemi barındıran dosya sistemi bloklarını serbest bırakacak.
Znik

Bu, SDelete -z'den çok daha hızlı ve daha hızlı çalıştı (başka herhangi bir geri bildirim vermeden% 100'de kaldı).
psychowood

6

SDelete, sanal bir diskin sıkıştırılması için gereken alanı sıfırlamaz. SDelete boş alan sıfırlama tarafından başlar, ancak daha sonra 0xff ile doldurur ve sonra rasgele byte bakın , Microsoft Ürün Destek Hizmetleri'ne göndermek için bir Virtual Server 2005 sanal sabit disk dosyası nasıl hazırlanır sıkıştırma için bir VHD nasıl kurulacağı için

Precompact.exe nedense bulmak zor olabilir. Burada ayrı bir indirilebilir kopya buldum . Ancak Windows sanal bilgisayarınız varsa, onu% programfiles (x86)% \ Windows Virtual PC \ Integration Components \ Precompact.iso


2
-c seçeneği ile sdelete sıfır bir dolgudur. Belki de sadece sıfır seçeneğine sahip olmayan Windows dahili şifre yardımcı programını düşünüyorsunuz?
Jeremy M,

“SDelete, yalnızca bir kümeyi yalnızca 0 olmayan, DOD 5220.22-M standardını (dokümanlardaki) standart DOD 5220.22-M’nin temizlenmesi ve dezenfekte etmesi için uygular. sdelete -c boş alanı sıfırlar (doldurduktan sonra), ancak sdelete'nin kullandığı yöntem ön sıkıştırma ile aynı değildir ve çoğu durumda sanal sürücüleri sıfırlamak için tasarlanmış ön sıkıştırmadan daha büyük bir sürücü ortaya çıkarır
Jim B

Bu, başka bir aracı bilmek ilginçtir. Thank you
mit

2
SDelete, diski 0'larla bırakabilir, ancak ön sıkıştırma çok daha hızlı çalışır ve bu tür durumlar için düşünülmüştür.
Chris S

2
@romkyns Artık Windows ve Hyper-V'nin tüm modern versiyonlarının trim(Win7 ve Hyper-V 2012'den itibaren) desteklemesi artık önemli değil, sıkıştırmadan önce sıfıra gerek yok. PreCompact yardımcı programı, yalnızca silinmiş dosyaları olan diskin bölümlerini sıfırladı, hiç kullanılmamış olan bölüme dokunulmazdı. Gibi bir şey kullanmak sdelete, dinamik diski statik boyuta kadar dolduracak ve daha sonra gerçekte kullanılan boyuta geri sıkıştırılacaktı.
Chris S

6

fsutilaçık kaynak değildir, ancak Windows ile birlikte gelir ve bu nedenle fazladan bir ücrete tabi değildir. Boş bir WD 250 GB 7200 RPM sürücüdeki ( F:) boş alanı sıfırlamak için kullandım . İşte komut satırından koştuğum şey:

fsutil volume diskfree f:

Bu raporu gösterenler:

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

Kullandığım Total # of avail free bytesaşağıdaki komutları:

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'lık sıfır yazmak yaklaşık 4 saat sürdü.


3

Ben de sadece 0x00 yazmak için Cipher kullanmanın ve boş alana 0xFF yazmaya başladığınızda çıkmanın bir yolunu arıyordum. Bu, maksimum boş alanın sıkıştırılmasını sağlar. Aşağıdaki temel PowerShell işini buldum

d: \ yerine gerekli sürücüyü koyun

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

Saygılarımızla Simon


1

VMware kullanıyorsanız, sanal sürücüde kullanılmayan herhangi bir alanı geri kazanmak için VMware'de yerleşik araçları kullanmak daha iyi bir yoldur.

Bunu sanal diskin boyutunu 28 gigabayttan 13 gigabayta düşürmek için kullandım. Kilometreniz değişebilir.

Kullandığım çalıştığında sdelete -z c:, aslında arttı maksimum boyutu olan, 30 gigabayt için sanal sürücü boyutunu.

VMware web sitesine bakın ve bir Sanal Sabit Disk Kompakt altındadır, Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Güncelleme

Bazen, GUI araçları komut satırı araçları kadar güvenilir olmayabilir. GUI araçlarının başarısız olduğu sorunlara rastladım, ancak komut satırı araçları gayet iyi çalışıyor. Seçenekler şunlardır 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.

İşte bir diski küçültmenin bir örneği. Bu komut satırı, GUI’deki başarısız aynı komutla sonuçlanmasına rağmen çalıştı:

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.

İle başlayan hata mesajı VizDiskLibVMware Desktop 10'a yeni geldi ve güvenle göz ardı edilebilir.


1
sdelete'nin kendisi vmdk boyutunu küçültmek değildir. Shrink işlemi için hazırlanırken mevcut tüm boş alanları sıfıra dönüştürmek için kullanılır. Bunu yapmazsanız, silinen dosyalar ve diğer artık veriler diskte bulunmaya devam eder. VMWare araçları her zaman bu dosyalar tarafından kullanılan hala disk alanını geri kazanamayacaktır. Bu "silinen dosyaları" sıfıra çevirmek, küçültme aracını çalıştırdığınızda disk alanını yeniden doldurulabilir hale getirir. Sanal diskte dosya boyutunda bir artış görmenin nedeni, sdelete'nin sahip olduğu tüm kullanılabilir alanları sıfırlarla doldurmasıdır.
Leon Lucardie

Bunu açıkladığın için teşekkürler. Takımların, daha iyi bir adlandırmadan ve / veya aracı çalıştırdığınızda ne yaptığının tek satırlık bir tanımından faydalanabileceğini düşünün.
Contango


-1

mit,

Simon'ın powershell betiğinin, sdelete'nin sürüm problemleri olmadan tam olarak ihtiyacınız olanı yaptığını buldum. (farklı sürümlerde farklı şeyler yapan anahtarlar)

Bir sorunu vardı, şifre kaçmaya devam etti, ama ben bunu düzelttim.

Temp klasörünü temizlemek için betiği daha da değiştirdim:

Her iki yerde de F: \ harfini sürücü harfinizle değiştirmeniz gerekecektir.

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

Neden Windows zaten ihtiyaç duyacağınız her şeyi içerdiğinde, "özgür" ve ne kadar hızlı olursa olsun, üçüncü taraf araçlar neden:

1) format X: /fs:XXXX /p:#, Xsürücü harfi nerede ; XXXXdosya sistemi, Ye ve #geçiş sayısıdır;

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

Ancak, tek bir geçişten de fazlasına ihtiyacınız yok - aksi halde iddia, eski disk kırmızı / yazma stratejileri, ürünleri iten insanlar, paranoya süren ya da "uzman tavsiyesi" olarak geçen bs için eski bilgilerdir.

Düzenleme: nvm, boş alan kısmını kaçırdı ...


1
Çoğu durumda, iyi veya daha iyi işler yapan, kurulumu daha kolay veya daha güvenilir olan üçüncü taraf araçları vardır. Ama bu tamamen OT, soru kimin yazdığı ile ilgili değildi. Bunun dışında Microsoft'un satın aldığı Sysinternals (SSDelete'yi yazdı), çünkü onlar yerleşik malzemeden daha hafif yaşlardalardı. Sadece bir Flamewar başlatmak için ProcessExplorer'ı MS ürünü "TaskManager" -1 ile karşılaştırın
Alojz Janez

Soruda "açık kaynak" gereksinimini kaçırdınız, değil mi?
Alojz Janez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.