【发布时间】:2016-04-10 15:24:11
【问题描述】:
许多现代存储类型使用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。
UNMAP 是 SCSI 命令,应用程序或系统可以通过它 与存储堆栈和磁盘进行通信,即某个扇区或 当前未使用的扇区,包括 以前被后来删除的文件使用。
所以这应该是可能的。不幸的是,我找不到Disk Management Control Code 或磁盘管理功能来获取它。也许有人知道如何获得它?
【问题讨论】:
-
我认为没有任何标准方法。底层存储可以以它喜欢的任何方式实现精简配置。 Trim 和 Unmap 允许操作系统向存储设备提供信息,而不是相反。
-
如果您有 SCSI 驱动器,SBC-3 中引入的 GET LBA STATUS 命令是从设备本身检索低级映射的方法。
-
@gubblebozer 谢谢!这是可以接受的。看起来 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 可以完成这项工作
标签: windows winapi storage virtualization scsi