Bagaimana nol mengisi ruang kosong disk virtual di windows untuk kompresi yang lebih baik?

46

Bagaimana nol mengisi ruang kosong disk virtual di windows untuk kompresi yang lebih baik?

Saya ingin alat open source sederhana (atau setidaknya gratis) untuk itu. Mungkin harus menulis file sebesar mungkin penuh 0dan menghapusnya setelah itu. Hanya satu pass (ini bukan karena alasan keamanan tetapi untuk kompresi, kami membuat cadangan mesin virtual).

Harus dijalankan dari dalam windows dan bukan dari disk.

Di Linux saya melakukannya seperti ini (sebagai pengguna):

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

Sunting 1: Saya memutuskan untuk menggunakan sdelete dari jawaban yang diterima. Saya telah melihat bantuan 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

Ini adalah versi lama. Saya menggunakan saklar -c dari doa ke-2 dan ini cukup cepat (sintaks hanya berlaku untuk versi yang lebih lama sebelum V1.6):

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

Saya mendapat kesan ini melakukan apa yang saya inginkan. Alat sdelete mudah digunakan dan mudah didapat.

Sunting 2: Seperti yang ditunjukkan scottbb dalam jawabannya di bawah, ada perubahan September 2011 pada alat (versi 1.6) Opsi -c dan -z telah mengubah makna. Penggunaan yang benar dari 1,6 dan seterusnya adalah

c:\>sdelete -z c:

Sunting 3: Ada versi 2.0 dari sdelete dan sdelete64. Mereka tampak buggy saat memusatkan perhatian. Tampaknya akan macet 100% untuk waktu yang sangat lama. Beberapa orang telah melaporkan 10 - 40 kali lebih lama. Versi yang lebih lama 1.61 tidak memiliki masalah ini. Lihat https://social.technet.microsoft.com/Forums/en-US/2ffb2539-34ba-4378-aa8a-941d243f117e/sdelete-hangs-at-100?forum=miscutils

Sunting 4: Sekarang ada masalah ruang disk virtual yang dialokasikan secara dinamis . Jika Anda memiliki disk 100GB yang tidak penuh dan hanya menggunakan 30GB pada host, nol pengisian tidak boleh meningkatkan ukuran disk secara dramatis karena itu bertentangan dengan tujuan alokasi dinamis . Ada jawaban untuk Oracle VM VirtualBox https://superuser.com/q/907196/44402 - tetapi pada tumpukan lain seperti VMWare, Xen, XenServer, dll., Ini perlu dijawab secara terpisah.

mit
sumber
2
sdeleteadalah alat yang tepat untuk pekerjaan itu, tetapi perubahan September 2011 ke alat (versi 1.6) membuat jawaban di atas salah. The -cdan -zpilihan memiliki makna berubah. Penggunaan yang benar sekarang adalahsdelete -z c:\
scottbb
Pastikan juga Anda menggunakan gambar gaya COW (Copy on Write) jika Anda memiliki banyak mesin berdasarkan instalasi dasar yang sama.
Matt

Jawaban:

46

Pada windows gunakan alat sysinternals sdelete untuk menghapus semua ruang kosong. Perintah yang Anda inginkan akan terlihat seperti ini sdelete -z c:.

Penggunaan: sdelete [-p pass] [-s] [-q] ...  
sdelete [-p lewat] [-z | -c] [huruf drive] ...  
-Sebuah atribut Read-Only.  
-c Bersihkan ruang kosong.  
-p pass Menentukan jumlah overwrite pass (standarnya adalah 1).  
-q Jangan mencetak kesalahan (Diam).  
subdirektori -s atau -r Recurse.  
-z Nol ruang kosong (bagus untuk optimasi disk virtual).

Untuk Linux saya sarankan Anda menggunakan zerofree .

Sakit kepala
sumber
Datang ke sini untuk memadatkan VHD saya. Berbagi beberapa link terkait dari 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
Saya bertanya-tanya, apakah pengisian nol akan berdampak positif pada drive terenkripsi standar Linux LUKS dm-crypt . sebelum saya membuat seluruh mesin melakukan booting dari bootstick clonezilla dan cadangan fisik seluruh drive. - Apakah bagian yang memusatkan perhatian pada enkripsi akan mengarah ke bagian yang kosong pada disk luar? Atau apakah masih akan menulis (tidak terisi) kebisingan untuk alasan keamanan? Atau haruskah saya nol drive crypt mentah-mount (tidak melihat konten terenkripsi)? (Dan apakah itu ide yang bagus yaitu apakah tabel alokasi dapat dipercaya dalam konteks drive crypted?)
Frank Nocke
Saya akan terkejut jika itu melakukan apa pun selain mengenkripsi nol dan menulis "suara" terenkripsi ke disk.
Dan Pritts
15

