В чем разница между sdelete -c и -z?

24

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

sdelete -c c:

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

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

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

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

Замороженное пламя
источник

Ответы:

21

Я думаю, что это распространенная ошибка. Возможно, опция -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 .

Томас Веллер
источник
Это не будет раздувать файл, если программное обеспечение несколько интеллектуально. Большинство приложений виртуализации есть. Я только что попробовал это в VMware Fusion, он вообще не увеличивал размер файла.
Даниэль Б
1
К сожалению, VMWare Workstation Pro 12 расширяет диск до полного размера.
Лебенита
-c и -z были объявлены в 1.51 как раз наоборот (была ли это просто ошибка в описании или функции также были изменены, я не знаю). Очевидно, что путь 1.61 имеет больше смысла.
Лебенита
Только что проверил с Windows 2012 и новым 20GB VHDX файлом. Опция -z была очень быстрой (секунды), а размер файла VHDX не увеличился. Опция -c работает намного медленнее, а размер VHDX увеличивается. Так что -z является предпочтительным вариантом для так называемого тонкого / расширяемого виртуального жесткого диска, особенно если у вас слишком много свободного места на диске. Но это не так безопасно, как опция -c
munrobasher
1
Только что проверил последнюю версию (2.0) и есть два очевидных различия. Во-первых, это 32-битная и 64-битная версия (sdelete.exe & sdelete64.exe). Но есть и небольшая разница в команде -c, которая беспокоит. В v1.61 опция -c говорит «Очистка свободного пространства», но в v2.0 она говорит «Обнуление свободного пространства». Опция -z также говорит об обнулении. Он потерял опцию случайных данных?
мунробашер
5

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

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

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

LN2
источник
Это не ответ на оригинальный вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любые посты .
DavidPostill
4
Это не ответ на оригинальный вопрос. Пожалуйста, перечитайте первую строку поста. Если есть более эффективная процедура добавления полезной и / или уместной информации в уже существующий ответ для кого-то, кто только что подписался на услугу, не стесняйтесь просвещать меня.
LN2
«Если есть лучшая процедура для добавления полезной и / или соответствующей информации в уже существующий ответ для кого-то, кто только что подписался на услугу, не стесняйтесь просвещать меня» - нет, пожалуйста, прочитайте ссылки, которые я предоставил.
ДэвидПостилл
Интересно отметить, что в 1.61 независимо от того, какой коммутатор вы используете, он всегда говорит «Обнуление свободного пространства» (а в 1.51 он всегда говорит «Очистка свободного пространства»). Это немного вводит в заблуждение, на какое-то время это вызвало у меня недоверие к тому, что «-c» на самом деле было «чистым», а не «нулевым» поведением.
rkagerer
5

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

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

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

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

введите описание изображения здесь

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

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

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

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

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

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

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

Ян Бойд
источник