명령줄에서 USB 장치를 분리하고 다시 연결하는 방법은 무엇입니까?

명령줄에서 USB 장치를 분리하고 다시 연결하는 방법은 무엇입니까?

gnome-disk현재 수행 중인 작업, 명령줄에서 동일한 작업을 수행하는 방법, gnome-disk수행한 모든 작업을 취소하는 방법을 알고 싶습니다 . (이미 수행한 작업은 취소할 수 없습니다.)

몇 가지 실험을 수행한 결과 다음과 같은 사실을 발견했습니다. 제가 사용하고 있는 USB 플래시 썸 드라이브("스틱")에는 전환할 수 있는 최소 3개의 '상태 수준'이 있으며, 그 중 2개는 gnome-drive'꺼내기'를 사용하여 전환 할 수 있습니다. 버튼(켜기 및 끄기) 및 "전원 끄기"(끄기 전용).

가장 높은 수준에서 가장 낮은 수준까지 다음을 발견했습니다.

  1. 주입
    • gnome-drive팝업 버튼
    • gnome-drive 또는 다른 곳에서 드라이브가 사라지지 않습니다.
    • 명령줄:eject /dev/sdb
    • 취소할 수 없습니다.gnome-drive
    • 실행 취소:eject --trayclose /dev/sdb
    • 커널 메시지( journalctl -k)
      • 주입
        • sdb: detected capacity change from 30253056 to 0
      • 팝업 취소
        • sd 4:0:0:0: [sdb] 30253056 512-byte logical blocks: (15.5 GB/14.4 GiB)
        • sdb: detected capacity change from 0 to 30253056
        • sdb: [partition details of my drive]
  2. (해제)바인딩
    • 상응하는 항목이 없습니다.gnome-drive
    • 명령줄:echo 3-6 > /sys/bus/usb/drivers/usb/unbind
    • gnome-drive장치가 완전히 사라짐
    • 커널 메시지 없음
    • lsusb -t장치는 계속 표시되지만 클래스("대량 저장소") 또는 드라이버("usb-storage")는 더 이상 표시되지 않습니다.
    • /sys/bus/usb/drivers/usb/3-6디렉토리가 사라졌습니다
    • 실행취소echo 3-6 > /sys/bus/usb/drivers/usb/bind
      • 그러면 커널 메시지가 표시됩니다.
        • usb-storage 3-6:1.0: USB Mass Storage device detected
        • scsi host4: usb-storage 3-6:1.0
        • scsi 4:0:0:0: Direct-Access TOSHIBA TransMemory PMAP PQ: 0 ANSI: 6
        • sd 4:0:0:0: Attached scsi generic sg2 type 0
        • sd 4:0:0:0: [sdb] 30253056 512-byte logical blocks: (15.5 GB/14.4 GiB)
        • sd 4:0:0:0: [sdb] Write Protect is off
        • sd 4:0:0:0: [sdb] Mode Sense: 45 00 00 00
        • sd 4:0:0:0: [sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
        • sdb: [partition details of my drive...]
        • sd 4:0:0:0: [sdb] Attached SCSI removable disk
  3. 전원을 끄세요
    • gnome-drive전원 끄기 버튼
    • 물리적으로 플러그를 뽑는 것처럼 장치가 모든 것에서 사라집니다.
    • 실제 플러그를 뽑는 것과 구별할 수 없음
    • 커널 메시지:
      • usb 3-6: USB disconnect, device number 10
    • 명령줄을 통해 전원을 끄는 방법은 무엇입니까?
    • 컴퓨터를 다시 연결하지 않고 어떻게 컴퓨터를 다시 켤 수 있나요?

완전성을 기하기 위해 스틱을 다시 삽입하면 새 장치 번호(11)가 할당되고 버스와 포트는 동일하게 유지되며(3-6) 다음 커널 메시지가 표시됩니다.

usb 3-6: new high-speed USB device number 11 using xhci_hcd
usb 3-6: New USB device found, idVendor=0930, idProduct=6545, bcdDevi>
usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 3-6: Product: TransMemory
usb 3-6: Manufacturer: TOSHIBA
usb 3-6: SerialNumber: C03FD5F7713EE2B1B000821E
[plus all kernel messages as quoted under (re-)bind above]

답변1

비슷한 질문(제목의 질문과 동일)이 수년에 걸쳐 제기되었습니다.[1],[2],[삼](시간을 내어 검색해 보면 아마도 십여 개가 넘을 것입니다...) 대부분의 답변은 코드 변경으로 인해 더 이상 유효하지 않습니다...
암튼 몇 년 동안 사용하지 않았지만 GNOME집중적으로 첫 번째 우편 질문에 대해:

gnome-disk현재 수행 중인 작업과 명령줄에서 동일한 작업을 수행하는 방법을 알고 싶습니다.

gnome-disk가장 쉬운 방법은 예를 들어 소스 코드를 보는 것입니다 .gduwindow.c두 가지 기능을 사용하십시오: udisks_drive_call_eject ()udisks_drive_call_power_off ()-여기에 녹음하세요전화한다고 하네요Eject()그리고 각각PowerOff()D-Bus 메서드. 이는 d-bus를 호출하여 cli에서 이러한 메서드를 호출할 수 있음을 의미합니다.
예: 플래시 드라이브가 ADATA식별되었으나 sda마운트되지 않음

sda           8:0    1 14,9G  0 disk 
├─sda1        8:1    1 14,6G  0 part

먼저 해당 드라이브 ID를 가져옵니다 sda.

busctl get-property org.freedesktop.UDisks2 /org/freedesktop/UDisks2/block_devices/sda org.freedesktop.UDisks2.Block Drive

이것은 다음과 같이 인쇄됩니다

o "/org/freedesktop/UDisks2/drives/ADATA"

d-bus그런 다음 드라이브를 꺼내거나 전원을 끄기 위해 호출되는 개체로 따옴표로 묶인 부분을 사용할 수 있습니다.

busctl call  org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/ADATA org.freedesktop.UDisks2.Drive Eject 'a{sv}' 0

busctl call  org.freedesktop.UDisks2 /org/freedesktop/UDisks2/drives/ADATA org.freedesktop.UDisks2.Drive PowerOff 'a{sv}' 0

gdbus콘크리트 와 동일 GNOME:

gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/ADATA --method org.freedesktop.UDisks2.Drive.Eject {}

gdbus call --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives/ADATA --method org.freedesktop.UDisks2.Drive.PowerOff {}

파일 시스템이 마운트된 경우(드라이브가 사용 중인 경우) 이러한 명령에 오류가 발생한다는 점에 유의하십시오. 또한 문서에서 볼 수 있듯이 un-ejector 메서드 가 없기 un-power-off때문에 gnome-disk이러한 작업을 취소할 수 없습니다.
왜 누군가가 위 명령을 사용하는지 잘 모르겠습니다. ( eject()플래시 드라이브의 맥락에서 의미를 잘 이해하지 못하지만 이는 또 다른 논의입니다.)...
저는 (다른 많은 사람들과 마찬가지로) 파일 시스템을 마운트 해제했습니다.

udisksctl unmount -b /dev/sda1

그런 다음드라이브 전원 끄기그리고

udisksctl power-off -b /dev/sda

전원이 꺼진 드라이브를 다시 연결하려면 일종의 USB 포트 재설정/재검색/재구성을 실행해야 합니다(일반 사용자는 수행할 수 없음). 다른 게시물의 솔루션 중 커널 6.6.2를 사용하는 경우에는 효과가 없었으므로 지금은 어떤 제안도 드릴 수 없습니다...

답변2

명령줄에서 전원을 끄는 방법은 무엇입니까?

echo 1 > /sys/bus/usb/devices/3-2.1/port/disable

포트는 bus_nr-port.by.port.hub.chain.seperated.with.dots, 즉 3-3, 또는 입니다 3-2.4.6. 두 예 모두에서 포트는 버스 3에 있습니다. 첫 번째 예는 포트 3이고, 두 번째 예는 버스 3의 포트 2에 첫 번째 허브가 있고 첫 번째 허브의 포트 4에 두 번째 허브가 있는 두 허브의 체인입니다. 이 장치는 두 번째 허브의 포트 6에 있습니다.

컴퓨터를 다시 연결하지 않고 어떻게 컴퓨터를 다시 켤 수 있나요?

echo 0 > '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-0:1.0/usb3-port3/disable'

아니면 3-2.1그럴 수도 있기 때문에

echo 0 > '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/3-2-port1/disable'

포트가 활성화되면 pwd -P이 파일이 있는 디렉터리에서 disable해당 허브의 포트 관리 인터페이스의 실제 위치를 미리 볼 수 있습니다. ls -l /sys/bus/usb/devices/usb*좋은 시작은 USB 버스용 호스트 컨트롤러 목록을 만드는 것 입니다.

당신은 또한 볼 수 있습니다설명하는 방법lsusb더 많은 팁을 알아보세요. (또는커널 문서.)

답변3

명령줄에서 전원을 끄는 방법은 무엇입니까?

업데이트: 마침내 알아냈습니다. 다른 답변을 참조하세요.

컴퓨터를 다시 연결하지 않고 어떻게 컴퓨터를 다시 켤 수 있나요?

조잡한 방법(마우스와 키보드가 일시적으로 종료되었으므로 두 명령을 모두 실행할 수 있는지 확인하십시오...)은 USB 호스트 PCI 장치를 다시 바인딩하는 것입니다. 부팅이나 물리적 재삽입과 같은 모든 포트를 재부팅하는 것 같습니다. 적어도 나에게는:

echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/unbind
echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind

물론 이 숫자는 환경에 맞게 조정되어야 합니다. 보유한 제품을 확인하세요.

lspci -t

드러내다저것xhci_hcdUSB 버스는 다음에 의해 구동됩니다.

ls -la /sys/bus/pci/drivers/xhci_hcd/ | grep ^l

0000:00:14.0장치로만 표시됩니다 .

관련 정보