Windows sudah memiliki alat baris perintah bawaan yang melakukan ini: CIPHER. Lihat opsi / W.

Jadi perintah lengkapnya adalah: cipher / w: c: (ganti c: dengan huruf drive yang sebenarnya)

(ia menulis nol ke ruang yang tidak digunakan, lalu 0xff, jadi Anda harus menontonnya dan menghentikannya dengan ctrl-c ketika mulai menulis 0xff - tidak ideal, tetapi gratis dan sudah tersedia di Windows sejak XP setidaknya)

David Balažic
sumber
3
pendekatan yang menarik. Hentikan eksekusi sesaat sebelum mulai membatalkan semua nol. +1 untuk solusi kreatif menggunakan alat yang sudah ada di sana!
PsychoData
Saya bertanya-tanya apakah mungkin untuk mendeteksi ketika sudah selesai menulis nol dan kemudian membatalkan ...
Frederick Nord
Jika Anda menggunakan hard drive SSD, periksa apakah Anda telah mengaktifkan TRIM. Maka semua blok yang tidak terpakai akan dengan cepat dihilangkan dengan pola 0xFF oleh firmware hard drive. Ini sangat dapat digunakan pada gambar disk virtual yang dibuat oleh server virtual. Gambar-gambar itu akan diisi sebagai celah, dan akan membebaskan blok sistem file pada sistem file hosting.
Znik
Ini bekerja sangat baik dan jauh lebih cepat daripada SDelete -z (yang macet 100% tanpa memberikan umpan balik lain).
psychowood
6

SDelete tidak akan nol ruang untuk pemadatan disk virtual. SDelete dimulai dengan memberi nol pada ruang kosong, tetapi kemudian mengisinya dengan 0xff dan kemudian byte acak Lihat Cara menyiapkan file hard disk virtual Server 2005 untuk dikirim ke Layanan Dukungan Produk Microsoft Untuk cara mengatur VHD untuk pemadatan

Precompact.exe bisa sulit ditemukan karena alasan tertentu. Saya menemukan salinan yang dapat diunduh terpisah di sini . Namun jika Anda memiliki PC virtual windows Anda juga bisa mendapatkannya dari% programfiles (x86)% \ Windows Virtual PC \ Komponen Integrasi \ Precompact.iso

Jim B
sumber
2
sdelete dengan opsi -c adalah isian nol. Mungkin Anda memikirkan utilitas cipher bawaan Windows yang tidak memiliki opsi nol saja?
Jeremy M
"SDelete mengimplementasikan Departemen Pertahanan membersihkan dan membersihkan standar DOD 5220.22-M" (dari dokumen) yang secara khusus tidak hanya 0 keluar cluster. sdelete -c tidak nol ruang kosong (setelah mengisinya), namun metode yang digunakan sdelete tidak sama dengan precompact dan dalam banyak kasus akan menghasilkan drive yang lebih besar daripada precompact, yang dirancang untuk nol drive virtual
Jim B
Ini menarik untuk mengetahui alat lain. Terima kasih
mit
2
SDelete dapat meninggalkan disk dengan 0s, tetapi precompact bekerja lebih cepat dan dimaksudkan untuk situasi seperti ini.
Chris S
2
@romkyns Tidak masalah lagi karena semua versi Windows modern dan dukungan Hyper-V trim(pada Win7 dan Hyper-V 2012), tidak perlu nol sebelum dipadatkan. Utilitas PreCompact hanya memusatkan perhatian pada disk dengan file yang dihapus, bagian yang belum pernah digunakan tidak tersentuh. Menggunakan sesuatu seperti sdeleteakan mengisi disk dinamis ke ukuran statis, yang kemudian dapat dipadatkan kembali ke hanya ukuran yang benar-benar digunakan.
Chris S
6

fsutilbukan open source, tetapi tidak dikirim dengan Windows dan karena itu tidak ada biaya tambahan. Saya menggunakannya untuk nol ruang kosong pada drive WD 250 GB 7200 RPM kosong ( F:). Inilah yang saya lari dari baris perintah:

fsutil volume diskfree f:

Yang menunjukkan laporan ini:

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

Saya menggunakan Total # of avail free bytesperintah berikut:

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

Butuh sekitar 4 jam untuk menulis 250GB nol.

James L.
sumber
3

