LINUX.ORG.RU

Эмуляция наличия жесткого диска в системе


0

1

Добрый день! Столкнулся со следующей проблемой при переходе на бездисковые (толстые) клиенты, где во время загрузки файловая система монтируется по NFS, а дальше все грузится как обычно.

Имеется в наличии проприетарная программа, которая привязывается к компьютеру по маку, имени и серийнику винта. Проблема в том, что в бездисковой машине винта-то нет :) Разработчики проги вежливо посылают в лес со словами «возможно, мы когда-нибудь подумаем о том, чтобы такие ситуации разруливались корректно, но не сейчас». Оставлять болтаться винт в системнике только ради одной этой проги - глупо. Они бы (винты) в хозяйстве пригодились бы.

Внимание вопрос: можно как-нибудь эмулировать устройства /dev/hda или /dev/sda в системе и, желательно, иметь возможность влиять на серийный номер эмулируемого жесткого диска?

Заранее спасибо за советы.

Ответ на: комментарий от sdio

>> man losetup

>>> желательно, иметь возможность влиять на серийный номер эмулируемого жесткого диска

Серьёзно? А если программа ещё читает номер SCSI-командами, а не из /dev/disk/by-id/ или откуда-нибудь из /sys/block/, то одурачивание её может оказаться довольно нескучной затеей.

GotF ★★★★★
()
Ответ на: комментарий от sdio

До таких простых вещей я, как обычно, не додумался :)

GotF ★★★★★
()
Ответ на: комментарий от GotF

> Серьёзно? А если программа ещё читает номер SCSI-командами, а не из /dev/disk/by-id/ или откуда-нибудь из /sys/block/, то одурачивание её может оказаться довольно нескучной затеей.

Запатчить драйвера шины и девайса, чтобы они «находили» и эмулировали фейковый винт. И пусть хоть до посинения из юзерспейса проверяют, настоящий он или нет.

geekless ★★
()
Ответ на: комментарий от sdio

> LD_PRELOAD и своя функция ioctl

Это только если бинарник не статический.

geekless ★★
()

vhba

а вообще, тогда уж лучше iscsi заюзать.

madgnu ★★★★★
()
Ответ на: комментарий от GotF

вскрытие показало вот что: результат 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», но она не совпадает с серийником винта

brauntel
() автор топика
Ответ на: комментарий от brauntel

Дополнительное расследование выявило, что таки это серийник, но не такой, который в винде HDDScan показывается, а тот, что выдает в линуксе, например, команда scsiinfo -s /dev/sda А ioctl подозрительно похожа на команду inquire, запрашивающую 80-ю страницу с информацией об устройстве. Соответственно вопрос: как обойти?

brauntel
() автор топика
Ответ на: комментарий от brauntel

Ответом практически на все вопросы стал стандартный модуль ядра scsi_debug. Так что решение найдено.

brauntel
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.