GNU/Linux >> Linux Esercitazione >  >> Linux

Come rimontare una chiavetta USB dopo averla smontata da Nautilus senza scollegarla?

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

Quando collego la mia chiavetta USB/chiavetta USB 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 (diverso) /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 Lucid, ottengo solo due voci:"Apri" o "Espelli" (come menzionato in [RISOLTO] Come si rimonta un'unità USB con nautilus in lynx?, dalla risposta di @Thomas, riferendosi a un 16_hide_unmount.patch). Inoltre, palimpsest qui mostra due partizioni per il disco.

Quando faccio clic su Espelli su una delle partizioni, entrambe scompaiono; a questo punto, palimpsest mostra 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, in effetti il ​​disco è lì, ma non le partizioni, anche se penso che avrei bisogno delle partizioni come dispositivi , per mount .

Inoltre, lo stesso comportamento del tasto sinistro + "Espelli" nella GUI del desktop, posso accedere al terminale con sudo eject /dev/sdb . Nota che puoi anche aprire palimpsest , da lì fai clic su ciascuna delle due partizioni e fai clic su "Smonta volume" - a quel punto, le icone delle partizioni si fermeranno essere mostrato nell'applet Disk Mounter, ma sarà indicato come non montato; e poi si può fare sudo udisks --detach /dev/sdb :questo fa sparire le icone dall'applet Disk Mounter - ma anche l'/dev/sdb dispositivo non sarà più presente sul sistema (tuttavia, lsusb mostrerà ancora il dispositivo)!

Dopo aver cercato a lungo la risposta (provato cose da udevadm monitor --environment durante il collegamento e lo scollegamento, con la replica di tutte le azioni tramite udevadm trigger , per esaminare cosa BLKRRPART ioctl lo fa), senza alcun successo - alla fine mi sono imbattuto 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 riappaiono nell'applet Disk Mounter, senza scollegare/ricollegare la chiavetta USB!! Questo è tutto più strano, 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/pollice USB! (E ho anche provato a esaminare sys-utils/eject.c, e non riesco a vedere nulla di ovvio :) )

Ovviamente, se sudo udisks --detach /dev/sdb è stato eseguito in precedenza, quindi /dev/sdb non esisterà, quindi eject -t /dev/sdb fallirà con eject: unable to find or open device for: '/dev/sdb' . In tal caso, il ciclo di alimentazione USB come indicato in #7457 Come ricollegare 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 nuovamente visibili le icone delle partizioni nell'applet Disk Mounter, direttamente come montate; per trovare l'indirizzo corretto, 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

Dalla mia esperienza in Ubuntu, quando "espellete" una chiavetta USB da Nautilus, il dispositivo scompare effettivamente 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 risolvo questo problema (quando necessario) è usando umount invece di Nautilus. Potresti anche chiamare sync per svuotare i buffer del filesystem sul disco.

Ho appena trovato un thread con maggiori informazioni:http://ubuntuforums.org/showthread.php?t=1477247

Quindi in pratica a) Ricompila nautilus dal sorgente senza quella patch (e mantienilo aggiornato quando aggiorni il tuo sistema...) oppure b) usa un altro file manager (almeno durante lo smontaggio ^^).


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

  1. capire quale dovrebbe essere la lettera dell'unità... Dirò /dev/sdb qui per l'esempio.
  2. Espelli due volte la lettera dell'unità "sarebbe" per riaccendere efficacemente il dispositivo.
  3. Guadagno!

Funziona perché... magia.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb

Linux
  1. Come creare USB avviabile Linux dalla riga di comando di Linux

  2. Come creare una chiavetta USB avviabile Linux su Windows

  3. Come eseguire il downgrade di nuovo a 14.04 da 14.10 senza Live Cd o unità USB?

  4. Come vedere se la chiavetta USB ha MBR?

  5. Impossibile eseguire l'avvio dalla chiavetta USB multiboot Yumi

Come installare RHEL 8 da USB

Come installare Ubuntu da USB

Come creare una ISO da un'unità USB avviabile in Linux

Come avviare dall'unità USB in Virtualbox in Linux

Come posso clonare il mio intero sistema operativo su una chiavetta USB avviabile?

Come scrivere un'immagine ISO su una memory stick USB dalla riga di comando di Linux?