テクノロジーガイド

USB/IP のクライアントへのインストールと使用方法

2 min read チュートリアル 更新されました 27 Sep 2025
USB/IP クライアントのインストールと使用手順
USB/IP クライアントのインストールと使用手順

目的と想定読者

このガイドは、OpenSUSE 系などの Linux クライアント上で USB/IP をインストールし、リモートの USB デバイスを接続・切断する手順を示します。システム管理者やローカルで物理的に接続できない USB デバイスを利用したい開発者が対象です。

重要: 以下の手順は root 権限を前提とします。

前提条件

  • サーバー側で USB/IP サービス(usbip)が動作しており、ネットワーク経由でデバイスを共有していること。
  • サーバーの IP アドレスを把握していること(例: 192.168.0.100)。
  • クライアントとサーバー間のファイアウォールで TCP 3240 ポートが許可されていること(必要に応じてネットワーク管理者に確認)。

クライアントに usbip をインストールする

まずクライアントに usbip をインストールします。サーバーと同様の手順です。

yast2 -i usbip

usbip は既知の USB デバイス一覧(usb.ids)を /usr/share/hwdata に期待しますが、OpenSUSE 11.2 では /usr/share/usbip/usb.ids に置かれているため、シンボリックリンクを作成します。

mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/

次に vhci-hcd カーネルモジュールを読み込みます。

modprobe vhci-hcd

読み込みが成功したか確認します。

lsmod | grep vhci_hcd

期待される出力例(環境により数字やモジュール名の順序は異なる場合があります):

client1:~ # lsmod | grep vhci_hcd
vhci_hcd               26576  0
usbip_common_mod       25232  1 vhci_hcd
client1:~ #

起動時に自動でモジュールを読み込む設定

再起動時にも自動でモジュールを読み込むには /etc/sysconfig/kernel の MODULES_LOADED_ON_BOOT 行に追加します。エディタで開きます。

vi /etc/sysconfig/kernel

ファイルの該当部(例):

[...]
## Type:                string
## ServiceRestart:      boot.loadmodules
#
# This variable contains the list of modules to be loaded
# once the main filesystem is active
# You will find a few default modules for hardware which
# can not be detected automatically.
#
MODULES_LOADED_ON_BOOT="vhci-hcd"
[...]

設定変更後は SuSEconfig を実行します。

SuSEconfig

サーバーに接続して利用可能な USB デバイスを一覧表示する

サーバー(例: 192.168.0.100)に接続して利用可能なリモート USB デバイスを一覧表示します。

usbip -l 192.168.0.100

出力例(SanDisk の USB メモリが見つかる場面):

client1:~ # usbip -l 192.168.0.100
- 192.168.0.100
2-5: SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
: /sys/devices/pci0000:00/0000:00:04.1/usb2/2-5
: (Defined at Interface level) (00/00/00)
:  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

client1:~ #

BUSID(例: 2-5)をメモしておきます。

リモート USB デバイスをクライアントにアタッチする

特定のデバイスをクライアントにアタッチ(接続)します。BUSID を指定して実行します。

usbip -a 192.168.0.100 2-5

実行例出力:

client1:~ # usbip -a 192.168.0.100 2-5
8 ports available

port 0 attached
client1:~ #

アタッチ後、lsusb でローカル接続されたように見えるか確認します。

lsusb

出力例:

client1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
client1:~ #

この状態で、リモート USB デバイスをローカルと同様にマウント、フォーマット、読み書きできます。

リモート USB デバイスの切断

クライアント側で使用をやめるときはデタッチします。まずポート情報を確認します。

usbip --port

出力例(ポート 00 が使用中):

client1:~ # usbip --port
8 ports available

Port 00:  at High Speed(480Mbps)
SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
1-1 -> usbip://192.168.0.100:3240/2-5  (remote devid 00020002 (bus/dev 002/002))
1-1:1.0 used by usb-storage
/sys/devices/platform/vhci_hcd/usb1/1-1/1-1:1.0/host4/scsi_host/host4/device
Port 01: 
Port 02: 
Port 03: 
Port 04: 
Port 05: 
Port 06: 
Port 07: 
client1:~ #

ポート番号を指定してデタッチします(例: 00)。

usbip -d 00

実行例:

client1:~ # usbip -d 00
8 ports available

port 0 detached
client1:~ #

デタッチ後、lsusb に表示されなくなることを確認します。

client1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~ #

サーバー側での再バインド(サーバー上でデバイスをローカルに戻す)

サーバー側では BUSID(例: 2-5)を指定してデバイスをローカルにバインドし、ネットワーク経由で利用できないようにできます(–other オプションを使用)。

サーバーで実行:

bind_driver --other 2-5

出力例:

server1:~ # bind_driver --other 2-5
 (process:3484): DEBUG: write "del 2-5" to /sys/bus/usb/drivers/usbip/match_busid
 Message: bind 2-5 to other drivers than usbip, complete!
server1:~#

この操作によりクライアント側ではデバイスが見えなくなります。

よくある問題とトラブルシューティング

  • デバイスが一覧に出ない
    • サーバー側で usbip が起動しているか確認する(プロセス、ログ)。
    • サーバー IP やネットワーク接続を再確認する。
    • ファイアウォールで TCP ポート 3240 が許可されているか確認する。
  • modprobe しても vhci-hcd が見えない
    • カーネルバージョンやカーネルモジュール名を確認する。
    • カーネルヘッダや必要なパッケージがインストールされているか確認する。
  • アタッチできない/ポートが足りない
    • 別の client から既に同じデバイスが使用されていないか確認する。
    • usbip –port でポート状態を確認し、不要な接続を切断する。

重要: ネットワーク経由でストレージデバイスを使用する場合、データ整合性とパフォーマンスに注意してください。並列アクセスや不意な切断はデータ損失の原因になります。

管理者向けチェックリスト

  • サーバーの usbip デーモンが稼働している
  • サーバー IP と BUSID を取得済み
  • クライアントで usbip パッケージがインストール済み
  • vhci-hcd モジュールを読み込んでいる
  • ファイアウォールで TCP/3240 を開放済み
  • 使用後に安全にデタッチしてからサーバー側で再バインドする

ミニ手順(速習用)

  1. クライアントにインストール: yast2 -i usbip
  2. シンボリックリンク作成(OpenSUSE の場合)
  3. modprobe vhci-hcd
  4. usbip -l でデバイス確認
  5. usbip -a でアタッチ
  6. 使用後に usbip -d でデタッチ
  7. サーバーで bind_driver –other を実行

コマンド チートシート

  • インストール: yast2 -i usbip
  • モジュール読み込み: modprobe vhci-hcd
  • モジュール確認: lsmod | grep vhci_hcd
  • 起動時設定編集: vi /etc/sysconfig/kernel
  • サーバー一覧表示: usbip -l
  • アタッチ: usbip -a
  • ポート一覧: usbip –port
  • デタッチ: usbip -d
  • サーバーでローカルにバインド: bind_driver –other

1行用語集

  • BUSID: サーバー上の USB デバイス識別子(例: 2-5)。
  • vhci-hcd: クライアント側の仮想 USB ホストコントローラドライバ。これによりリモート USB がローカルに見える。

まとめ

  • クライアントで usbip をインストールし、vhci-hcd を読み込めばリモート USB をローカルと同じように扱えます。
  • 利用後は必ずデタッチしてサーバー側で再バインドしておくことで安全に管理できます。
  • ネットワークとファイアウォールの設定、ファイルシステムの整合性に注意してください。

参考リンク

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定