2015-11-17 5 views
1

Я пытаюсь получить доступ к блочному устройству (скажем/dev/sdb) с помощью libaio. Я работаю правильно, но мне было интересно, как выполнить FUA (Force Unit Access), используя API libaio.Отправка запросов FUA с использованием libaio в Linux

Должен сказать, что документация, которую я нашел по этому вопросу, довольно бедна, надеюсь, что один из вас сможет мне помочь.

ответ

1

Вы не можете, к сожалению. Интерфейс слишком ограничен. Но то, что вы должны сделать, это использовать SG_IO ioctl() для SYNCHRONIZE CACHE (10) или (16). То есть, если ваше устройство поддерживает эту команду. SYNCHRONIZE CACHE позволяет вам проинструктировать устройство о передаче целого ряда логических блоков в среду.

Обратитесь к странице справочника для команды sg_sync: http://manpages.ubuntu.com/manpages/trusty/man8/sg_sync.8.html

И загрузить последнюю sg3_utils источник здесь: http://sg.danny.cz/sg/sg3_utils.html (как сейчас, версии 1.41 http://sg.danny.cz/sg/p/sg3_utils-1.41.tar.xz). Посмотрите на источник команды sg_sync, чтобы узнать, как вызывается ioctl.

ioctl(SG_IO) блоки, но есть способ выполнить транзакцию с неблокирующими вводами-выводами. Обратитесь к SCSI Generic HOWTO: http://sg.danny.cz/sg/p/sg_v3_ho.html