共用方式為


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

已開啟虛擬磁碟的句柄,必須使用傳遞至 OpenVirtualDiskVirtualDiskAccessMask 參數中的 VIRTUAL_DISK_ACCESS_METAOPS 旗標開啟。 如需如何開啟虛擬磁碟的詳細資訊,請參閱 OpenVirtualDisk 函 式。

[in] Flags

必須是COMPACT_VIRTUAL_DISK_FLAG列舉 (0) COMPACT_VIRTUAL_DISK_FLAG_NONE值。

[in, optional] Parameters

包含壓縮參數數據之有效 COMPACT_VIRTUAL_DISK_PARAMETERS 結構的選擇性指標。

[in, optional] Overlapped

如果需要異步操作,則為有效 OVERLAPPED 結構的選擇性指標。

傳回值

要求的狀態。

如果函式成功,傳回值會 ERROR_SUCCESS

如果函式失敗,傳回值就是錯誤碼。 如需詳細資訊,請參閱 系統錯誤碼

備註

壓縮只能在可動態擴充或差異的虛擬磁碟上執行。

壓縮類型有兩種。

  • 第一個類型檔系統感知壓縮會使用NTFS檔案系統來判斷可用空間。 做法是將 VHD 附加為唯讀裝置,方法是在傳遞至 OpenVirtualDiskVirtualDiskAccessMask 參數中包含VIRTUAL_DISK_ACCESS_METAOPSVIRTUAL_DISK_ACCESS_ATTACH_RO旗標、藉由呼叫 AttachVirtualDisk 附加 VHD,以及附加 VHD 時呼叫 CompactVirtualDisk。 在壓縮完成之前卸離 VHD 可能會導致壓縮在完成之前傳回失敗, (類似於取消壓縮) 。
  • 第二種類型文件系統無關壓縮並不涉及文件系統,而是只尋找完全填入零的 VHD 區塊, (0) 。 做法是在傳遞至 OpenVirtualDiskVirtualDiskAccessMask 參數中包含 VIRTUAL_DISK_ACCESS_METAOPS 旗標,以及呼叫 CompactVirtualDisk
檔系統感知壓縮是最有效率的壓縮類型,但先使用檔案系統感知壓縮,後面接著無從驗證的檔系統壓縮會產生最小的 VHD。

虛擬磁碟上的壓縮作業可以安全地中斷,稍後再重新執行。 重新開啟已中斷的虛擬磁碟檔案可能會導致在開啟時減少虛擬磁碟檔案的大小。

壓縮可能會需要大量 CPU 和 /或 I/O 密集,視虛擬磁碟的大小和需要行動的區塊數目而定。

CompactVirtualDisk 函式會在與呼叫端相同的安全性內容中,於虛擬磁碟上執行。

規格需求

需求
最低支援的用戶端 Windows 7
最低支援的伺服器 Windows Server 2008 R2
目標平台 Windows
標頭 virtdisk.h
程式庫 VirtDisk.lib
Dll VirtDisk.dll

另請參閱

關於 VHD

VHD 參考