Linux

如何在不斷開連接的情況下從 Nautilus 解除安裝後重新安裝 U 盤?

  • April 6, 2019

我發現為了重新安裝 U 盤,我必須物理斷開它,然後重新連接它。如果沒有如此累人的身體動作,我怎麼能做到這一點?

根據我在 Ubuntu 中的經驗,當您從 Nautilus 中“彈出”USB 記憶棒時,該設備實際上會從系統中消失。我不確定這是為什麼,但 Nautilus 和命令行都無法將其取回。我猜邏輯是,一旦您彈出 USB 記憶棒,您就不想將其退回,而是要斷開它。

我解決這個問題的方法(在需要時)是使用umount而不是 Nautilus。您也可以呼叫sync將文件系統緩衝區刷新到磁碟。

剛剛找到一個包含更多資訊的執行緒:http ://ubuntuforums.org/showthread.php?t=1477247

所以基本上要麼a)在沒有該更新檔的情況下從原始碼重建nautilus(並在更新系統時保持最新……)或b)使用另一個文件管理器(至少在解除安裝時^^)。

這是我在 Ubuntu Lucid 系統上的行為:

當我插入具有兩個分區的 USB 快閃記憶體/拇指驅動器時,系統報告:

$ 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

現在,如果我左鍵點擊 Lucid 中 Gnome2 桌面的 Disk Mounter 小程序中的任一分區條目,我只會得到兩個條目:“打開”或“彈出”(如$$ SOLVED $$如何在 lynx 中重新安裝帶有 nautilus 的 USB 驅動器?,來自@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,從那裡點擊兩個分區中的每一個,然後點擊“解除安裝卷”-此時,分區的圖示仍將顯示在 Disk Mounter 小程序中,但將被標記為已解除安裝;然後可以這樣做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 快閃記憶體/拇指驅動器!(我什至嘗試查看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'。在這種情況下,#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

引用自:https://unix.stackexchange.com/questions/7051