Как создать сопоставленное устройство с определенным размером сектора?

#linux-kernel #linux-device-driver #block-device #device-mapper

Вопрос:

Я реализовал свою собственную цель сопоставления устройств, и я могу создать сопоставленное устройство с dmsetup create помощью команды.

Проблема в том, что размер сектора для этого устройства становится по умолчанию 512 байт, и я хотел бы изменить его на 4096 байт, как у целей dm-verity.

Например, ниже приведен размер сектора для устройства dm-verity, и fdisk сообщает о 4096 байтах:

 $sudo fdisk -l /dev/mapper/dmv 
Disk /dev/mapper/dmv: 8 KiB, 8192 bytes, 2 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
 

Ниже приведен размер сектора для моей собственной цели, и fdisk сообщает о 512 байтах:

 sudo fdisk -l /dev/mapper/my-target 
Disk /dev/mapper/my-target: 8 KiB, 8192 bytes, 16 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
 

Как я могу установить размер сектора для своей цели сопоставления устройств? Я не смог найти, где это сделано в libdevmapper или источнике cryptsetup для случая dm-verity.

Ура!

Комментарии:

1. Я думаю, вам нужно сделать это в io_hints обработчике для struct target_type .

2. Спасибо за ответ, Йен. Я добавил обработчик io_hints для типа структуры target_type, однако одного этого обработчика было недостаточно. Мне также пришлось добавить обработчик iterate_devices, чтобы установить размер сектора 4096B. Зачем также нужны iterate_devices? Как и где используется этот обработчик?