Блок и символ устройства по сети на Linux

665
Dankó Dávid

Есть ли общий способ поделиться блоком или символьным устройством по сети?

Все связанные вопросы решаются с конкретным ответом, например: если вы хотите разделить диск между хостами, используйте NFS, SMB, iSCSI или AoE. Если вы хотите поделиться ТВ-тюнером или веб-камерой, транслируйте их с помощью mplayer или VLC. Или используйте USBIP, если вы хотите передать локальный USB на другой хост.

Но что, если я хочу поделиться LPT, RS232, аудио, микшером или ТВ-тюнером с возможностью естественного переключения каналов (я имею в виду ретрансляцию ioctl)?

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

Похоже, это не так сложно достичь. Единственный инструмент, официально не включенный в Linux, - это BUSE (блочное устройство для UserSpacE).

Это единственная причина, почему это решение не реализовано или есть какой-либо другой фактор, который может нарушить функциональность?

1
Ох уж ioctls может содержать указатели, которые действительны только в локальном адресном пространстве ... Dankó Dávid 8 лет назад 0
AT & T Remote File Sharing (RFS) предоставил эту возможность (полная семантика файловой системы Unix, включая обмен специальными файлами по сети). NFS оказался более популярным, а RFS перестала появляться в Solaris после 2.3. Я не знаю ни портов LInux, ни продолжающихся разработок. Я думаю, вы найдете, что это легко сделать на 90% и очень трудно до последних 10%. mpez0 8 лет назад 2

1 ответ на вопрос

1
Benoit-Pierre DEMAINE

Вы можете поделиться блоками с "NBD"

ls -l /dev/ | grep -e "^b" 

Мне удалось воспроизвести звук над самбой; это было очень давно, когда в звуке все еще использовались необработанные блоки (до того, как ALSA стала популярной). Таким образом, самба все еще может работать для каких-то вещей. IIRC, я также смог читать CDROM напрямую через samba, но из памяти запись CD не удалась.

У меня нет решения для символов.

LPT не может быть разделен по сети, потому что он использует DMA.

UART (серийный) можно, используя NBD. Вам может понадобиться локально испортить конфигурацию порта; но поток может путешествовать через НБД.

Для звука, до Alsa, Самба сделала это. Есть различные недавние проекты, обращающиеся с этим; Вряд ли dmix это делает, но попробуйте JACK, NAS, Pulseaudio.

ТВ-тюнер, попробуйте самбу, но ожидайте сбоя. Вместо того, чтобы пытаться открыть общий доступ к узлу видеоустройства, лучше использовать общий доступ к USB-устройству; в частности, проект «USB Wireless» имеет реализации в Linux, которые могут обрабатывать инкапсуляцию через Ethernet. Или USBIP. Совместное использование узла устройства, если намного сложнее.

Тот же ответ для веб-камеры, если вы не пытаетесь поделиться видео потоком (vlc, mplayer, ffmpeg ...)