2016-04-10 9 views
2

最新のストレージタイプの多くは、ブロックを割り当てるためにThin provisioningを使用します。ディスク装置にはBlock allocation mapを取得する必要があります。ボリュームビットマップを取得するにはFSCTL_GET_VOLUME_BITMAPがありますが、それはファイルシステム固有であり、私はFS固有ではないアプローチが必要です。 Windows 8以降Windows is sending "TRIM and Unmap" hints to storage media to track allocated blocksディスクデバイスに割り当てられるblokの決定方法は?

UNMAPは、アプリケーションまたはシステムが ストレージスタックと特定のセクタまたはセクタの 範囲で以前に たセクタを含む、現在使用されていないディスクに通信するためのSCSIコマンドであります後で削除されたファイルによって使用されます。

これは可能です。残念ながら、私はそれを得るためにDisk Management Control Codeまたはディスク管理機能を見つけることができませんでした。多分誰かがそれを得る方法を知っている?

+1

標準的な方法はありません。基盤となるストレージは、任意の方法でシンプロビジョニングを実装できます。 TrimとUnmapを使用すると、OSはストレージデバイスに情報を提供することができます。 –

+1

SCSIドライブがある場合、SBC-3に導入されたGET LBA STATUSコマンドは、デバイス自体から低レベルのマッピングを取得する方法です。 –

+0

@gubblebozerありがとうございました!それは受け入れることができます。 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTESがこの作業を実行できるように見えます –

答えて

1

gubblebozerはヒントを作成しました。GET LBA STATUS SBC-3で導入されたコマンドは、デバイス自体から低レベルのマッピングを取得する方法です。 Thin Provisioning

The application can call the IOCTL DSM allocation routine to send the SCSI 
command and retrieve the mapped or unmapped state of each slab in a particular 
range. If the LBA provisioning status returned does not describe the entire 
allocation range, the application sends another SCSI command to retrieve the 
provisioning status of the remaining LBA range. 

はこのように見えることから、その後DEVICE_DATA_SET_LB_PROVISIONING_STATE構造が スラブの割り当てのビットマップが含まれていますIOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES の助けを借りて行うことができます。

関連する問題