22

Из этой статьи я научился использовать sdelete в качестве шага для сжатия файла VDI:

sdelete -c c:

Но что означает -c («Очистить свободное пространство», как описано в его справочном тексте)? Разве это не записывает свободное место с нуля? А как насчет -z (Ноль свободного пространства)? В чем разница между sdelete -c и -z?

редактировать

Я попробовал шаг в статье упоминалось ранее, но не уменьшить размер файла .vid Затем я последовал за этим сообщением суперпользователя и изменил параметр -c на -z , и все получилось.

Похоже, что -z записывает нули в свободное пространство, а -c записывает что-то еще (возможно, случайные биты).

3 ответа3

19

Я думаю, что это распространенная ошибка. Возможно, опция -z не была доступна в более ранних версиях. SDelete 1.61 говорит

-z         Zero free space (good for virtual disk optimization)

Обратите внимание, что при этом сначала расширится ваш жесткий диск до полного размера. Только в процессе сжатия VMWare оно снова станет меньше.

Быстрый тест на моей машине:

-z took 1:01 minutes
-c took 2:11 minutes

Это означает, что -z записывает только простые нули, тогда как -c - это военный стандарт, очищающий DoD 5220.22-M, как написано на сайте SDelete.

5

Это должно было быть более уместно опубликовано в качестве комментария к ответу Томаса, но, поскольку я пока не могу этого сделать, я публикую его здесь.

Смешение опций «-z» и «-c», вероятно, является "распространенной ошибкой", поскольку SDelete изменила поведение этих опций за эти годы. Глядя на приведенные ниже ссылки, кажется, что SDelete сначала имел опцию "-z", которая выполняла "военную стандартную очистку", затем добавил опцию "-c" для обнуления свободного пространства, а затем где-то между v1.51 и v1. 61 переключил это поведение на текущее.

Ссылки: форум sysinternals.com и старая домашняя страница SDelete в Microsoft TechNet через archive.org.

3

Текущая документация (и версия программы 2.01):

  • -c: чистое свободное пространство. Укажите опцию количества места, чтобы оставить свободным для использования работающей системой.
  • -z: Ноль свободного места (хорошо для оптимизации виртуального диска).

Но в более старых версиях это было наоборот:

  • -c: Ноль свободного места (хорошо для оптимизации виртуального диска).
  • -z: чистое свободное пространство.

Но что они делают?

Clean создает самый большой файл, который может, и заполняет его случайными данными, а затем заполняет его нулями. Это то, что большинство людей считают стиранием, и это излишне.

Недостатком является то, что если вы используете виртуальный диск, или внутри виртуальной машины, или запускаете его в пространстве хранения: базовая система хранения будет вынуждена выделять ресурсы для хранения случайных данных, а затем удерживать ноль. Надеемся, что тогда система хранения данных поймет, что все то пространство, которое было только что выделено для вашего диска, может быть возвращено, потому что все эти сектора просто содержат нули.

-z Zero: просто записывает нули во все сектора. Это вариант, который вы хотите, по многим причинам:

  • стереть случайные данные излишне (считывание данных практически невозможно; т. е. один бит за раз, хотя микроскоп не выполним)
  • некоторые SSD могут обнаружить, что вы записываете ноль в сектор, и могут использовать это, чтобы пометить сектор как свободный (аналог TRIM)
  • большинство систем виртуальных хранилищ (VMWare, Hyper-V, виртуальные диски Windows, дисковые пространства) понимают, что вы записываете целый сектор нулей, и пользуетесь возможностью освободить пространство в базовом файле хранилища.
  • SSD не будут знать, что вашей конечной целью является прославленная TRIM, и (как и виртуальные диски) будут вынуждены заполнять сектора, которые уже содержат нули, ненулевыми, только чтобы вы снова заполнили его нулями. Это ужасно для ваших SSD.

Источник: установил виртуальный жесткий диск и наблюдал за операциями ввода / вывода, которые sdelete выполнял в обоих режимах.

tl; dr: используйте -z Zero. Это быстрее, лучше, безопаснее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .