5

Что такое атрибут sparse файла на разделах NTFS и как его удалить?

Использование Windows 7, Windows 8 и Windows 8.1.

3 ответа3

10

Николь Гамильтон предоставила описание редких файлов.
Давайте узнаем это с помощью эксперимента.

Создание разреженного файла

Запустите командную строку (cmd.exe) от имени администратора.

  1. Создание большого файла:

    fsutil file createnew test.nul 1048576
    
  2. Проверьте его размер в Проводнике:
    • Размер: 1,00 МБ (1 048 576 байт)
    • Размер на диске: 1,00 МБ (1 048 576 байт)
  3. Давайте отметим это разреженным:

    fsutil sparse setflag test.nul
    
  4. Пока ничего не изменилось, оба размера по-прежнему 1,00 МБ.
  5. Давайте отметим весь диапазон байтов как разреженный:

    fsutil sparse setrange test.nul 0 1048576
    
  6. Сейчас размеры кардинально изменились:
    • Размер: 1,00 МБ (1 048 576 байт)
    • Размер на диске: 1,00 КБ (1 024 байта)
  7. Вы можете запросить, является ли файл разреженным или нет, с помощью fsutil:

    fsutil sparse queryflag test.nul
    This file is set as sparse
    

    Или же

    This file is NOT set as sparse
    

Значение Size на диске зависит от размера кластера файловой системы. Размер кластера по умолчанию в NTFS составляет 4 КБ. Диск, который я использовал для тестирования, был отформатирован с кластером размером 1 КБ.

Я использовал эту статью в качестве источника.


Удаление разреженного атрибута

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

Самый простой способ сделать это - скопировать файл. Файл потеряет этот специальный атрибут, если приложение, которое его копирует, специально не сохранит атрибут sparse и sparse range.

Вы можете использовать Far Manager, чтобы очистить разреженный атрибут. Перейдите к файлу и нажмите Ctrl + A, чтобы открыть диалоговое окно «Атрибут». Снимите флажок Разреженный . И нажмите кнопку Установить . Атрибуты файла test.nul в Fra Manager

2

Эта редкая проблема атрибутов происходит постоянно с загруженными для меня ISO.

Поместите это в пакетный файл и перетащите на него целевой файл (с помощью проводника Windows). И вуаля.

fsutil sparse queryflag %1
pause
fsutil sparse setflag %1 0
fsutil sparse queryflag %1
pause

Однако это не работает в Windows 7 и 8.x (возможно, также и в Vista), поскольку setflag принимает только <filename> в качестве допустимого параметра, и соответствующей команды clearflag . Однако он работает в Windows 10.

2

Разреженный файл - это файл, в котором есть дыры. Большие разделы двоичных нулей не записываются на диск. Вот объяснение Microsoft из Sparse Files (Windows):

Когда функция разреженного файла включена, система не выделяет место на жестком диске для файла, за исключением регионов, где он содержит ненулевые данные. При попытке выполнить операцию записи, когда большой объем данных в буфере равен нулю, нули не записываются в файл. Вместо этого файловая система создает внутренний список, содержащий расположение нулей в файле, и к этому списку обращаются во время всех операций чтения. Когда операция чтения выполняется в областях файла, где были расположены нули, файловая система возвращает соответствующее количество нулей в буфере, выделенном для операции чтения. Таким образом, обслуживание разреженного файла прозрачно для всех процессов, которые обращаются к нему, и является более эффективным, чем сжатие для этого конкретного сценария.

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