【问题标题】:How to determine what bloks are allocated for the disk device?如何确定为磁盘设备分配了哪些块?
【发布时间】: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


【解决方案1】:

就像 gubblebozer 做了一个提示 - SBC-3 中引入的GET LBA STATUS 命令是从设备本身检索低级映射的方法。来自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.

看起来这可以在IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 的帮助下完成 然后DEVICE_DATA_SET_LB_PROVISIONING_STATE 结构将包含一个位图 平板分配。

【讨论】:

    猜你喜欢
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    相关资源
    最近更新 更多