키보드에서 손을 떼지 않고 USB 장치를 분리하고 연결하는 5 가지 방법

많은 경우 컴퓨터를 사용할 때 USB 장치의 연결을 해제하고 (안전해야하는 경우) 즉시 파일을 복사하는 것을 잊었거나 데이터가 있는지 확인해야했습니다. 우리 단위에서. 이러한 경우 원격으로 작업 할 때 USB 드라이브를 가상으로 분리하는 것이 일반적으로 매우 유용합니다.

장치를 꺼냈을 때 장치 목록에 더 이상 표시되지 않지만 하드 드라이브 또는 펜 드라이브는 여전히 USB 포트로 연결되어 있으며 오늘날 많은 배포판에서 드라이브를 안전하게 꺼냈으므로 장치도 표시되지 않습니다. 우리는 할 수 없습니다 마운트 터미널에서. 가장 빠른 해결책은 케이블을 분리했다가 다시 연결하는 것입니다. 어떤 경우에는 일어나야하는 게으름 때문이거나 우리가 앞에 있지 않고 주변에 아무도없는 컴퓨터에 액세스하고 있기 때문에 할 수 없습니다.

USB 장치에 대한 정보

시작하기 전에 시스템에 연결된 USB 장치에 대한 정보를 얻는 방법을 살펴 보겠습니다. 이를 위해 우리는 lsusb, 현재 연결된 장치를 나열합니다. 나는 지금 내 컴퓨터에서 얻는 것에 대한 예를 넣었지만 아마도 당신이 얻는 것과는 매우 다를 수 있습니다.

$ lsusb 버스 002 장치 001 : ID 1d6b : 0003 Linux Foundation 3.0 루트 허브 버스 001 장치 006 : ID 8087 : 0a2a Intel Corp. 버스 001 장치 007 : ID 046d : c52b Logitech, Inc. Unifying 수신기 버스 001 장치 005 : ID 1a40 : 0101 Terminus Technology Inc. 허브 버스 001 장치 010 : ID 125f : c93a A-DATA Technology Co., Ltd. 4GB 펜 드라이브 버스 001 장치 003 : ID 04f2 : b424 Chicony Electronics Co., Ltd 버스 001 장치 001 : ID 1d6b : 0002 Linux Foundation 2.0 루트 허브

더 많은 정보를 원하면 모듈에 대한 정보가있는 트리 형태의 출력을 표시하는 -t 수정자를 사용할 수 있습니다.

$ lsusb -t / : 버스 02. 포트 1 : Dev 1, 클래스 = root_hub, 드라이버 = xhci_hcd / 8p, 5000M / : 버스 01. 포트 1 : Dev 1, 클래스 = root_hub, 드라이버 = xhci_hcd / 16p, 480M | __ 포트 4 : Dev 3, If 0, Class = Video, Driver = uvcvideo, 480M | __ Port 4 : Dev 3, If 1, Class = Video, Driver = uvcvideo, 480M | __ Port 5 : Dev 10, If 0, Class = 대용량 스토리지, 드라이버 = usb- 스토리지, 480M | __ 포트 6 : Dev 5, If 0, Class = Hub, Driver = hub / 4p, 12M | __ Port 4 : Dev 7, If 0, Class = Human Interface Device, Driver = usbhid, 12M | __ Port 4 : Dev 7, If 1, Class = Human Interface Device, Driver = usbhid, 12M | __ Port 4 : Dev 7, If 2, Class = Human Interface Device, Driver = usbhid, 12M | __ 포트 9 : Dev 6, If 0, Class = Wireless, Driver = btusb, 12M | __ Port 9 : Dev 6, If 1, Class = Wireless, Driver = btusb, 12M

더 많은 정보를 원하면 lsusb -v (출력이 매우 큽니다) 또한 다음과 같이 장치에 전달되는 최대 전력을 알 수 있습니다.

$ lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower"Bus 002 Device 001 : ID 1d6b : 0003 Linux Foundation 3.0 root hub MaxPower 0mA Bus 001 Device 006 : ID 8087 : 0a2a Intel Corp. MaxPower 100mA Bus 001 장치 007 : ID 046d : c52b Logitech, Inc. Unifying 수신기 MaxPower 98mA 버스 001 장치 005 : ID 1a40 : 0101 Terminus Technology Inc. 허브 MaxPower 100mA 버스 001 장치 010 : ID 125f : c93a A-DATA Technology Co., Ltd. 4GB 펜 드라이브 MaxPower 480mA 버스 001 장치 003 : ID 04f2 : b424 Chicony Electronics Co., Ltd MaxPower 500mA 버스 001 장치 001 : ID 1d6b : 0002 Linux Foundation 2.0 루트 허브 MaxPower 0mA

다른 매우 유용한 명령은 USB 장치, hwinfo또는 예를 들어 장치의 경로 (내부 / dev /)가있는 경우 시스템에 대해 가능한 모든 정보 및 통과해야하는 하위 시스템을 요청할 수 있습니다. 예를 들어 USB 하드 디스크를 연결하면 장치 사용 방법을 볼 수 있도록 SCSI 드라이버 (/ dev / sdX 용)가 필요하며 USB 포트를 통해 작동하는 USB 저장 드라이버도 필요합니다. 다른 중간 시스템 중에서 PCI 포트에 연결되는 허브. 우리가 볼 수있는 모든 것

$ udevadm 정보 --query = 경로 --name = / dev / sdX --attribute-walk

o

$ udevadm 정보 -a -n / dev / sdX

벤처를 원한다면 / 시스템 / 버스 / USB 모든 것을 살펴보면 많은 정보를 볼 수 있지만 다행히도 위의 명령은이 모든 정보를 분류합니다.

권한 및 장치

이 작업을 수행하려면 어떤 장치를 사용할 것인지 알아야합니다. 다시 연결. 이를 위해 다음을 실행할 수 있습니다.

$ dmesg | tail [Thu Nov 24 19:50:04 2016] sd 7 : 0 : 0 : 0 : 첨부 된 scsi 일반 sg3 유형 0 [798339.431677] sd 7 : 0 : 0 : 0 : [sdc] 15806464 512 바이트 논리 블록 : ( 8.09GB / 7.54GiB) [798339.431840] sd 7 : 0 : 0 : 0 : [sdc] 쓰기 방지 해제 됨 [798339.431848] sd 7 : 0 : 0 : 0 : [sdc] 모드 감지 : 00 00 00 00 [798339.431988] sd 7 : 0 : 0 : 0 : [sdc] 캐시 데이터 요청 실패 [798339.431996] sd 7 : 0 : 0 : 0 : [sdc] 드라이브 캐시 가정 : [798339.434157] sdc : sdc1 sdc2 [798339.446812] sd 7 : 0 : 0 : 0 : [sdc] 연결된 SCSI 이동식 디스크 [798360.808588] ISO 9660 확장 : Microsoft Joliet Level 3 [798360.809353] ISO 9660 확장 : RRIP_1991A

이 출력에서 ​​우리가 작업하는 장치가 SDC (sdc1 및 sdc2는 해당 디스크 내의 파티션입니다). 예를 들어이 장치를 사용할 것입니다. 귀하의 경우 어떤 계정이 있는지 시각화해야합니다.

아래 예에서는 sudo는 권한으로 명령을 실행하려면 뿌리. 충분한 권한을 가진 사용자가 있으면 충분합니다. 필요한 권한을 확인하려면 ls 장치 :

$ ls -latr / dev / sdc brw-rw ---- 1 루트 디스크 8, 32 Nov 24 19:50 / dev / sdc

소유자가 루트이고 그룹이 디스크. 사용자가 그룹 디스크에 속하는 것으로 충분합니다.

방법 1. CD / DVD처럼 취급

가장 간단합니다. 확실히 몇 년 동안 GNU / Linux를 사용해왔다면 CD-ROM이나 DVD로 작업 할 때 eject 명령을 사용했습니다. 음, eject는 CDROM을 여는 데 사용되고 eject -t는 트레이를 닫는 데 사용되었습니다. 음, USB 장치보다 먼저 이렇게하면 :

$ sudo 꺼내기 -t / dev / sdc

장치가 다시 연결된 것처럼 나타나야합니다.

방법 2. 연결 해제 및 가상 연결

일부 시스템 (하드웨어가 지원하는 한)에서 USB 장치를 안전하게 제거하면 장치의 전원이 중지되고 장치가 더 이상 나타나지 않습니다. 다음과 같은 경우와 동일합니다.

