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


Метод IVdsVolumeShrink::Shrink (vds.h)

[Начиная с Windows 8 и Windows Server 2012, COM-интерфейс службы виртуальных дисков замечается API управления хранилищем Windows.]

Сжимает том и все сплетения и возвращает освобожденные экстенты.

Синтаксис

HRESULT Shrink(
  [in]  ULONGLONG ullDesiredNumberOfReclaimableBytes,
  [in]  ULONGLONG ullMinNumberOfReclaimableBytes,
  [out] IVdsAsync **ppAsync
);

Параметры

[in] ullDesiredNumberOfReclaimableBytes

Максимальное число байтов, на которое уменьшается размер тома. Значение этого параметра должно быть больше или равно значению параметра ullMinNumberOfReclaimableBytes . Если указанное число байтов не кратно размеру кластера файловой системы, метод Shrink округляет это значение до следующего кратного размера кластера файловой системы.

[in] ullMinNumberOfReclaimableBytes

Минимальное количество байтов, на которое уменьшается размер тома. Если размер тома не может быть сжат по крайней мере на это количество байтов, метод Shrink завершается ошибкой. Если указанное число байтов не кратно размеру кластера файловой системы, метод Shrink округляет это значение до следующего кратного размера кластера файловой системы. Укажите ноль, чтобы указать, что для успешного выполнения метода Shrink не требуется минимальное количество байтов, допускающих восстановление.

[out] ppAsync

Адрес указателя интерфейса IVdsAsync . VDS инициализирует интерфейс при возврате. Вызывающие стороны должны освободить интерфейс. Используйте этот интерфейс для отмены, ожидания или запроса состояния операции. Если вызывается IVdsAsync::Wait и возвращается успешное значение HRESULT, интерфейсы, возвращаемые в VDS_ASYNC_OUTPUT структуре, должны быть освобождены путем вызова метода IUnknown::Release для каждого указателя интерфейса. Однако если функция Wait возвращает значение HRESULT сбоя или параметр pHrResultобъекта Wait получает значение HRESULT сбоя, указатели интерфейса в структуре VDS_ASYNC_OUTPUT имеют значение NULL и не должны освобождаться. Вы можете проверить наличие значений HRESULT успешного или неудачного выполнения с помощью макросов SUCCEEDED и FAILED , определенных в Winerror.h.

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

Этот метод может возвращать стандартные значения HRESULT, такие как E_INVALIDARG или E_OUTOFMEMORY, а также возвращаемые значения VDS. Он также может возвращать коды преобразованных системных ошибок с помощью макроса HRESULT_FROM_WIN32 . Ошибки могут возникать из самого VDS или из используемого базового поставщика VDS . Возможные возвращаемые значения включают следующие.

Возвращаемый код/значение Описание
S_OK
Метод завершился успешно.
VDS_E_CANNOT_SHRINK
0x8004251EL
Невозможно сжать том, так как файловая система не поддерживает его.
VDS_E_DISK_REMOVEABLE
0x8004255AL
Эта операция не поддерживается на съемном носителе.
VDS_E_INTERNAL_ERROR
0x80042448L
Внутренняя ошибка. Дополнительные сведения см. в журнале событий.
VDS_S_NO_NOTIFICATION
0x00042517L
Уведомление о поступлении тома не получено. Может потребоваться вызвать IVdsService::Refresh.
VDS_E_SHRINK_SIZE_TOO_BIG
0x80042574L
Указанный размер сжатия слишком велик и приведет к тому, что размер тома будет меньше минимального размера тома.
VDS_E_SHRINK_SIZE_LESS_THAN_MIN
0x80042573L
Указанный размер сжатия меньше минимально допустимого размера.
VDS_E_VOLUME_NOT_HEALTHY
0x8004243EL
Том не работоспособен.
VDS_E_VOLUME_SIMPLE_SPANNED
0x80042589L
Операция поддерживается только на простых или развернутых томах.

Комментарии

Метод Shrink перемещает файлы так, чтобы они были как можно ближе к началу тома, чтобы консолидировать свободное пространство в конце тома. (Объем свободного пространства, который можно консолидировать в конце тома, определяет объем тома, который можно сжать.) Затем он усекает том файловой системы, уменьшает его размер, а затем усекает секцию или динамический том.

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

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

Возможно, файл будет временно неподвижным. По этой причине приложение может восстановить дополнительное пространство при повторном вызове этого метода с теми же параметрами.

Если параметры ullDesiredNumberOfReclaimableBytes и ullMinNumberOfReclaimableBytes равны нулю, метод Shrink уменьшит том на максимально возможное количество.

Операции сжатия и расширения поддерживаются только в томах NTFS и RAW.

Используйте этот метод для сжатия файловой системы и тома. Если VDS не удается сжать том, операция останавливается без сжатия файловой системы.

Одновременно на каждом томе можно выполнять только одну операцию сжатия или дефрагментации. Windows Server 2008 и Windows Vista: Одновременно на компьютере может выполняться только одна операция сжатия или дефрагментации.

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

Этот метод идентичен методу IVdsVolume::Shrink .

Вы можете использовать метод IVdsVolumeShrink::QueryMaxReclaimableBytes для оценки количества байтов, которые будут освобождены операцией сжатия. Однако QueryMaxReclaimableBytes может возвращать больше байтов, чем фактически доступно.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header vds.h
Библиотека Uuid.lib

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

IVdsVolume::Extend

IVdsVolumeShrink