Добрый день!
Столкнулся со следующей проблемой при переходе на бездисковые (толстые) клиенты, где во время загрузки файловая система монтируется по NFS, а дальше все грузится как обычно.Имеется в наличии проприетарная программа, которая привязывается к компьютеру по маку, имени и серийнику винта. Проблема в том, что в бездисковой машине винта-то нет :)
Разработчики проги вежливо посылают в лес со словами "возможно, мы когда-нибудь подумаем о том, чтобы такие ситуации разруливались корректно, но не сейчас".
Оставлять болтаться винт в системнике только ради одной этой проги - глупо. Они бы (винты) в хозяйстве пригодились бы.Внимание вопрос: можно как-нибудь эмулировать устройства /dev/hda или /dev/sda в системе и, желательно, иметь возможность влиять на серийный номер эмулируемого жесткого диска?
Заранее спасибо за советы.
>[оверквотинг удален]
> время загрузки файловая система монтируется по NFS, а дальше все грузится
> как обычно.
> Имеется в наличии проприетарная программа, которая привязывается к компьютеру по маку,
> имени и серийнику винта. Проблема в том, что в бездисковой машине
> винта-то нет :)
> Разработчики проги вежливо посылают в лес со словами "возможно, мы когда-нибудь подумаем
> о том, чтобы такие ситуации разруливались корректно, но не сейчас".
> Оставлять болтаться винт в системнике только ради одной этой проги - глупо.
> Они бы (винты) в хозяйстве пригодились бы.
> Внимание вопрос: можно как-нибудь эмулировать устройства /dev/hda или /dev/sda в системекак-нибудь - можно.
> и, желательно, иметь возможность влиять на серийный номер эмулируемого жесткого диска?
Всё, что напишете - всё будет можно. Это опенсорс, тут можно много. )
> Заранее спасибо за советы.
Попробуйте сделать strace процесса проверки, увидеть, что пытается открывать программа, ну и далее.... создать что-то нужное - ноду устройства, файл, драйвер.
> Попробуйте сделать strace процесса проверки, увидеть, что пытается открывать программа,
> ну и далее.... создать что-то нужное - ноду устройства, файл, драйвер.результат strace (отфильтрованно из кучи мусора):
open("/dev/sda", O_RDONLY|O_NONBLOCK) = 12
ioctl(12, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 01, 80, 00, 24, 00], mx_sb_len=0, iovec_count=0, dxfer_len=36, timeout=0, flags=0, data[36]=["\x00\x80\x00\x0c\x31\x35\x32\x44\x32\x30\x33\x32\x39\x30\x30\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"], status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=20, duration=20, info=0}) = 0
close(12)= 0в хексе там получается строка "152D20329000" - это таки серийник, но не такой, который в винде HDDScan показывается, а тот, что выдает в линуксе, например, команда scsiinfo -s /dev/sda
А ioctl подозрительно похожа на команду inquire, запрашивающую 80-ю страницу с информацией об устройстве. Соответственно вопрос: как обойти?
>[оверквотинг удален]
> ioctl(12, SG_IO, {'S', SG_DXFER_FROM_DEV, cmd[6]=[12, 01, 80, 00, 24, 00], mx_sb_len=0,
> iovec_count=0, dxfer_len=36, timeout=0, flags=0, data[36]=["\x00\x80\x00\x0c\x31\x35\x32\x44\x32\x30\x33\x32\x39\x30\x30\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"],
> status=00, masked_status=00, sb[0]=[], host_status=0, driver_status=0, resid=20, duration=20,
> info=0}) = 0
> close(12)= 0
> в хексе там получается строка "152D20329000" - это таки серийник, но не
> такой, который в винде HDDScan показывается, а тот, что выдает в
> линуксе, например, команда scsiinfo -s /dev/sda
> А ioctl подозрительно похожа на команду inquire, запрашивающую 80-ю страницу с информацией
> об устройстве. Соответственно вопрос: как обойти?Можно написать драйвер, который будет создавать (обрабатывать запросы, а создавать можно и через mknod) устройство, и отдавать нужные фейковые ответы.
> Можно написать драйвер, который будет создавать (обрабатывать запросы, а создавать можно
> и через mknod) устройство, и отдавать нужные фейковые ответы.Ответом практически на все вопросы стал стандартный модуль ядра scsi_debug. Так что решение найдено. В самом сложном случае можно подправить исходники для более гибкого влияния на серийник, но и сейчас механизмы для этого там имеются.
>> Можно написать драйвер, который будет создавать (обрабатывать запросы, а создавать можно
>> и через mknod) устройство, и отдавать нужные фейковые ответы.
> Ответом практически на все вопросы стал стандартный модуль ядра scsi_debug. Так что
> решение найдено. В самом сложном случае можно подправить исходники для более
> гибкого влияния на серийник, но и сейчас механизмы для этого там
> имеются.Интересный модуль, надо посмотреть на него..