ฉันพบว่าในการติดตั้งอุปกรณ์ USB อีกครั้งฉันต้องถอดอุปกรณ์ออกแล้วทำการเชื่อมต่อใหม่อีกครั้ง ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันพบว่าในการติดตั้งอุปกรณ์ USB อีกครั้งฉันต้องถอดอุปกรณ์ออกแล้วทำการเชื่อมต่อใหม่อีกครั้ง ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
จากประสบการณ์ของฉันใน Ubuntu เมื่อคุณ "ปล่อย" แท่ง USB จากภายใน Nautilus อุปกรณ์จะหายไปจากระบบ ฉันไม่แน่ใจว่าทำไมถึงเป็นเช่นนี้ แต่ไม่มีทั้ง Nautilus และบรรทัดคำสั่งที่ได้รับมา ฉันเดาว่าตรรกะคือเมื่อคุณนำแท่ง USB ออกคุณไม่ต้องการให้มันกลับมา แต่จะตัดการเชื่อมต่อ
วิธีที่ฉันหลีกเลี่ยงสิ่งนี้ (เมื่อจำเป็น) คือการใช้umount
แทน Nautilus คุณยังสามารถโทรsync
เพื่อล้างบัฟเฟอร์ของระบบไฟล์ไปยังดิสก์
เพิ่งพบกระทู้ที่มีข้อมูลเพิ่มเติม: http://ubuntuforums.org/showthread.php?t=1477247
ดังนั้นโดยพื้นฐานแล้ว a) สร้าง nautilus จากแหล่งที่ไม่มีแพทช์นั้น (และปรับปรุงให้ทันสมัยเมื่อคุณอัปเดตระบบของคุณ ... ) หรือ b) ใช้ตัวจัดการไฟล์อื่น
/dev/disk/by-id
และดูว่าอุปกรณ์หายไปอย่างแท้จริง ฉันจะเดิมพันมันไม่ได้และสามารถเล่าจากที่นั่นด้วยmount
คำสั่ง
/dev/disk/by-id
มีsymlinksไปยังแฟ้มอุปกรณ์ในการยกตัวอย่างเช่น/dev
/dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb
เมื่ออุปกรณ์หายไปudisks --eject
(ซึ่งฉันคิดว่าเกิดขึ้นที่นี่) symlink เก่าและไม่สามารถใช้สำหรับการติดตั้งใหม่
นี่คือพฤติกรรมที่ฉันมีในระบบ 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
การดูสิ่งที่BLKRRPART
ioctl ทำ) โดยไม่ประสบความสำเร็จ - ในที่สุดฉันก็สะดุดกับวิธีการติด 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
eject -t /dev/<DEVICE>
อีกครั้ง
อย่างน้อยในระบบที่ใช้ Debian คุณควรทำสิ่งนี้ได้:
มันใช้งานได้เพราะ ... เวทย์มนตร์
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
/dev
รายการอีกต่อไปและ IIRC จะไม่ปรากฏในรายการใดรายการlsusb
หนึ่ง ฉันไม่รู้ว่ามีวิธีการเชื่อมต่อใหม่หรือไม่