Trovo che per reinstallare una chiavetta USB, devo scollegarla fisicamente, quindi ricollegarla. Come posso farlo senza un'azione fisica così faticosa?
Trovo che per reinstallare una chiavetta USB, devo scollegarla fisicamente, quindi ricollegarla. Come posso farlo senza un'azione fisica così faticosa?
Risposte:
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 umount
posto di Nautilus. Potresti anche chiamare sync
per 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 ^^).
/dev/disk/by-id
e vedi se il dispositivo è veramente sparito. Scommetto che non lo è, e può essere rimontato da lì con un mount
comando.
/dev/disk/by-id
contiene 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.
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, palimpsest
qui mostra due partizioni per il disco.
Quando clicco 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 , 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/sdb
dispositivo non sarà più presente sul sistema (tuttavia, lsusb
mostrerà comunque il dispositivo)!
Dopo aver cercato un po 'la risposta ( ho provato cose da udevadm monitor --environment
plug and scollegamento, replicando tutte le azioni tramite udevadm trigger
, guardando cosa fa lo BLKRRPART
ioctl), 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/sdb
non esisterà, quindi eject -t /dev/sdb
fallirà 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
eject -t /dev/<DEVICE>
.
Sui sistemi basati su Debian, almeno, dovresti essere in grado di fare questo:
Questo funziona perché ... magia.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
/dev
voce, e IIRC non compariràlsusb
neanche in. Non so se c'è un modo per ricollegarlo.