Linux 시스템을 USB 드라이브처럼 보이게 만드는 방법

Linux 시스템을 USB 드라이브처럼 보이게 만드는 방법

CentOS 6.5 기준을 기반으로 맞춤형 NAS를 구축했습니다. USB 포트를 통해 액세스하려면 이 NAS의 스토리지가 필요합니다. 네트워크 연결을 사용할 수 없습니다. 내 전화기는 이것을 할 수 있고, 리눅스 박스도 이것을 할 수 있는 방법이 있어야 합니다. 다음과 유사한 질문을 찾았습니다. Linux 컴퓨터의 USB 포트를 대용량 저장 장치처럼 보이게 만들 수 있나요? 이는 기본적으로 USB 장치가 클라이언트 모드에 있어야 한다고 주장하면서 이 작업을 수행할 수 없음을 의미합니다. 이것은 말이 되지 않습니다. 요청은 실제로 서버 모드의 다른 구현/처리에 대한 것입니다. 분명히 어떤 종류의 드라이버 수정이 필요합니다. 이미 이 작업을 수행하는 BusyBox 등을 사용하는 외부 드라이브 베이가 있을 것 같지만 이를 수행하는 데 필요한 것이 정확히 무엇인지 찾지 못했습니다.

답변1

USB는 원래 스타 토폴로지로 설계되었습니다. 중앙에는호스트 컨트롤러전체 버스를 관리합니다. 거기에서 연결은 외부로 확장됩니다.장비그리고바퀴통, 둘 다 관리하려면 호스트 컨트롤러가 필요합니다. 그렇지 않으면 트래픽이 발생하지 않습니다. 기본적으로 호스트 컨트롤러는 마스터 컨트롤러이고 버스의 다른 모든 컨트롤러는 슬레이브 컨트롤러입니다.

단순히 소프트웨어를 변경하는 것만으로는 충분하지 않습니다. 호스트 컨트롤러에는 슬레이브 장치와 다른 유형의 USB 인터페이스 칩이 있으며, 호스트 컨트롤러는 슬레이브 장치로 작동하려면 하드웨어 변경이 필요합니다.

스마트폰과 기타 모바일 기기의 출현으로 사람들은 이러한 문제를 발견하고 있으며,USB 휴대사양이 개발되었습니다. 여기에서 이중 역할 장치의 개념이 도입되었습니다. 이를 위해서는 마스터 및 슬레이브 역할을 지원하기 위한 호스트 컨트롤러 칩의 수정과 한 장치에서 다른 장치로 마스터 역할 전환을 협상하기 위한 새로운 하위 프로토콜이 필요했습니다.

불행하게도 USB-On-The-Go 기능을 갖춘 호스트 컨트롤러 칩은 데스크톱 및 서버 마더보드가 아닌 스마트폰, 태블릿 및 기타 모바일 장치에서만 발견되는 경향이 있습니다.

NAS에 슬레이브 역할을 할 수 있는 USB 포트 하드웨어가 있는 경우 문제는 매우 간단합니다. Linux 커널은 이미 장치 측 USB도 지원합니다(보다 일반적인 호스트 측 지원과 반대). 그러나 CentOS 6.x에는 이러한 기능이 활성화되어 있지 않다고 생각하므로 "USB Gadget Support" 하위 시스템을 활성화하여 사용자 정의 커널을 컴파일해야 할 수도 있습니다. 이 하위 시스템에서는 장치측 USB 하드웨어용 특정 드라이버와 USB 대용량 저장소 프로토콜용 장치측 드라이버를 활성화해야 합니다.

불행히도 장치 측에는 UHCI/OHCI/EHCI/XHCI와 같은 인터페이스 표준이 없는 것 같습니다. 모든 장치 측 컨트롤러 칩 디자인은 고유한 눈송이처럼 보이며 어떤 칩이 장치에 사용되는지 정확히 알아야 합니다. NAS .

드라이버 문제가 해결되면 기술적인 문제가 하나 더 있습니다. USB 대용량 저장소 액세스는 NFS와 같은 파일 수준이 아닌 SATA와 마찬가지로 저장 장치의 개별 블록에 액세스하는 저수준 프로토콜입니다. 따라서 NAS 장치는 공유를 중지하고 USB를 통해 제공하는 모든 저장소를 마운트 해제해야 합니다. 왜냐하면 NAS 장치에 액세스하는 시스템은 USB 저장소의 파일 시스템을 완전히 제어할 수 있다고 가정하고 파일 시스템이 작동하는 동안 NAS 장치에서 변경한 모든 내용을 처리하기 때문입니다. 또는 네트워크를 통해 NAS에 액세스하는 다른 장치도 손상됩니다.

이 문제를 해결하는 한 가지 방법은 USB 공유 저장소에서 클러스터 파일 시스템을 실행하는 것입니다. 클러스터 파일 시스템(예: GFS 또는 OCFS2)은 이러한 종류의 다중 액세스를 위해 설계되었지만 참여하는 모든 시스템이 서로 협력하고 통신해야 합니다. 이로 인해 약간의 복잡성이 추가됩니다. 또 다른 접근 방식은 USB 대용량 저장 프로토콜을 사용하지 않고 USB MTP(미디어 전송 프로토콜) 또는 더 간단한 버전인 PTP(사진 전송 프로토콜)를 사용하는 것입니다. 두 프로토콜 모두 블록 수준이 아닌 파일 수준에서 작동합니다. USB 대용량 저장 장치. 이를 통해 NAS는 USB 공유가 활성화된 동안 공유 파일 시스템의 전반적인 제어를 유지할 수 있으므로 동시에 네트워크를 통해 파일 시스템을 계속 공유할 수 있습니다.

답변2

NAS의 USB 하드웨어가 USB 클라이언트 모드 작동을 지원하는 경우 다음을 사용할 수 있습니다.Linux-USB 가젯 API 프레임워크(또는 그것에 기초한 것).

관련 정보