기술 가이드

USB/IP 클라이언트 설치 및 사용

4 min read 시스템관리 업데이트됨 27 Sep 2025
USB/IP 클라이언트 설치 및 사용 가이드
USB/IP 클라이언트 설치 및 사용 가이드

이 가이드는 OpenSUSE 클라이언트에서 usbip를 설치하고 원격 USB 장치를 연결·분리하는 방법을 단계별로 설명합니다. 필수 패키지 설치, vhci-hcd 커널 모듈 로드, 원격 서버에서 장치 목록 확인, 장치 연결 및 분리 절차와 운영자용 확인항목·문제해결 팁을 제공합니다.

개요

USB/IP는 네트워크를 통해 USB 장치를 공유하도록 해주는 리눅스 프로젝트입니다. 클라이언트에서는 원격 USB 장치를 로컬 장치처럼 마운트하거나 포맷하고 사용할 수 있습니다. 이 문서는 OpenSUSE 환경(예: 11.2)에서의 구체적 절차와 주의점을 다룹니다.

중요 용어 한 줄 정의

  • usbip: 네트워크로 USB 장치를 공유하는 도구.
  • vhci-hcd: 클라이언트 쪽 가상 호스트 컨트롤러 인터페이스(Virtual Host Controller Interface) 커널 모듈.
  • BUSID: 서버에서 USB 장치의 식별자(예: 2-5).

사전 준비

  • 클라이언트와 usbip 서버 간 네트워크 연결(예: 서버 IP 192.168.0.100).
  • 루트 권한 또는 sudo 사용 권한.
  • OpenSUSE 배포판의 경로 차이(예: usb.ids 경로)가 있을 수 있음.

Important

경로와 명령은 배포판 버전에 따라 다를 수 있습니다. 명령 실행 전에 백업을 권장합니다.

1. 클라이언트에 usbip 설치

먼저 클라이언트에 usbip 패키지를 설치합니다. 서버에서의 설치와 동일합니다:

yast2 -i usbip

OpenSUSE 11.2의 경우 usbip가 기대하는 usb.ids 파일 위치가 /usr/share/hwdata인 반면 실제로는 /usr/share/usbip/usb.ids에 있을 수 있습니다. 이 경우 심볼릭 링크를 만듭니다:

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

2. vhci-hcd 커널 모듈 로드

클라이언트에서 다음을 실행하여 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로 편집:

vi /etc/sysconfig/kernel

파일 안에 다음과 같이 MODULES_LOADED_ON_BOOT를 지정합니다:

[...]
## 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

3. 서버의 장치 목록 조회 및 연결

서버(예: 192.168.0.100)에 연결하여 사용 가능한 원격 USB 장치 목록을 가져옵니다:

usbip -l 192.168.0.100

(192.168.0.100은 usbip 서버의 IP 주소입니다.)

예시 출력(SanDisk 플래시 드라이브를 포함):

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)를 클라이언트에 연결하려면 다음을 실행합니다:

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 장치를 로컬 장치처럼 마운트, 포맷, 읽기/쓰기할 수 있습니다.

4. 원격 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:~ #

서버에서 해당 USB 장치를 로컬 시스템에 다시 바인드하려면 BUSID(예: 2-5)를 사용합니다(–other 옵션은 장치를 usbip가 아닌 다른 드라이버에 바인드하여 네트워크로 제공되지 않게 합니다):

server1:

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:~#

클라이언트에서 lsusb로 다시 확인하면 원격 장치가 더 이상 보이지 않아야 합니다:

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

문제해결 팁

  • 연결 실패 또는 목록이 보이지 않을 때
    • 서버 IP와 포트(기본 3240)가 방화벽에서 허용되는지 확인합니다.
    • 서버에서 usbip 데몬(또는 관련 서비스)이 실행 중인지 확인합니다.
    • 클라이언트의 vhci-hcd 모듈이 로드되었는지 확인합니다(lsmod).
    • 서버와 클라이언트의 usbip/커널 버전 불일치가 문제를 일으킬 수 있습니다. 가능한 경우 동일한 커널 모듈 버전을 사용하세요.
  • 권한 문제
    • root 권한으로 명령을 실행하세요. 일부 명령은 루트만 사용 가능합니다.
  • 로그 확인
    • dmesg, journalctl 또는 /var/log/messages에서 관련 오류를 확인합니다.
  • 네트워크 진단
    • ping, nc 또는 tcpdump로 네트워크 연결과 포트 사용 여부를 확인합니다.

