Làm cách nào để gắn lại thanh USB sau khi ngắt kết nối với Nautilus mà không ngắt kết nối?


25

Tôi thấy rằng để gắn lại một thanh USB, tôi phải ngắt kết nối vật lý với nó, sau đó kết nối lại nó. Làm thế nào tôi có thể làm điều này mà không có hành động thể chất mệt mỏi như vậy?


3
Thiết bị USB bị ngắt kết nối một cách hợp lý (cần có một thông báo để tác động đến nhật ký kernel của bạn). Nó sẽ không có /devmục nào nữa và IIRC sẽ không xuất hiện ở lsusbmột trong hai. Tôi không biết có cách nào để kết nối lại không.
Gilles 'SO- ngừng trở nên xấu xa'

Câu hỏi này rất giống với: superuser.com/questions/1163375/ Khăn
Dennis Benzinger

Câu trả lời:


8

Từ kinh nghiệm của tôi về Ubuntu, khi bạn "nhả" một thanh USB từ bên trong Nautilus, thiết bị thực sự biến mất khỏi hệ thống. Tôi không chắc tại sao lại như vậy, nhưng cả Nautilus và dòng lệnh đều không thể lấy lại được. Tôi đoán logic là một khi bạn rút ra một thanh USB, bạn không muốn nó quay lại, nhưng sẽ ngắt kết nối nó.

Cách tôi làm việc xung quanh điều này (khi cần), là bằng cách sử dụng umountthay vì Nautilus. Bạn cũng có thể gọi syncđể xóa bộ đệm hệ thống tập tin vào đĩa.

Chỉ cần tìm một chủ đề có thêm thông tin: http://ubuntuforums.org/showthread.php?t=1477247

Vì vậy, về cơ bản, a) Xây dựng lại nautilus từ nguồn mà không có bản vá đó (và luôn cập nhật khi bạn cập nhật hệ thống của mình ...) hoặc b) sử dụng trình quản lý tệp khác (ít nhất là khi ngắt kết nối ^^).


2
Kiểm tra /dev/disk/by-idvà xem nếu thiết bị đã thực sự biến mất. Tôi cá là không, và có thể được nhắc lại từ đó bằng một mountlệnh.
LawrenceC

1
@ultrasawblade /dev/disk/by-idchứa liên kết tượng trưng đến các tập tin thiết bị /dev, ví dụ /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb. Khi thiết bị biến mất sau udisks --ejectđó (mà tôi giả sử xảy ra ở đây), symlink đã cũ và không thể được sử dụng để gắn lại.
PointedEars

16

Đây là hành vi tôi có trên hệ thống Ubuntu Lucid của mình:

Khi tôi cắm USB flash / thumbdrive có hai phân vùng, hệ thống sẽ báo cáo:

$ ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2

$ udisks --show-info /dev/sdb | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
  detected at:                 Mon 29 Apr 2013 02:16:50 PM CEST
--
  partition table:
    scheme:                    mbr
    count:                     2

$ udisks --show-info /dev/sdb1 | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0-part1
    by-id:                     /dev/disk/by-uuid/581E-EE0B
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1
  detected at:                 Mon 29 Apr 2013 04:24:25 PM CEST

$ udisks --show-info /dev/sdb2 | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0-part2
    by-id:                     /dev/disk/by-uuid/4A0E-A166
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part2
  detected at:                 Mon 29 Apr 2013 04:24:25 PM CEST

$ udevadm info --query=all --name=/dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb    
$ udevadm info --query=all --name=/dev/sdb1 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb/sdb1
$ udevadm info --query=all --name=/dev/sdb2 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb/sdb2
$ sudo partprobe /dev/sdb
$

Vì vậy, chỉ có phân vùng có /dev/disk/by-uuid; trong khi cả đĩa và phân vùng đều có (khác nhau) /dev/disk/by-id.

Bây giờ, nếu tôi nhấp chuột trái vào một trong các mục phân vùng trong applet Disk Mount trong máy tính để bàn Gnome2 trong Lucid, tôi chỉ nhận được hai mục: "Mở" hoặc "Eject" (như đã đề cập trong [GIẢI QUYẾT] một ổ đĩa USB có nautilus trong lynx?, từ câu trả lời của @Thomas , đề cập đến 16_ leather_unmount.patch ). Ngoài ra, palimpsestở đây hiển thị hai phân vùng cho đĩa.

Khi tôi nhấp vào Eject trên một trong các phân vùng - cả hai đều biến mất; tại thời điểm này, palimpsesthiển thị đĩa, nhưng không có phân vùng và thay vào đó là thông báo "Không tìm thấy phương tiện"; cũng thế:

$ ls /dev/sdb*
/dev/sdb

$ udisks --show-info /dev/sdb | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
  detected at:                 Mon 29 Apr 2013 02:16:50 PM CEST

$ udisks --show-info /dev/sdb1 | grep -A2 'partition table\|by-id'
$

