2016-04-10 4 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.Как определить, какие блоки выделены для дискового устройства?

Unmap является командой SCSI, с помощью которого приложение или система может общаться в стек для хранения и диск, что определенный сектор или диапазона секторов в настоящее время не используется, в том числе секторов, которые были ранее в использование файлов, которые впоследствии были удалены.

Так что это должно быть возможно. К сожалению, мне не удалось найти Disk Management Control Code или функцию управления дисками, чтобы получить его. Может быть, кто-то знает, как это получить?

+1

Я не думаю, что есть стандартный метод. Базовое хранилище может реализовать тонкую настройку любым способом. Trim и Unmap позволяют ОС предоставлять информацию на устройство хранения, а не наоборот. –

+1

Если у вас есть диски SCSI, команда GET LBA STATUS, введенная в SBC-3, является способом получения низкоуровневых сопоставлений с самого устройства. –

+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. 

Похоже, это может быть сделано с помощью IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES затем DEVICE_DATA_SET_LB_PROVISIONING_STATE структура будет содержать битовую карту распределения плиты.

 Смежные вопросы

  • Нет связанных вопросов^_^