วิธีการเมาท์ USB ใหม่อีกครั้งหลังจากถอนการติดตั้งจาก Nautilus โดยไม่ต้องถอดออก


25

ฉันพบว่าในการติดตั้งอุปกรณ์ USB อีกครั้งฉันต้องถอดอุปกรณ์ออกแล้วทำการเชื่อมต่อใหม่อีกครั้ง ฉันจะทำสิ่งนี้ได้อย่างไร


3
อุปกรณ์ USB ถูกตัดการเชื่อมต่ออย่างมีเหตุผล (ควรมีข้อความแจ้งว่ามีผลกระทบต่อบันทึกเคอร์เนลของคุณ) มันจะไม่มี/devรายการอีกต่อไปและ IIRC จะไม่ปรากฏในรายการใดรายการlsusbหนึ่ง ฉันไม่รู้ว่ามีวิธีการเชื่อมต่อใหม่หรือไม่
Gilles 'หยุดความชั่วร้าย'

คำถามนี้คล้ายกับ: superuser.com/questions/1163375/…
Dennis Benzinger

คำตอบ:


8

จากประสบการณ์ของฉันใน Ubuntu เมื่อคุณ "ปล่อย" แท่ง USB จากภายใน Nautilus อุปกรณ์จะหายไปจากระบบ ฉันไม่แน่ใจว่าทำไมถึงเป็นเช่นนี้ แต่ไม่มีทั้ง Nautilus และบรรทัดคำสั่งที่ได้รับมา ฉันเดาว่าตรรกะคือเมื่อคุณนำแท่ง USB ออกคุณไม่ต้องการให้มันกลับมา แต่จะตัดการเชื่อมต่อ

วิธีที่ฉันหลีกเลี่ยงสิ่งนี้ (เมื่อจำเป็น) คือการใช้umountแทน Nautilus คุณยังสามารถโทรsyncเพื่อล้างบัฟเฟอร์ของระบบไฟล์ไปยังดิสก์

เพิ่งพบกระทู้ที่มีข้อมูลเพิ่มเติม: http://ubuntuforums.org/showthread.php?t=1477247

ดังนั้นโดยพื้นฐานแล้ว a) สร้าง nautilus จากแหล่งที่ไม่มีแพทช์นั้น (และปรับปรุงให้ทันสมัยเมื่อคุณอัปเดตระบบของคุณ ... ) หรือ b) ใช้ตัวจัดการไฟล์อื่น


2
ตรวจสอบ/dev/disk/by-idและดูว่าอุปกรณ์หายไปอย่างแท้จริง ฉันจะเดิมพันมันไม่ได้และสามารถเล่าจากที่นั่นด้วยmountคำสั่ง
LawrenceC

1
@ultrasawblade /dev/disk/by-idมีsymlinksไปยังแฟ้มอุปกรณ์ในการยกตัวอย่างเช่น/dev /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdbเมื่ออุปกรณ์หายไปudisks --eject(ซึ่งฉันคิดว่าเกิดขึ้นที่นี่) symlink เก่าและไม่สามารถใช้สำหรับการติดตั้งใหม่
แหลมปลาย

16

นี่คือพฤติกรรมที่ฉันมีในระบบ Ubuntu Lucid ของฉัน:

เมื่อฉันเสียบ USB flash / thumbdrive ซึ่งมีพาร์ติชันสองตัวระบบจะรายงาน:

$ 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
$

ดังนั้นมีพาร์ติชั่นเท่านั้น/dev/disk/by-uuid; ในขณะที่ทั้งดิสก์และพาร์ทิชันที่มี /dev/disk/by-id(ที่แตกต่างกัน)

ตอนนี้ถ้าฉันคลิกซ้ายที่รายการพาร์ติชันในแอปเพล็ต Disk Mounter ในเดสก์ท็อป Gnome2 ใน Lucid ฉันได้รับเพียงสองรายการ: "Open" หรือ "Eject" (ดังที่ได้กล่าวไว้ใน[แก้ไขแล้ว] ไดรฟ์ usb ที่มี nautilus ใน lynx ?,จากคำตอบ@Thomas 'หมายถึง16_hide_unmount.patch ) นอกจากนี้palimpsestที่นี่ยังมีพาร์ติชั่นสองตัวสำหรับดิสก์

เมื่อฉันคลิกที่ปุ่มขับบนพาร์ติชั่นตัวใดตัวหนึ่ง - ทั้งคู่หายไป ณ จุดนี้palimpsestแสดงดิสก์ แต่ไม่มีพาร์ติชันและข้อความ "ไม่พบสื่อ" แทน เพิ่มเติม:

$ 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

ดังนั้นตามที่กล่าวไว้ในความคิดเห็นโดย@ultrasawbladeแน่นอนดิสก์จะมี แต่ไม่ได้เป็นพาร์ทิชัน - แม้ว่าฉันคิดว่าฉันจะต้องพาร์ทิชันเป็นอุปกรณ์mountในการที่จะ

นอกจากนี้พฤติกรรมเช่นเดียวกับการคลิกซ้าย + "นำออก" ในเดสก์ท็อป GUI ฉันสามารถเข้าไปในเทอร์มินัลsudo eject /dev/sdbได้ โปรดทราบว่าหนึ่งสามารถเปิดpalimpsestจากนั้นคลิกที่แต่ละพาร์ติชันสองและคลิก "Unmount Volume" - ณ จุดนั้นไอคอนสำหรับพาร์ติชันจะยังคงแสดงใน Disk Mounter applet แต่จะถูกยกเลิกการต่อเชื่อม; และจากนั้นหนึ่งสามารถทำได้sudo udisks --detach /dev/sdb: ทำให้ไอคอนหายไปจากแอปเพล็ต Disk Mounter - แต่ยัง/dev/sdbอุปกรณ์จะไม่ปรากฏในระบบอีกต่อไป (แต่lsusbจะยังคงแสดงอุปกรณ์)!

หลังจากค้นหาคำตอบเล็กน้อย (ลองสิ่งต่าง ๆ จากudevadm monitor --environmentระหว่างปลั๊กและถอดปลั๊กด้วยการจำลองการกระทำทั้งหมดผ่านudevadm triggerการดูสิ่งที่BLKRRPARTioctl ทำ) โดยไม่ประสบความสำเร็จ - ในที่สุดฉันก็สะดุดกับวิธีการติด USB ใหม่โดยไม่ต้องถอดออกและใส่กลับเข้าไปใหม่ - Ubuntu / Debianซึ่งมีคำตอบ:

sudo eject -t /dev/sdb

หลังจากรันคำสั่งนี้ - พาร์ติชันทั้งสองจะปรากฏขึ้นอีกครั้งในแอปเพล็ต Disk Mounter - โดยไม่ต้องถอดปลั๊ก / เสียบคีย์ USB อีกครั้ง !! นี่คือคนแปลกหน้าทั้งหมดเพราะถ้าคุณอ่านman eject:

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

... คุณไม่เคยคาดหวังว่ามันจะใช้ได้กับ USB Flash / Thumb Drive (และฉันก็ลองดูในsys-utils / eject.cและฉันไม่เห็นอะไรชัดเจน:))

แน่นอนถ้าsudo udisks --detach /dev/sdbได้รับการวิ่งก่อนหน้านี้แล้ว/dev/sdbจะไม่อยู่ดังนั้นจะล้มเหลวด้วยeject -t /dev/sdb eject: unable to find or open device for: '/dev/sdb'ในกรณีนั้นวงจรพลังงาน USB ตามที่ระบุไว้ใน# 7457 วิธีการเชื่อมต่ออุปกรณ์ USB ที่ถูกตัดการเชื่อมต่ออีกครั้งอย่างมีเหตุผล? ช่วยฉันกู้คืน:

$ 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'

สิ่งนี้ทำให้ไอคอนพาร์ติชั่นแสดงขึ้นอีกครั้งในแอปเพล็ต Disk Mounter โดยตรงเหมือนติดตั้ง เพื่อหาที่อยู่ที่ถูกต้องลองในขณะที่ติดตั้งดิสก์:

$ 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: คำสั่ง "แทรก" ที่ผู้ลงดีดออกไดรฟ์ USB eject -t /dev/<DEVICE>อีกครั้ง
Dennis Benzinger

4

อย่างน้อยในระบบที่ใช้ Debian คุณควรทำสิ่งนี้ได้:

  1. หาว่าตัวอักษรไดรฟ์ควรเป็นอย่างไร ... ฉันต้องพูด / dev / sdb ที่นี่เพื่อเป็นตัวอย่าง
  2. เปิดไดรฟ์ตัวอักษร 'จะเป็น' เพื่อเพิ่มประสิทธิภาพอุปกรณ์อีกครั้ง
  3. กำไร!

มันใช้งานได้เพราะ ... เวทย์มนตร์

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.