Counterexample — 언제 실패할 수 있는가

  • USB 장치가 서버에서 이미 로컬 드라이버에 바인드되어 있고 usbip로 공유되지 않은 경우.
  • 네트워크 지연이 매우 큰 환경에서는 대용량 데이터 전송 시 성능이 저하됩니다.
  • Windows 클라이언트와의 호환성은 보장되지 않습니다(리눅스-리눅스 환경 권장).

대안 접근법

  • 네트워크를 통한 파일 공유(NFS, Samba)로 대체할 수 있습니다. 특히 대용량 파일 교환이 목적이면 파일 공유가 더 효율적일 수 있습니다.
  • usbredir, SPICE 등 가상화 환경에서의 USB 리디렉션 기능을 검토하십시오.

운영자용 체크리스트

클라이언트 담당자

  • usbip 패키지 설치 완료
  • vhci-hcd 모듈 로드 및 부팅 시 자동 로드 설정
  • 서버 IP와 BUSID 확인
  • 장치 연결 후 lsusb로 확인
  • 분리 후 lsusb로 제거 확인

서버 담당자

  • usbip 서버 데몬 구동 확인
  • 공유할 USB 장치의 BUSID 확인
  • 필요 시 bind_driver로 로컬 바인드 복원

검증 기준

  • 클라이언트에서 usbip -l 명령으로 서버 장치가 표시된다.
  • usbip -a로 연결 후 lsusb에 원격 장치가 로컬 장치처럼 표시된다.
  • usbip -d로 분리하면 lsusb에서 사라진다.

간단한 점검 절차(미니 방법론)

  1. 패키지 설치 및 심볼릭 링크 생성
  2. vhci-hcd 로드 및 자동로드 설정
  3. usbip -l로 장치 확인
  4. usbip -a로 장치 연결
  5. lsusb로 장치 확인 및 사용
  6. usbip –port로 포트 확인 후 usbip -d로 분리
  7. 서버에서 bind_driver –other로 복원

1줄 용어집

  • BUSID: 서버에서 장치를 구분하는 식별자(예: 2-5).
  • vhci-hcd: 클라이언트 측 가상 USB 호스트 컨트롤러 모듈.
  • bind_driver: 서버에서 장치를 로컬 드라이버로 바인드하는 유틸리티.

참고 링크

요약

이 가이드는 OpenSUSE에서 usbip를 설치하고 vhci-hcd 모듈을 사용해 원격 USB 장치를 클라이언트로 연결·분리하는 전체 절차를 다룹니다. 설치, 모듈 로드, 연결 확인, 분리, 서버 측 복원 방법과 문제해결 팁, 대안 및 체크리스트를 포함합니다.

공유하기: X/Twitter Facebook LinkedIn Telegram
저자
편집

유사한 자료

Mac에서 비운 휴지통 복구: 단계별 가이드
데이터 복구

Mac에서 비운 휴지통 복구: 단계별 가이드

AI 요약의 가짜 전화번호 사기 방지 가이드
사이버 보안

AI 요약의 가짜 전화번호 사기 방지 가이드

안드로이드에서 iMessage 사용하기 — AirMessage 가이드
모바일 가이드

안드로이드에서 iMessage 사용하기 — AirMessage 가이드

Windows Server 2019 안전 모드로 부팅하는 방법
서버 관리

Windows Server 2019 안전 모드로 부팅하는 방법

Snapchat 바로가기 만들기 및 관리 가이드
소셜미디어

Snapchat 바로가기 만들기 및 관리 가이드

USB/IP 클라이언트 설치 및 사용 가이드
시스템관리

USB/IP 클라이언트 설치 및 사용 가이드