Come reinstallare una chiavetta USB dopo aver smontato da Nautilus senza scollegarla?


25

Trovo che per reinstallare una chiavetta USB, devo scollegarla fisicamente, quindi ricollegarla. Come posso farlo senza un'azione fisica così faticosa?


3
Il dispositivo USB è logicamente disconnesso (dovrebbe esserci un messaggio in tal senso nei registri del kernel). Non avrà più una /devvoce, e IIRC non comparirà lsusbneanche in. Non so se c'è un modo per ricollegarlo.
Gilles 'SO- smetti di essere malvagio' il

Questa domanda è molto simile a: superuser.com/questions/1163375/…
Dennis Benzinger

Risposte:


8

Dalla mia esperienza in Ubuntu, quando "espelli" una chiavetta USB da Nautilus, il dispositivo in realtà scompare dal sistema. Non sono sicuro del perché, ma né Nautilus né la riga di comando possono recuperarlo. Immagino che la logica sia che una volta espulsa una chiavetta USB non la rivuoi indietro, ma la scollegherai.

Il modo in cui lavoro intorno a questo (quando necessario) è usando al umountposto di Nautilus. Potresti anche chiamare syncper svuotare i buffer del filesystem sul disco.

Ho appena trovato una discussione che ha più informazioni: http://ubuntuforums.org/showthread.php?t=1477247

Quindi sostanzialmente a) Ricostruisci nautilus dal sorgente senza quella patch (e tienilo aggiornato quando aggiorni il tuo sistema ...) oppure b) usa un altro file manager (almeno quando smontalo ^^).


2
Controlla /dev/disk/by-ide vedi se il dispositivo è veramente sparito. Scommetto che non lo è, e può essere rimontato da lì con un mountcomando.
LawrenceC,

1
@ultrasawblade /dev/disk/by-idcontiene link simbolici ai file di dispositivo in /dev, per esempio /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb. Quando il dispositivo non funziona più udisks --eject(cosa che presumo accade qui), il collegamento simbolico è obsoleto e non può essere utilizzato per il re-montaggio.
Orecchie appuntite

16

Questo è il comportamento che ho sul mio sistema Ubuntu Lucid:

Quando collego il mio flash USB / thumbdrive che ha due partizioni, il sistema segnala:

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

Quindi, solo le partizioni hanno /dev/disk/by-uuid; mentre sia il disco che le partizioni hanno (diversi) /dev/disk/by-id.

Ora, se faccio clic con il pulsante sinistro del mouse su una delle voci della partizione nell'applet Disk Mounter nel desktop Gnome2 in Lucido, ottengo solo due voci: "Apri" o "Espelli" (come indicato in [RISOLTO] Come rimontare un'unità USB con nautilus in lynx?, dalla risposta di @Thomas , riferita a un 16_hide_unmount.patch ). Inoltre, palimpsestqui mostra due partizioni per il disco.

Quando clicco su Espelli su una delle partizioni, entrambe scompaiono; a questo punto, palimpsestmostra il disco, ma nessuna partizione e invece un messaggio "Nessun supporto trovato"; anche:

$ 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

Quindi, come menzionato nel commento di @ultrasawblade , il disco è davvero lì, ma non le partizioni - anche se, penso, avrei bisogno delle partizioni come dispositivi , al fine di mount.

Inoltre, lo stesso comportamento del clic sinistro + "Espelli" nella GUI desktop, posso accedere al terminale con sudo eject /dev/sdb. Si noti che si può anche aprire palimpsest, da lì fare clic su ciascuna delle due partizioni e fare clic su "Smonta volume" - a quel punto, le icone per le partizioni verranno comunque mostrate nell'applet Disk Mounter, ma verranno annotate come smontate; e quindi si può fare sudo udisks --detach /dev/sdb: questo fa scomparire le icone dall'applet di Disk Mounter - ma anche il /dev/sdbdispositivo non sarà più presente sul sistema (tuttavia, lsusbmostrerà comunque il dispositivo)!

Dopo aver cercato un po 'la risposta ( ho provato cose da udevadm monitor --environmentplug and scollegamento, replicando tutte le azioni tramite udevadm trigger, guardando cosa fa lo BLKRRPARTioctl), senza successo - Finalmente sono incappato in Come rimontare una chiavetta USB senza rimuovere e reinserire - Ubuntu / Debian , che ha la risposta:

sudo eject -t /dev/sdb

Dopo aver eseguito questo comando - le due partizioni vengono nuovamente visualizzate nell'applet Disk Mounter - senza scollegare / ricollegare la chiave USB !! Questo è tutto lo straniero, perché se leggi man eject:

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

... non ti aspetteresti mai che sia applicabile all'unità Flash / Thumb USB! (E ho anche provato a guardare in sys-utils / eject.c , e non vedo nulla di ovvio :))

Naturalmente, se sudo udisks --detach /dev/sdbè stato eseguito in precedenza, quindi /dev/sdbnon esisterà, quindi eject -t /dev/sdbfallirà eject: unable to find or open device for: '/dev/sdb'. In tal caso, il ciclo di alimentazione USB come indicato in # 7457 Come riconnettere un dispositivo USB logicamente disconnesso? mi ha aiutato a recuperare:

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

Ciò ha reso le icone delle partizioni di nuovo visualizzate nell'applet Disk Mounter, direttamente come montate; per trovare l'indirizzo giusto, prova mentre il disco è montato:

$ 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: il comando per "inserire" nuovamente un'unità USB espulsa è eject -t /dev/<DEVICE>.
Dennis Benzinger,

4

Sui sistemi basati su Debian, almeno, dovresti essere in grado di fare questo:

  1. capire quale dovrebbe essere la lettera di unità ... sto per dire / dev / sdb qui per l'esempio.
  2. Espellere due volte la lettera di unità "sarebbe" per riaccendere efficacemente il dispositivo.
  3. Profitto!

Questo funziona perché ... magia.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.