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:
- capire quale dovrebbe essere la lettera dell'unità... Dirò /dev/sdb qui per l'esempio.
- Espelli due volte la lettera dell'unità "sarebbe" per riaccendere efficacemente il dispositivo.
- Guadagno!
Funziona perché... magia.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb