如何在不斷開連接的情況下從 Nautilus 解除安裝後重新安裝 U 盤?
我發現為了重新安裝 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
,查看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 快閃記憶體/拇指驅動器!(我什至嘗試查看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