Compartir a través de


Método IVdsVolumeShrink::Shrink (vds.h)

[A partir de Windows 8 y Windows Server 2012, la interfaz COM del servicio de disco virtual se sustituye por la API de administración de almacenamiento de Windows.]

Reduce el volumen y todos los plexos y devuelve las extensiones liberados.

Sintaxis

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

Parámetros

[in] ullDesiredNumberOfReclaimableBytes

Número máximo de bytes por el que se reduce el tamaño del volumen. El valor de este parámetro debe ser mayor o igual que el valor del parámetro ullMinNumberOfReclaimableBytes . Si el número de bytes especificado no es un múltiplo del tamaño del clúster del sistema de archivos, el método Shrink redondeará este valor hasta el siguiente múltiplo del tamaño del clúster del sistema de archivos.

[in] ullMinNumberOfReclaimableBytes

Número mínimo de bytes por el que se reduce el tamaño del volumen. Si el tamaño del volumen no se puede reducir al menos este número de bytes, se produce un error en el método Shrink . Si el número de bytes especificado no es un múltiplo del tamaño del clúster del sistema de archivos, el método Shrink redondeará este valor hasta el siguiente múltiplo del tamaño del clúster del sistema de archivos. Especifique cero para indicar que no se requiere ningún número mínimo de bytes reclamables para que el método Shrink se realice correctamente.

[out] ppAsync

Dirección de un puntero de interfaz IVdsAsync . VDS inicializa la interfaz devuelta. Los autores de llamadas deben liberar la interfaz . Use esta interfaz para cancelar, esperar o consultar el estado de la operación. Si se llama a IVdsAsync::Wait y se devuelve un valor HRESULT correcto, las interfaces devueltas en la estructura VDS_ASYNC_OUTPUT deben liberarse llamando al método IUnknown::Release en cada puntero de interfaz. Sin embargo, si Wait devuelve un valor HRESULT de error o si el parámetro pHrResult de Wait recibe un valor HRESULT de error, los punteros de interfaz de la estructura VDS_ASYNC_OUTPUT son NULL y no es necesario liberar. Puede probar los valores HRESULT correctos o erróneos mediante las macros SUCCEEDED y FAILED definidas en Winerror.h.

Valor devuelto

Este método puede devolver valores HRESULT estándar, como E_INVALIDARG o E_OUTOFMEMORY, y valores devueltos específicos de VDS. También puede devolver códigos de error del sistema convertidos mediante la macro HRESULT_FROM_WIN32 . Los errores pueden originarse en VDS en sí o en el proveedor de VDS subyacente que se está usando. Entre los valores devueltos posibles se incluyen los siguientes.

Código o valor devuelto Descripción
S_OK
El método se completó correctamente.
VDS_E_CANNOT_SHRINK
0x8004251EL
El volumen no se puede reducir porque el sistema de archivos no lo admite.
VDS_E_DISK_REMOVEABLE
0x8004255AL
La operación no se admite en medios extraíbles.
VDS_E_INTERNAL_ERROR
0x80042448L
Se ha producido un error interno. Compruebe el registro de eventos para obtener más detalles.
VDS_S_NO_NOTIFICATION
0x00042517L
No se recibió ninguna notificación de llegada de volumen. Es posible que tenga que llamar a IVdsService::Refresh.
VDS_E_SHRINK_SIZE_TOO_BIG
0x80042574L
El tamaño de reducción especificado es demasiado grande y hará que el volumen sea menor que el tamaño mínimo del volumen.
VDS_E_SHRINK_SIZE_LESS_THAN_MIN
0x80042573L
El tamaño de reducción especificado es menor que el tamaño de reducción mínimo permitido.
VDS_E_VOLUME_NOT_HEALTHY
0x8004243EL
El volumen no es correcto.
VDS_E_VOLUME_SIMPLE_SPANNED
0x80042589L
La operación solo se admite en volúmenes simples o distribuidos.

Comentarios

El método Shrink mueve los archivos para que estén lo más cerca posible del principio del volumen, con el fin de consolidar el espacio libre al final del volumen. (La cantidad de espacio libre que se puede consolidar al final del volumen determina cuánto se puede reducir el volumen). A continuación, trunca el volumen del sistema de archivos, lo que reduce su tamaño y, a continuación, trunca la partición o el volumen dinámico.

En casi todos los casos, habrá algunos archivos que son inmóviles (es decir, archivos que no se pueden mover). Por ejemplo, es probable que los archivos de metadatos del sistema de archivos y del controlador de almacenamiento sean inmóviles. Por este motivo, la cantidad por la que se puede reducir un volumen suele ser menor que la cantidad total de espacio libre en el volumen.

El número y la colocación de archivos inmóviles pueden variar de un equipo a otro, incluso si ambos equipos están configurados de forma idéntica.

Es posible que un archivo sea temporalmente inmóvil. Por este motivo, una aplicación puede recuperar espacio adicional si llama a este método una segunda vez con los mismos parámetros.

Si los parámetros ullDesiredNumberOfReclaimableBytes y ullMinNumberOfReclaimableBytes son cero, el método Shrink reducirá el volumen tanto como sea posible.

Las operaciones de reducción y ampliación solo se admiten en volúmenes NTFS y RAW.

Use este método para reducir el sistema de archivos y el volumen. Si VDS no puede reducir el volumen, detiene la operación sin reducir el sistema de archivos.

Solo se puede realizar una operación de reducción o desfragmentación a la vez en cada volumen. Windows Server 2008 y Windows Vista: Solo se puede realizar una operación de reducción o desfragmentación a la vez en un equipo.

Los implementadores deben devolver un puntero a la interfaz IVdsAsync de este método, incluso si la llamada no inicia una operación asincrónica.

Este método es idéntico al método IVdsVolume::Shrink .

Puede usar el método IVdsVolumeShrink::QueryMaxReclaimableBytes para calcular el número de bytes que debe reclamar la operación de reducción. Sin embargo, QueryMaxReclaimableBytes puede devolver más bytes de los que realmente están disponibles.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado vds.h
Library Uuid.lib

Consulte también

IVdsVolume::Extend

IVdsVolumeShrink