Поделиться через


Функция CompactVirtualDisk (virtdisk.h)

Уменьшает размер файла резервного хранилища виртуального жесткого диска (VHD).

Синтаксис

DWORD CompactVirtualDisk(
  [in]           HANDLE                           VirtualDiskHandle,
  [in]           COMPACT_VIRTUAL_DISK_FLAG        Flags,
  [in, optional] PCOMPACT_VIRTUAL_DISK_PARAMETERS Parameters,
  [in, optional] LPOVERLAPPED                     Overlapped
);

Параметры

[in] VirtualDiskHandle

Дескриптор открытого виртуального диска, который должен быть открыт с помощью флага VIRTUAL_DISK_ACCESS_METAOPS в параметре VirtualDiskAccessMask , переданном в OpenVirtualDisk. Сведения об открытии виртуального диска см. в разделе Функция OpenVirtualDisk .

[in] Flags

Должно быть COMPACT_VIRTUAL_DISK_FLAG_NONE значением (0) перечисления COMPACT_VIRTUAL_DISK_FLAG .

[in, optional] Parameters

Необязательный указатель на допустимую структуру COMPACT_VIRTUAL_DISK_PARAMETERS , содержащую данные параметров сжатия.

[in, optional] Overlapped

Необязательный указатель на допустимую структуру OVERLAPPED , если требуется асинхронная операция.

Возвращаемое значение

Состояние запроса.

Если функция завершается успешно, возвращаемое значение будет ERROR_SUCCESS.

Если функция завершается сбоем, возвращаемое значение представляет собой код ошибки. Дополнительные сведения см. в разделе Системные коды ошибок.

Комментарии

Сжатие можно выполнять только на виртуальном диске, который динамически расширяется или отличается друг от друга.

Существует два разных типа сжатия.

  • Первый тип, сжатие с учетом файловой системы, использует файловую систему NTFS для определения свободного места. Это делается путем подключения виртуального жесткого диска в качестве устройства только для чтения, включив флаги VIRTUAL_DISK_ACCESS_METAOPS и VIRTUAL_DISK_ACCESS_ATTACH_RO в параметр VirtualDiskAccessMask , переданный в OpenVirtualDisk, присоединение VHD путем вызова AttachVirtualDisk, а при подключении виртуального жесткого диска вызывается CompactVirtualDisk. Отсоединение виртуального жесткого диска до завершения сжатия может привести к сбою сжатия до его завершения (аналогично отмене сжатия).
  • Второй тип, не зависящая от файловой системы, не связан с файловой системой, а ищет только блоки VHD, заполненные нулями (0). Это делается путем включения флага VIRTUAL_DISK_ACCESS_METAOPS в параметр VirtualDiskAccessMask , переданного в OpenVirtualDisk, и вызова CompactVirtualDisk.
Сжатие с учетом файловой системы является наиболее эффективным типом сжатия, но при использовании сначала сжатия с учетом файловой системы, за которым следует сжатие, не зависят от файловой системы, будет получен наименьший виртуальный жесткий диск.

Операцию сжатия на виртуальном диске можно безопасно прервать и повторно выполнить позже. Повторное открытие прерванного файла виртуального диска может привести к уменьшению размера файла виртуального диска во время открытия.

Сжатие может быть ресурсоемким для ЦП или операций ввода-вывода в зависимости от размера виртуального диска и количества блоков, требующих перемещения.

Функция CompactVirtualDisk выполняется на виртуальном диске в том же контексте безопасности, что и вызывающий объект.

Требования

Требование Значение
Минимальная версия клиента Windows 7
Минимальная версия сервера Windows Server 2008 R2
Целевая платформа Windows
Header virtdisk.h
Библиотека VirtDisk.lib
DLL VirtDisk.dll

См. также раздел

Сведения о виртуальном жестком диске

Справочник по виртуальным жестким дискам