Saya juga telah mencari cara menggunakan Cipher untuk hanya menulis 0x00 kemudian keluar ketika mulai menulis 0xFF ke ruang kosong. Ini akan memungkinkan ruang kosong maksimum dikompresi. Saya telah datang dengan pekerjaan PowerShell dasar berikut

ganti d: \ dengan drive yang diperlukan

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

Salam Simon

Simon Stevenson
sumber
1

Jika Anda menggunakan VMware, cara yang jauh lebih baik adalah dengan menggunakan alat yang dibangun dalam VMware untuk mendapatkan kembali ruang yang tidak terpakai pada drive virtual.

Saya menggunakan ini untuk mengurangi ukuran disk virtual dari 28 gigabyte menjadi 13 gigabytes. Jarak tempuh Anda mungkin beragam.

Ketika saya mencoba menggunakan sdelete -z c:, itu sebenarnya meningkatkan ukuran drive virtual hingga 30 gigabytes, yang merupakan ukuran maksimumnya.

Lihat situs web VMware dan Compact a Virtual Hard Disk , yang ada di bawah Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Memperbarui

Terkadang, alat GUI tidak cukup dapat diandalkan seperti alat baris perintah. Saya telah mengalami masalah di mana alat GUI gagal, tetapi alat baris perintah berfungsi dengan baik. Berikut adalah opsi untuk 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.

Berikut adalah contoh menyusutkan disk. Baris perintah ini berfungsi, meskipun ada perintah yang sama dari GUI yang gagal:

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.

Pesan kesalahan yang dimulai dengan VizDiskLibbaru untuk VMware Desktop 10 dan dapat diabaikan dengan aman.

Contango
sumber
1
sdelete itu sendiri tidak dimaksudkan untuk mengecilkan ukuran vmdk. Ini digunakan untuk mengubah semua ruang kosong yang tersedia menjadi nol sebagai persiapan operasi menyusut. Jika Anda tidak melakukan ini, file yang dihapus dan data yatim lainnya akan tetap ada di disk. Alat VMWare tidak akan selalu bisa mendapatkan kembali ruang disk yang masih ditempati oleh file-file itu. Mengubah "file yang dihapus" ini menjadi nol membuat ruang disk sepenuhnya dapat direklamasi ketika Anda menjalankan alat menyusut. Alasan Anda melihat peningkatan ukuran file pada disk virtual adalah karena sdelete mengisi semua ruang yang tersedia dengan nol.
Leon Lucardie
Terima kasih telah menjelaskan ini. Berpikir bahwa alat dapat mengambil manfaat dari penamaan yang lebih baik dan / atau deskripsi satu baris tentang apa yang dilakukan alat ketika Anda menjalankannya.
Contango
-1

Mit,

Saya menemukan bahwa skrip PowerShell Simon melakukan apa yang Anda butuhkan, tanpa masalah versi sdelete. (switch melakukan hal yang berbeda di versi yang berbeda)

Ada satu masalah, sandi itu terus berjalan, tetapi saya memperbaikinya.

Saya selanjutnya memodifikasi skrip untuk membersihkan folder temp:

Anda harus mengganti F: \ dengan huruf drive di kedua tempat.

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
Preston Shirmeyer
sumber
-4

Mengapa alat pihak ketiga, ketika Windows sudah memasukkan semua yang Anda butuhkan, untuk "gratis" dan secepat mungkin:

1) format X: /fs:XXXX /p:#, di mana Xhuruf drive; XXXXadalah sistem file, Yeither dan #jumlah operan;

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

Btw, Anda tidak perlu lebih dari satu pass, baik - klaim sebaliknya adalah info usang untuk strategi disk merah / tulis usang, orang mendorong produk, didorong paranoia, atau bs diteruskan sebagai "saran ahli".

Edit: nvm, ketinggalan bagian ruang bebas ...

pengguna180961
sumber
1
Dalam banyak kasus ada alat pihak ketiga yang tersedia yang melakukan pekerjaan dengan baik atau lebih baik, lebih mudah untuk menginstal atau lebih dapat diandalkan. Tapi ini benar-benar PL, pertanyaannya bukan tentang siapa yang menulisnya. Terlepas dari ini Microsoft memperoleh Sysinternals (yang menulis SSDelete) karena mereka lebih ringan daripada barang bawaan. Bandingkan saja ProcessExplorer dengan produk MS "TaskManager" -1 untuk memulai flamewar
Alojz Janez
Anda melewatkan persyaratan "sumber terbuka" dalam pertanyaan, bukan?
Alojz Janez