이 가이드는 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에서 사라진다.
간단한 점검 절차(미니 방법론)
- 패키지 설치 및 심볼릭 링크 생성
- vhci-hcd 로드 및 자동로드 설정
- usbip -l로 장치 확인
- usbip -a로 장치 연결
- lsusb로 장치 확인 및 사용
- usbip –port로 포트 확인 후 usbip -d로 분리
- 서버에서 bind_driver –other로 복원
1줄 용어집
- BUSID: 서버에서 장치를 구분하는 식별자(예: 2-5).
- vhci-hcd: 클라이언트 측 가상 USB 호스트 컨트롤러 모듈.
- bind_driver: 서버에서 장치를 로컬 드라이버로 바인드하는 유틸리티.
참고 링크
- USB/IP Project: http://usbip.sourceforge.net/
- OpenSUSE: http://www.opensuse.org/
요약
이 가이드는 OpenSUSE에서 usbip를 설치하고 vhci-hcd 모듈을 사용해 원격 USB 장치를 클라이언트로 연결·분리하는 전체 절차를 다룹니다. 설치, 모듈 로드, 연결 확인, 분리, 서버 측 복원 방법과 문제해결 팁, 대안 및 체크리스트를 포함합니다.