udisksctl 전원 끄기 -b / dev / sdc

이 경우, / dev / sdc 내 장치이고이 명령으로 가상 전원 차단을 시뮬레이션했습니다.

문제는 이제 / dev / sdc가 존재하지 않는다는 것입니다. 게다가 dmesg를 보면 다음과 같은 결과를 얻을 수 있습니다.

$ dmesg | 꼬리 [281954.693298] USB 1-5: USB 분리, 장치 번호 3

그래서 우리가 방법으로 시도하면 꺼내다 이거 작동 안 할거야. 참고 : 나는 강조했다 USB 1-5 그 이유를 곧 알게 될 것입니다.

원격으로 작업하는 경우 이것은 좋은 생각 일 수 있습니다. 백업에 USB 드라이브가 연결되어 있다고 상상해보십시오. 복사본을 만들 때 시스템이 연결된 디스크가 있다는 것을 아는 것이 좋지만, 한편으로는 디스크를 사용하지 않을 때는 에너지를 절약 디스크의 마모를 피할 수 있으므로 전류를 차단하는 것이 좋습니다. 악성 앱이 존재하는지 확인하지 않기를 바랍니다. 이 디스크는 감염되지 않도록합니다. (예, GNU / Linux에는 바이러스가 있습니다).

지금 우리는 어떻게 전류를 연결합니까?

우리는 USB 포트를 호출해야합니다. 허브 파워 (원래 프로젝트의 포크에 연결합니다. 여기에는 우리가 원하는 장치뿐만 아니라 더 많은 장치에서 전류를 제거 할 수있는 버그가 수정 되었기 때문입니다). 더 많은 프로젝트가 있습니다 (예 : uhubctl), 그러나 이것은 우리가 컴파일 할 때 종속성이 없으며 단지 hubpower.c 파일이기도합니다.
먼저 컴파일하고

$ gcc -o 허브파워 허브파워.c

이제 굵게 표시된 숫자를 기억하십니까? dmesg에? 음, 우리는 그것들을 사용할 것입니다. 다음과 같이 장치를 분리했다가 다시 연결해야합니다.

$ sudo ./hubpower 1 : 1 전원 5 꺼짐 포트 5 상태 : 0000 전원 꺼짐 $ sudo ./hubpower 1 : 1 전원 5 켜짐 포트 5 상태 : 0100 전원 켜짐

장치가 우리를 감지하지 못하면 다음을 시도 할 수 있습니다.

$ sudo ./hubpower 1 : 1 bind Bind-driver 요청이 커널로 전송되었습니다.

이렇게하면 연결된 USB 장치가 다시 표시됩니다.

C 프로그램이 필요하지 않다면 ... 펄에 있습니다.

C 프로그램은 우리가 할 일이 매우 간단한 지 컴파일하고 테스트하기가 어렵습니다. 그래서 우리는이 작은 포트를 펄로 만든 10 줄로 시도 할 수 있습니다 :

#! / bin / perl에는 "sys / ioctl.ph"가 필요합니다. $ 장치 = "05"; open (my $ usbdev,"> ","/ dev / bus / usb/ 001/001 "); $ 데이터 = 팩 ( "H *", "23010800". $ 장치. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ 데이터); $ 데이터 = 팩 ( "H *", "23030800". $ 장치. "000000FFFFFF8813"); ioctl ($ usbdev, 0xC0185500, $ 데이터); 닫기 ($ usbdev);

우리는 존중해야합니다 $ 장치, 포트 번호 (내 경우에는 5), 10 진수 값이므로 11은 A, 15은 B, 16는 F, 10은 XNUMX ... 장치와 버스도 모니터링해야합니다. / dev / bus / usb /에서 액세스합니다.001/001, 해당 파일을 호출하므로 숫자는 선행 XNUMX과 함께 가야합니다.

보시다시피 키는 ioctl ()에 있으며, 파일 시스템의 특수 파일에서 장치의 매개 변수를 조작하는 기능입니다. 사용 된 XNUMX 진수 값 중에서 0xC0185500, USBDEVFS_CONTROL이라는 상수로 USB 장치에 제어 명령을 보내고 다른 코드는 연결 해제 및 연결 요청에 속합니다 (C로 만든 프로그램에서 자세한 정보를 찾을 수 있음).

