Як нуль заповнити вільний диск віртуального диска на Windows для кращого стиснення?


46

Як нуль заповнити вільний диск віртуального диска на Windows для кращого стиснення?

Я хотів би простий інструмент з відкритим кодом (або принаймні безкоштовний) для цього. Ймовірно, він повинен написати якомога більший повний файл 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 року (версія 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: Тепер з'явилася проблема динамічно виділеного віртуального дискового простору . Якщо у вас розміщений диск не є заповненим на 100 ГБ, а на хості використовується лише 30 ГБ, нульове наповнення не повинно різко збільшити розмір диска, оскільки це суперечить меті динамічного розподілу . Є відповідь на Oracle VM VirtualBox https://superuser.com/q/907196/44402 - але на інших стеках, таких як VMWare, Xen, XenServer тощо, на це потрібно відповісти окремо.


2
sdeleteє правильним інструментом для роботи, але зміна інструменту на вересень 2011 року (версія 1.6) робить наведені відповіді невірними. Параметри -cта -zпараметри змінили значення. Правильне використання заразsdelete -z c:\
scottbb

Також переконайтеся, що ви використовуєте зображення стилю COW (Copy on Write), якщо у вас багато машин, що базуються на одній і тій же базовій установці.
Метт

Відповіді:


46

У Windows використовуйте інструмент sysinternals sdelete, щоб нульовий простір викреслити. Команда, яку ви хочете, виглядала б так sdelete -z c:.

Використання: sdelete [-p переходи] [-s] [-q] ...  
sdelete [-p проходить] [-z | -c] [літера диска] ...  
-видалити атрибут "Лише для читання"  
-c Очистіть вільний простір.  
-p передає Вказує кількість перезаписів (за замовчуванням - 1).  
-q Не друкуйте помилки (тихо).  
-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 та фізичного резервного копіювання всього накопичувача. - Чи приведе нульовий розділ у шифруванні до нульового розділу на зовнішньому диску? Або все одно буде писати (нерозподілений) шум з міркувань безпеки? Або я повинен нульову криптовалюту (не дивлячись на зашифрований вміст) криптовалюту? (І це гарна ідея, тобто достовірність таблиці розподілу в контексті зашифрованого диска?)
Френк Нокк

Я був би шокований, якби це зробило щось інше, ніж зашифрувати нулі і записати зашифрований "шум" на диск.
Dan Pritts

15

У Windows вже є вбудований інструмент командного рядка, який робить це: CIPHER. Дивіться його / W варіант.

Таким чином, повна команда буде: cipher / w: c: (замінити c: фактичною літерою диска)

(він записує нулі у невикористаний простір, потім 0xff, тому вам доведеться спостерігати за цим і зупиняти його на ctrl-c, коли він починає писати 0xff - не ідеально, але він безкоштовний і вже доступний в Windows з XP хоча б)


3
цікавий підхід. Перерва виконання перед тим, як воно почне скасовувати всі нулі. +1 для творчого рішення, використовуючи інструменти, які вже є!
PsychoData

Цікаво, чи можна виявити, коли він закінчив писати нулі, а потім змусити його перервати ...
Фредерік Норд

Якщо ви використовуєте жорсткий диск SSD, перевірте, чи увімкнено TRIM. Тоді весь невикористаний блок буде швидко стертий з прошивкою жорсткого диска з малюнком 0xFF. Це дуже зручно для зображень віртуальних дисків, зроблених віртуальними серверами. Ці зображення заповняться як прогалини, і звільнять блоки файлової системи на хостингу файлової системи.
Znik

Це спрацювало дуже добре і набагато швидше, ніж SDelete -z (який застряг на 100%, не даючи інших відгуків).
psychowood

6

SDelete не зніме місця для ущільнення віртуального диска. SDelete починається з обнулення вільного простору, але потім заповнює його 0xff, а потім випадковими байтами. Див. Як підготувати файл віртуального жорсткого диска Virtual Server 2005 для надсилання служб підтримки продуктів Microsoft. Як налаштувати VHD для ущільнення

Чомусь Precompact.exe може бути важко знайти. Тут я знайшов окрему копію, яку можна завантажити . Однак якщо у вас віртуальний ПК Windows, ви також можете отримати його з% programfiles (x86)% \ Windows Virtual PC \ Integration Components \ Precompact.iso


2
sdelete з опцією -c - це нульове заповнення. Можливо, ви думаєте про вбудовану утиліту шифру для Windows, яка не має нульової можливості?
Джеремі М

"SDelete реалізує систему очищення та санітарії Міністерства оборони DOD 5220.22-M" (від документів), яка спеціально не просто виводить кластер. sdelete -c не знімає вільний простір (після його заповнення), однак метод, який використовує sdelete, не той самий, як precompact, і в багатьох випадках призведе до більшого приводу, ніж precompact, який був розроблений для знецінення віртуальних дисків
Джим B

Це цікаво знати про інший інструмент. Дякую
mit

2
SDelete може залишити диск з 0, але попередній компакт-диск працює набагато швидше і був призначений для подібної ситуації.
Chris S

2
@romkyns Це вже не важливо, оскільки всі сучасні версії підтримки Windows та Hyper-V підтримують trim(як Win7 та Hyper-V 2012), перед ущільненням немає необхідності. Утиліта PreCompact лише нульові частини диска зі видаленими файлами, частина, яка ніколи не використовувалася, залишалася недоторканою. Використання чогось подібного sdeleteзаповнило б динамічний диск до статичного розміру, який потім можна було б ущільнити лише до фактично використовуваного розміру.
Кріс С

6

fsutilне є відкритим кодом, але постачається з Windows, тому не коштує нічого зайвого. Я використав його для нульового вільного місця на порожньому диску WD 250 GB 7200 RPM ( 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

На записування 250 ГБ нулів пішло близько 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:, він фактично збільшив розмір віртуальних накопичувачів до 30 гігабайт, що було його максимальним розміром.

Дивіться веб-сайт VMware та компактний віртуальний жорсткий диск , який знаходиться під Using VMware Workstation > Configuring and Managing Devices > Configuring and Maintaining Virtual Hard Disks.

Оновлення

Інколи інструменти графічного інтерфейсу не настільки надійні, як інструменти командного рядка. У мене виникли проблеми, коли інструменти графічного інтерфейсу не спрацьовують, але інструменти командного рядка працюють просто чудово. Ось варіанти для 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.

Ось приклад зменшення диска. Цей командний рядок працював, незважаючи на те, що та сама команда з графічного інтерфейсу не вдалася:

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. Він використовується для того, щоб перетворити весь наявний вільний простір в нулі, готуючись до скорочення операції. Якщо цього не зробити, видалені файли та інші осиротілі дані все одно будуть присутні на диску. Інструменти VMWare не завжди зможуть повернути дисковий простір, який все ще займають ці файли. Перетворення цих «видалених файлів» у нулі робить простір на диску повністю відшкодованим під час запуску інструменту скорочення. Причина, коли ви побачили збільшення розміру файлу на віртуальному диску, полягає в тому, що sdelete заповнює весь наявний у ньому простір нулями.
Леон Лукарді

Дякуємо, що уточнили це. Подумає, що інструменти можуть отримати користь від кращого іменування та / або однорядкового опису того, що інструмент робить під час його запуску.
Контанго


-1

Міт,

Я виявив, що сценарій повноважень Саймона робив саме те, що потрібно, без проблем з версією sdelete. (комутатори роблять різні речі в різних версіях)

У нього була одна проблема - шифр продовжував працювати, але я це виправив.

Далі я змінив сценарій, щоб очистити папку temp:

Вам потрібно буде замінити 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) cleanкоманда diskpart : http://technet.microsoft.com/library/cc766465.aspx , http://support.microsoft.com/kb/300415 ;

До речі, вам також не потрібно більше, ніж один пропуск - претензія в іншому випадку є або застарілою інформацією про застарілі диски червоного / запису стратегії, людей, які штовхають продукти, керують параноїєю, або ж передаються як "консультація експерта".

Редагувати: nvm, пропустив частину вільного місця ...


1
У багатьох випадках є наявні інструменти сторонніх виробників, які роблять добру чи кращу роботу, простіші в установці або надійніші. Але це абсолютно ОТ, питання було не в тому, хто це пише. Крім цього Microsoft Sysinternals (який написав SSDelete), тому що вони були на світлі роки краще, ніж вбудовані речі. Просто порівняйте ProcessExplorer з продуктом MS "TaskManager" -1 для запуску вогненної війни
Alojz Janez

Ви пропустили вимогу "відкритого коду" у питанні, чи не так?
Alojz Janez
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.