Je trouve que pour remonter une clé USB, je dois la déconnecter physiquement, puis la reconnecter. Comment puis-je faire cela sans une telle action physique fatigante?
Je trouve que pour remonter une clé USB, je dois la déconnecter physiquement, puis la reconnecter. Comment puis-je faire cela sans une telle action physique fatigante?
Réponses:
D'après mon expérience dans Ubuntu, lorsque vous "éjectez" une clé USB depuis Nautilus, l'appareil disparaît réellement du système. Je ne sais pas pourquoi c'est, mais ni Nautilus ni la ligne de commande ne peuvent le récupérer. Je suppose que la logique est qu'une fois que vous éjectez une clé USB, vous ne la voulez plus, mais vous allez la déconnecter.
La façon dont je travaille autour de cela (si nécessaire), consiste à utiliser umount
au lieu de Nautilus. Vous pouvez également simplement appeler sync
pour vider les tampons du système de fichiers sur le disque.
Je viens de trouver un fil qui contient plus d'informations: http://ubuntuforums.org/showthread.php?t=1477247
Donc, fondamentalement, soit a) Reconstruisez nautilus à partir de la source sans ce correctif (et gardez-le à jour lorsque vous mettez à jour votre système ...) ou b) utilisez un autre gestionnaire de fichiers (au moins lors du démontage ^^).
/dev/disk/by-id
et voyez si l'appareil est vraiment parti. Je parie que ce n'est pas le cas, et peut être remonté à partir de là avec une mount
commande.
/dev/disk/by-id
contient des liens symboliques vers des fichiers de périphérique dans /dev
, par exemple /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb
. Lorsque l'appareil est parti après udisks --eject
(ce qui, je suppose, se produit ici), le lien symbolique est périmé et ne peut pas être utilisé pour le remontage.
Voici le comportement que j'ai sur mon système Ubuntu Lucid:
Lorsque je branche ma clé USB / clé USB à deux partitions, le système signale:
$ 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
$
Ainsi, seules les partitions ont /dev/disk/by-uuid
; tandis que le disque et les partitions ont (différents) /dev/disk/by-id
.
Maintenant, si je clique avec le bouton gauche sur l'une des entrées de partition dans l'applet Disk Mounter du bureau Gnome2 dans Lucid, je n'obtiens que deux entrées: "Open" ou "Eject" (comme mentionné dans [RESOLU] Comment remontez-vous une clé USB avec nautilus en lynx?, de la réponse de @Thomas , faisant référence à un 16_hide_unmount.patch ). En outre, palimpsest
ici montre deux partitions pour le disque.
Lorsque je clique sur Éjecter sur l'une des partitions, elles disparaissent toutes les deux; à ce stade, palimpsest
affiche le disque, mais pas de partitions, et un message "Aucun support trouvé" à la place; également:
$ 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
Ainsi, comme mentionné dans le commentaire de @ultrasawblade , en effet, le disque est là, mais pas les partitions - bien que, je pense que j'aurais besoin des partitions en tant que périphériques , pour le faire mount
.
En outre, le même comportement que le clic gauche + "Éjecter" dans l'interface graphique du bureau, je peux obtenir dans le terminal avec sudo eject /dev/sdb
. Notez que l'on peut également ouvrir palimpsest
, à partir de là, cliquez sur chacune des deux partitions, puis cliquez sur "Démonter le volume" - à ce stade, les icônes des partitions seront toujours affichées dans l'applet Disk Mounter, mais seront notées comme non montées; et puis on peut faire sudo udisks --detach /dev/sdb
: cela fait disparaître les icônes de l'applet Disk Mounter - mais aussi le /dev/sdb
périphérique ne sera plus présent sur le système (cependant, il lsusb
montrera toujours le périphérique)!
Après avoir cherché un peu la réponse (des trucs essayés udevadm monitor --environment
pendant le branchement et le débranchement, avec la réplication de toutes les actions via udevadm trigger
, pour regarder ce que fait l' BLKRRPART
ioctl), sans succès - j'ai finalement trouvé comment remonter une clé USB sans retirer ni réinsérer - Ubuntu / Debian , qui a la réponse:
sudo eject -t /dev/sdb
Après l'exécution de cette commande - les deux partitions apparaissent à nouveau dans l'applet Disk Mounter - sans débrancher / rebrancher la clé USB !! C'est tout étranger, car si vous lisez man eject
:
-t With this option the drive is given a CD-ROM tray close command.
Not all devices support this command.
... vous ne vous attendez jamais à ce que cela s'applique à la clé USB / clé USB! (Et j'ai même essayé de regarder dans sys-utils / eject.c , et je ne vois rien d'évident :)
)
Bien sûr, s'il sudo udisks --detach /dev/sdb
a été exécuté précédemment, il /dev/sdb
n'existera pas, il eject -t /dev/sdb
échouera donc avec eject: unable to find or open device for: '/dev/sdb'
. Dans ce cas, le cycle d'alimentation USB comme indiqué dans # 7457 Comment reconnecter un périphérique USB déconnecté logiquement? m'a aidé à récupérer:
$ 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'
Cela a fait réafficher les icônes des partitions dans l'applet Disk Mounter, directement comme monté; pour trouver la bonne adresse, essayez pendant que le disque est monté:
$ 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>
.
Sur les systèmes basés sur Debian, au moins, vous devriez pouvoir faire ceci:
Cela fonctionne parce que ... magique.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
/dev
entrée, et l'IIRC n'apparaîtra pas nonlsusb
plus. Je ne sais pas s'il y a un moyen de le reconnecter.