방법 3. 장치 숨기기 및 표시

장치를 분리하는 또 다른 방법은 다음과 같습니다.

에코 '1-5'| sudo tee / sys / bus / usb / drivers / usb / unbind

다음을 수행하여 복구 할 수 있습니다.

에코 '1-5'| sudo tee / sys / bus / usb / drivers / usb / bind

이 방법으로 인해 장치가 완전히 분리되는 것은 아닙니다. 그것은 단지 운영 체제가 그것에 대해 말하지 않게 만들고 컴퓨터가 그들에 대해 아무것도 알고 싶어하지 않을 때 많은 장치가 저전력 모드로 전환됩니다. 우리는 아무것도 요구하지 않기 때문입니다.

방법 4. 장치 인증

이 방법의 단점은 많은 시스템에서 더 많은 장치를 일시적으로 비활성화 할 수 있다는 것입니다. 이는 필요한 장치 일뿐만 아니라 전체 USB 허브도 공격합니다. 예를 들면 :

$ 에코 0 | sudo tee / sys / bus / usb / devices / usb1 / 승인 된 $ echo 1 | sudo tee / sys / bus / usb / devices / usb1 / 인증

물론 모든 것을 연속으로 실행할 수 있습니다.

$ 에코 0 | sudo tee / sys / bus / usb / devices / usb1 / 승인; 에코 1 | sudo tee / sys / bus / usb / devices / usb1 / 인증

같은 USB 포트에 더 많은 디스크가 연결되어있는 경우주의해야합니다 (그리고 거의 항상 컴퓨터에있는 것보다 여러 개의 USB 포트가 내부적으로 허브에 연결되어 있으므로 동일한 USB를 가진 포트 그룹이 있습니다.) 아버지, 어떤 식 으로든 넣으십시오.

방법 5. USB 하위 시스템 재부팅

USB 하위 시스템을 다시 시작하려는 경우. 즉, 모든 USB 장치를 분리하고 연결하는 등 모든 USB 장치를 새로 고칩니다. 한편으로는 USB 커널 모듈을 다운로드하고 다시로드 할 수 있습니다.

$ sudo modprobe -r ehci_hcd; sudo modprobe ehci_hcd # USB2 용 $ sudo modprobe -r xhci_hcd; sudo modprobe xhci_hcd # USB3 용

일부 배포판에는 최신 버전의 Ubuntu 및 파생 제품이 포함되어 있지만 통합 USB 모듈 다운로드 할 수 없습니다. 반면에 다른 모듈 (프린터, 저장 장치, 인터페이스 장치 등)로 인해 사용 중이기 때문에 시스템에서 다운로드를 허용하지 않을 수 있으며, 모듈 다운로드를 시작하고 물건을 깨 뜨리면 컴퓨터를 다시 시작해야 할 수 있습니다. 끝에. 따라서 다른 방법으로 다음을 수행 할 수 있습니다.

$ 에코 '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / unbind $ echo '0000:00:14.5'| sudo tee / sys / bus / pci / drivers / xhci_hcd / bind

