Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Марк Руссинович
Опубликовано: 5 марта 2026 г.
СкачатьСкачать SDelete(328 КБ)
Введение
Одна из функций соответствия требованиям C2 (Win2K) Windows NT/2000 заключается в том, что он реализует защиту повторного использования объектов. Это означает, что при выделении файлового пространства или виртуальной памяти приложение не может просматривать данные, ранее хранящиеся в ресурсах Windows NT/2K, выделенных для него. Windows NT заполняет нулями память и обнуляет секторы на диске, где размещается файл, прежде чем представить любой тип ресурса приложению. Однако повторное использование объекта не определяет, что пространство, которое занимает файл, прежде чем удалить его, будет отсчитываться от нуля. Это связано с тем, что Windows NT/2K разработан с учетом того, что операционная система управляет доступом к системным ресурсам. Однако, если операционная система не работает, можно использовать редакторы необработанных дисков и средства восстановления для просмотра и восстановления данных, которые операционная система удалила. Даже при шифровании файлов с помощью файловой системы Win2K (EFS) исходные незашифрованные данные файла остаются на диске после создания новой зашифрованной версии файла.
Единственный способ убедиться, что удаленные файлы, а также файлы, зашифрованные с помощью EFS, защищены от восстановления, — использовать безопасное приложение для удаления. Приложения для безопасного удаления перезаписывают данные удаленных файлов на диске, используя методы, которые демонстрируют, что данные становятся невосстановимыми, даже с использованием технологий восстановления, способных считывать структуры на магнитных носителях, выявляющие слабо удаленные файлы. SDelete (Secure Delete) — это такое приложение. SDelete можно использовать как для безопасного удаления существующих файлов, так и для безопасного удаления всех данных файлов, которые существуют в нераспределенных участках диска (включая файлы, которые уже удалены или зашифрованы). SDelete реализует стандарт очистки и обеззараживания Министерства обороны США DOD 5220.22-M, чтобы вы могли быть уверены в том, что после удаления с помощью SDelete данные ваших файлов будут удалены навсегда. Обратите внимание, что SDelete безопасно удаляет данные файлов, но не имена файлов, расположенные в свободном пространстве на диске.
Использование SDelete
SDelete — это программа командной строки, которая принимает ряд параметров. В любом использовании он позволяет удалить один или несколько файлов и (или) каталогов или очистить свободное пространство на логическом диске. SDelete принимает подстановочные знаки как часть указателя каталога или файла.
Использование.
sdelete [-p passes] [-r] [-s] [-q] [-f] <file or directory [...]>
sdelete [-p passes] [-q] [-z|-c] <drive letter [...]>
sdelete [-p passes] [-q] [-z|-c] <physical disk number [...]>
| Параметр | Описание |
|---|---|
| -c | Очистить свободное место. |
| -f | Принудительное применение аргументов, содержащих только буквы, которые следует рассматривать как файл или каталог, а не диск. Не требуется, если аргумент содержит другие символы (разделители путей или расширения файлов, например). |
| -p | Указывает число проходов перезаписи (по умолчанию — 1). |
| -q | Тихий режим. |
| -r | Удалите атрибут "только для чтения". |
| -s | Рекурсивный просмотр подкаталогов. |
| -z | Нулевое свободное место (хорошо подходит для оптимизации виртуального диска). |
| -nobanner | Не отображайте баннер запуска и сообщение об авторских правах. |
- Для очистки диски не должны содержать никаких томов.
- Для букв диска включите , например .
Как работает SDelete
Безопасное удаление файла, не имеющего специальных атрибутов, относительно просто: программа безопасного удаления просто перезаписывает файл, используя специальный шаблон. Более сложно удалить сжатые, зашифрованные и разреженные файлы Windows NT/2K, а также безопасно очищать свободное место на диске.
Сжатые, зашифрованные и разреженные управляются NTFS в блоках по 16 кластеров. Если программа записывает в существующую часть такого файла NTFS, выделяет новое место на диске для хранения новых данных и после записи новых данных освобождает кластеры, ранее занятые файлом. NTFS принимает этот консервативный подход по причинам, связанным с целостностью данных, и в случае сжатых и разреженных файлов, если новое выделение больше того, что существует (новые сжатые данные больше старых сжатых данных). Таким образом, перезапись такого файла не приведет к удалению его содержимого с диска.
Для обработки этих типов файлов SDelete использует API дефрагментации. Используя API дефрагментации, SDelete может точно определить, какие кластеры на диске занимают данные, принадлежащие сжатым, разреженным и зашифрованным файлам. Когда SDelete знает, какие кластеры содержат данные файла, он может открыть диск для сырого доступа и перезаписать эти кластеры.
Очистка свободного места представляет собой еще одну проблему. Так как FAT и NTFS не предоставляют никаких средств для приложения напрямую обращаться к свободному пространству, SDelete имеет один из двух вариантов. Первое заключается в том, что он может, как и для сжатых, разреженных и зашифрованных файлов, открыть диск для получения необработанного доступа и перезаписать свободное пространство. Этот подход страдает от большой проблемы: даже если бы SDelete было закодировано так, чтобы полностью мог вычислять части свободного пространства дисков NTFS и FAT (что само по себе непросто), он может столкнуться с риском пересечения с активными файловыми операциями, выполняющимися в системе. Например, предположим , что SDelete определяет, что кластер свободен, и только в тот момент драйвер файловой системы (FAT, NTFS) решает выделить кластер для файла, который изменяет другое приложение. Драйвер файловой системы записывает новые данные в кластер, после чего SDelete перезаписывает их: новые данные файла уничтожаются. Проблема еще хуже, если кластер выделяется для метаданных файловой системы, так как SDelete повреждает структуры файловой системы на диске.
Второй подход, и тот, который использует SDelete, касается непрямой перезаписи свободного пространства. Во-первых, SDelete выделяет самый большой файл, который он может. SDelete делает это с помощью операций ввода-вывода файлов без использования кэша, чтобы содержимое кэша файловой системы NT не было выброшено и заменено бесполезными данными, связанными с файлом, занимающим дисковое пространство, созданным SDelete. Некэшированные операции ввода-вывода должны быть выровнены на уровне сектора (512 байт), поэтому может быть какое-то незанятое пространство, которое не выделяется для файла SDelete, даже если SDelete не может больше увеличивать файл. Чтобы захватить любое оставшееся пространство, SDelete затем выделяет самый большой возможный кэшированный файл, который может. Для обоих этих файлов SDelete выполняет безопасную перезапись, обеспечивая безопасное очистку всего места на диске, которое ранее было свободно.
На дисках NTFS задание SDelete не обязательно выполняется после выделения и перезаписи двух файлов. SDelete также должен заполнить все свободные области в главной таблице файлов NTFS (Master File Table) файлами, которые соответствуют записи MFT. Обычно запись MFT имеет размер 1 КБ, а для каждого файла или каталога на диске требуется по крайней мере одна запись MFT. Небольшие файлы хранятся полностью в пределах их записи MFT, а файлы, которые не помещаются в записи, выделяются в кластеры за пределами MFT. Все, что SDelete нужно сделать для управления свободным пространством MFT, это выделить самый большой файл, который он может. Когда файл занимает все доступное пространство в записи MFT, NTFS не позволит файлу стать больше, так как на диске отсутствуют свободные кластеры (их занимают два файла, которые SDelete ранее выделил). Затем SDelete повторяет процесс. Когда SDelete больше не может создать новый файл, он знает, что все ранее свободные записи в MFT были полностью заполнены безопасно перезаписанными файлами.
Чтобы перезаписать имена файлов, которые вы удаляете, SDelete переименовывает файл 26 раз, при каждом замене каждого символа имени файла на последовательный алфавитный символ. Например, первое переименование "foo.txt" будет на "AAA.AAA".
Причина, по которой SDelete не безопасно удаляет имена файлов при очистке свободного места на диске, заключается в том, что их удаление потребует прямого управления структурами каталогов. Структуры каталогов могут иметь свободное место, содержащее удаленные имена файлов, но свободное пространство каталога недоступно для выделения другим файлам. Таким образом, SDelete не имеет способа выделения этого свободного пространства, чтобы он смог безопасно перезаписать его.
СкачатьСкачать SDelete(328 КБ)
Выполняется:
- Клиент: Windows 10 и выше.
- Сервер: Windows Server 2012 и выше.
- Nano Server: 2016 и выше.