Что на самом деле делает команда «fsutil file createnew»?

В командной строке ОС Windows, когда мне нужно быстро создать файл произвольного размера, я использую команду:

      fsutil file createnew <filename> <size_in_bytes>

Недавно я создал файл размером 100 ГБ с помощью этого встроенного инструмента и был удивлен, что его создание заняло менее 500 мс. Я создал файл на жестком диске с пластиной, который ранее был заполнен данными.

Из любопытства я открыл файл в шестнадцатеричном редакторе, и он оказался совершенно пустым (правда, вручную все 100 ГБ я не проверял). Я ожидал, что он будет заполнен предыдущим содержимым жесткого диска, учитывая, что он не мог просто записать 100 ГБ данных за 500 мс.

Чтоfsutil file createnewна самом деле делаете? И, в зависимости от того, что он на самом деле делает, можно ли его использовать в качестве метода быстрого стирания с низким уровнем безопасности (однопроходного)?

1 ответ

Я ожидал, что он будет заполнен предыдущим содержимым жесткого диска,

Многопользовательские операционные системы обычно не позволяют этого сделать, поскольку это было бы излишне простым способом обойти функции защиты файлов на уровне ОС, и, по крайней мере, для Windows это явно является частью ее сертификации безопасности .

Что на самом деле делает файл fsutil createnew?

Есть как минимум два варианта, я подозреваю (но не проверял), что fsutil использует первый — он полагается на то, что ОС отслеживает «конец данных».

  • Файловая система может хранить два отдельных указателя – «конец файла» и «конец действительных данных». Именно так работает NTFS в Windows.

    Вы можете вызвать SetEndOfFile() (соответствует ftruncate() в Linux ), чтобы создать большой файл без данных, а пространство между «концом действительных данных» и «концом файла» автоматически вернет все байты 0x00 при чтении.

    (Привилегированные учетные записи могут использовать вызов SetFileValidData(), чтобы заставить ОС вернуть данные, которые уже находятся на диске, но это не часто используемая операция.)

  • Если файловая система основана на экстентах, то она отслеживает не отдельные кластеры дисков, а целые смежные диапазоны «начало-конец», составляющие файл. Это позволяет создавать разреженные файлы , в которых некоторые экстенты просто помечены как не имеющие никакого физического распределения (т.е. являются «дырами») — эти местоположения будут возвращать 0x00 при чтении (конечно, пока там не будет записано что-то еще).

    Как правило, простой поиск за пределами файла и продолжение записи автоматически приводит к созданию разреженного файла, если это возможно.

У fsutil есть подкоманды для проверки как указателя «действительных данных», так и списка экстентов файла.

Существуют файловые системы, которые не поддерживают эти методы (например, FAT), и в этом случае ОС потребуется явно обнулить соответствующую область диска.

И, в зависимости от того, что он на самом деле делает, можно ли его использовать в качестве метода быстрого стирания с низким уровнем безопасности (однопроходного)?

Нет, не на механических дисках.

Другие вопросы по тегам