장치를 찾으려면 ls inside / sys / bus / pci / drivers / xhci_hcd를 할 수 있습니다. 여러 가지가 나타날 것입니다. 다음과 같은 것을 찾아야합니다. aaaa : bb : cc : dd.e. USB 포트는 xhci_hcd (USB3)가 아니라 ehci_hcd (USB2)로 제공 될 수 있습니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   크리스티안

    훌륭한 기사!

    1.    Gasparfm

      Cristian 대단히 감사합니다! 도움이 되었기를 바랍니다.

  2.   안토니오 후안

    이 기사에서는 당신이 그것을 놓을 때마다 그것이 올바른 것과 반대편에 있고 그것을 돌려야한다고 말하지 않습니다 ... hehehe. 훌륭한 기사.

    1.    Gasparfm

      감사합니다 Antonio Juan! 글쎄, 내가 게시물에 넣은 모든 것을 시도하는 동안 나에게 얼마나 많은 일이 일어 났는지 모를 것입니다! 🙂

  3.   롬셋

    큰. 우수한 아이템. 제목은 "USB 스틱을 뽑았다 꽂기 만하면 Linux 시스템에 대해 알아볼 수 있습니다."라는 제목이 있어야합니다. 축하합니다.
    말라가에서 인사드립니다.

    1.    Gasparfm

      예, 누군가 C로 프로그래밍을 시작하고이 게시물에서 장치에 액세스 할 것인지 모르겠습니다! 또한 말라가에서! 우리는 어디에나 있습니다 🙂

  4.   HO2Gi

    인상적인 기사. 당신은 그러한 자료를 너무 많이 사용했습니다.

    1.    Gasparfm

      감사합니다 HO2Gi !! 내 개인 블로그 ( http://totaki.com/poesiabinaria ) 스타일에 대한 많은 자습서가 있습니다 🙂

  5.   아타우알파

    정말 고마워 친구 야. 나는 리눅스, 특히 리눅스 민트에서 시작하고 있는데 다음과 같은 문제가 있습니다. 콘솔에서 내 전화가 컴퓨터에 연결되어 있지만 파일 관리자가 아닌 것을 볼 수 있습니다. 따라서 인터넷에 연결하기위한 모뎀으로 사용할 수 없습니다. 내가 할 수있는 것?

    1.    가스파르 페르난데스

      모뎀으로 연결할 수없는 전화기가 있지만 테 더링은 할 수 있습니다.

  6.   밀라

    훌륭한 문서!
    시간을내어 경험을 공유해 주셔서 감사합니다.
    나는 다른 유형의 문제에 대한 참조로 사용하고 있습니다 .Ubuntu에서 USB 포트 연결 끊김 (# 42 ~ precision1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013)
    시스템이 dmesg에 -110을 던지고 PC를 다시 시작하는 경우가 있는데, 장치가 연결된 USB (USB3.0)의 전원 부족으로 인해 오류가 발생한 것으로 가정합니다.

    이제 lsusb -v를 사용하여 장치의 전력 레벨을 확인하지만 2mA를 던지는데 이는 완전히 어리석은 일입니다 ... LED만이 그 이상을 소비합니다 ...

    나는 huawei E4 USB-8372G 모뎀을 연결하지만 최대 전력은 2mA를 나타내며 놀랍습니다. 이제 의심이 바뀌고 다른 사람들이 발생했습니다.
    MaxPower는 기본적으로 장치 또는 OS에서 제공되는 속성입니까?
    USB 포트가 제공 할 최대 전력의 매개 변수입니까?
    매개 변수 인 경우
    이 매개 변수를 USB 포트 (900mAh- 3.0 / 500mAh- 2.0)에서 제공하는 최대 값으로 수정하고 설정할 수 있습니까?
    매개 변수가 아닌 경우
    USB 소비량의 실시간 측정 값입니까?
    다른 옵션 인 경우 참조 정보에 대해 의문이 있으므로 설명해주십시오.

    이 MaxPower 값에 대해 몇 가지 의문이 있습니다. 추가 정보가 있으면 매우 감사하겠습니다.

    lsusb -v 2> / dev / null | egrep "^ Bus | MaxPower | bDeviceClass | iProduct"

    버스 002 장치 006 : ID 1a86 : 7523 QinHeng Electronics HL-340 USB- 시리얼 어댑터
    bDeviceClass 255 공급 업체별 클래스
    iProduct 2 USB2.0- 시리얼
    MaxPower 96mA
    버스 002 장치 008 : ID 12d1 : 14db Huawei Technologies Co., Ltd.
    bDeviceClass 2 통신
    iProduct 2 HUAWEI_MOBILE
    MaxPower 2mA

  7.   익명

    창문에 적용 할 수 있나요?

  8.   께로

    감사합니다. 내 외장 디스크에서 udisksctl power-off -b / dev / sdc를 사용하면 두통을 해결하기에 충분했습니다. 마운트 해제에이 작업을 자체적으로 수행 할 수있는 옵션이 있다면 더 좋지 않을까요?

  9.   마리사

    맙소사! 이 유언장을 읽어본 사람이 있습니까? 그리고 위의 판 후에 우리는 여전히 DAC / USB 사운드 인터페이스, 프린터, 그래픽 태블릿을 끄는 방법을 모릅니다. 간단히 말해서 스파이크 또는 외부 디스크가 아닌 것은 없습니다. 시간 낭비입니다 ...