$ udevadm info --query=all --name=/dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/host13/target13:0:0/13:0:0:0/block/sdb
$ udevadm info --query=all --name=/dev/sdb1 | grep DEVPATH
device node not found

$ sudo partprobe /dev/sdb
Error: Error opening /dev/sdb: No medium found

Vì vậy, như được đề cập trong bình luận của @ultrasawblade , thực sự đĩa có ở đó, nhưng không phải là phân vùng - mặc dù, tôi nghĩ rằng tôi cần phân vùng làm thiết bị , để mount.

Ngoài ra, hành vi tương tự như nhấp chuột trái + "Eject" trong GUI máy tính để bàn, tôi có thể nhận được trong terminal với sudo eject /dev/sdb. Lưu ý rằng người ta cũng có thể mở palimpsest, từ đó nhấp vào từng trong hai phân vùng và nhấp vào "Unmount Volume" - tại thời điểm đó, các biểu tượng cho các phân vùng sẽ vẫn được hiển thị trong applet của Disk Mount, nhưng sẽ được ghi chú là không đếm được; và sau đó người ta có thể làm sudo udisks --detach /dev/sdb: điều này làm cho các biểu tượng biến mất khỏi applet của Disk Mount - nhưng /dev/sdbthiết bị sẽ không còn hiện diện trên hệ thống nữa (tuy nhiên, lsusbvẫn sẽ hiển thị thiết bị)!

Sau khi tìm kiếm khá nhiều câu trả lời (đã thử công cụ udevadm monitor --environmenttrong quá trình cắm và rút phích cắm, với việc sao chép tất cả các hành động thông qua udevadm trigger, để xem xét những gì BLKRRPARTioctl làm), nhưng không thành công - cuối cùng tôi cũng tình cờ tìm thấy Cách khắc phục một thanh USB mà không cần tháo và lắp lại - Ubuntu / Debian , có câu trả lời:

sudo eject -t /dev/sdb

Sau khi lệnh này được chạy - hai phân vùng xuất hiện lại trong applet Disk Mount - mà không cần rút / cắm lại khóa USB !! Đây là tất cả những người lạ, bởi vì nếu bạn đọc man eject:

   -t   With  this  option the drive is given a CD-ROM tray close command.
        Not all devices support this command.

... Bạn sẽ không bao giờ mong đợi nó có thể áp dụng cho ổ USB / Thumb! (Và tôi thậm chí đã thử nhìn vào sys-utils / eject.c , và tôi không thể thấy bất cứ điều gì rõ ràng :))

Tất nhiên, nếu sudo udisks --detach /dev/sdbđã được chạy trước đó, thì nó /dev/sdbsẽ không tồn tại, vì vậy eject -t /dev/sdbsẽ thất bại với eject: unable to find or open device for: '/dev/sdb'. Trong trường hợp đó, chu trình nguồn USB như được lưu ý trong # 7457 Làm cách nào để kết nối lại thiết bị USB bị ngắt kết nối logic? đã giúp tôi phục hồi:

$ sudo sh -c 'echo suspend > /sys/bus/usb/devices/1-2/power/level'
$ sudo sh -c 'echo auto > /sys/bus/usb/devices/1-2/power/level'

Điều này làm cho các biểu tượng của phân vùng hiển thị lại trong applet của Disk Mount, trực tiếp như được gắn kết; để tìm đúng địa chỉ, hãy thử trong khi đĩa được gắn:

$ udevadm info --attribute-walk --name=/dev/sdb | grep "looking\|busnum\|devnum" | grep -B1 'busnum\|devnum'
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2':
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="13"
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"

# the first (.../usb1/1-2) should be the right one, check bus/devnum:
$ lsusb -s 1:13
Bus 001 Device 013: ID 090c:1000 Feiya Technology Corp. Flash Drive

# looks good; check for symlinks in `sys/bus/usb/devices` as per "parent device" .../usb1/1-2
$ ls -la /sys/bus/usb/devices/ | grep "usb1/1-2"
lrwxrwxrwx 1 root root 0 2013-04-29 17:17 1-2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-2
lrwxrwxrwx 1 root root 0 2013-04-29 17:21 1-2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0

# so it should be /sys/bus/usb/devices/1-2; check if it has power/level:
$ ls /sys/bus/usb/devices/1-2/power/level 
/sys/bus/usb/devices/1-2/power/level

1
tl; dr: Lệnh "chèn" lại ổ USB bị đẩy ra là eject -t /dev/<DEVICE>.
Dennis Benzinger

4

Trên các hệ thống dựa trên Debian, ít nhất, bạn sẽ có thể làm điều này:

  1. tìm ra ký tự ổ đĩa nên là gì ... Tôi muốn nói / dev / sdb ở đây để làm ví dụ.
  2. Nhân đôi ký tự ổ đĩa 'sẽ là' để cấp nguồn lại cho thiết bị một cách hiệu quả.
  3. Lợi nhuận!

Điều này hoạt động vì ... ma thuật.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.