Voici le comportement que j'ai sur mon système Ubuntu Lucid :
Lorsque je branche ma clé USB/clé USB qui a 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érent) /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 le [RESOLU] Comment remonter une clé USB avec nautilus dans lynx ?, de la réponse de @Thomas, faisant référence à un 16_hide_unmount.patch). Aussi, palimpsest
montre ici deux partitions pour le disque.
Lorsque je clique sur Ejecter sur l'une ou l'autre 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 ; aussi :
$ 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
Donc, 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 , afin de mount
.
De plus, le même comportement que le clic gauche + "Ejecter" dans l'interface graphique du bureau, je peux entrer dans le terminal avec sudo eject /dev/sdb
. Notez qu'on peut aussi 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 sera affiché dans l'applet Disk Mounter, mais sera noté comme non monté ; 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, lsusb
affichera toujours l'appareil) !
Après avoir cherché un peu la réponse (j'ai essayé des trucs de udevadm monitor --environment
pendant le branchement et le débranchement, avec réplication de toutes les actions via udevadm trigger
, pour examiner ce que le BLKRRPART
ioctl le fait), sans aucun succès - je suis finalement tombé sur 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 réapparaissent dans l'applet Disk Mounter - sans débrancher/rebrancher la clé USB !! C'est d'autant plus étrange, 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 attendriez jamais à ce qu'il 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, si sudo udisks --detach /dev/sdb
a été exécuté précédemment, alors /dev/sdb
n'existera pas, donc eject -t /dev/sdb
échouera 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 logiquement déconnecté ? 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 apparaître à nouveau les icônes des partitions dans l'applet Disk Mounter, directement comme montées; 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
D'après mon expérience dans Ubuntu, lorsque vous "éjectez" une clé USB depuis Nautilus, le périphérique disparaît en fait du système. Je ne sais pas pourquoi, 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 voulez pas la récupérer, mais vous allez la déconnecter.
La façon dont je contourne cela (si nécessaire) consiste à utiliser umount
au lieu de Nautilus. Vous pouvez également simplement appeler le 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, en gros, soit a) Reconstruisez Nautilus à partir des sources sans ce patch (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 ^^).
Sur les systèmes basés sur Debian, au moins, vous devriez pouvoir faire ceci :
- découvrez quelle devrait être la lettre du lecteur... Je vais dire /dev/sdb ici pour l'exemple.
- Éjectez deux fois la lettre de lecteur « serait » pour rallumer efficacement l'appareil.
- Profitez !
Cela fonctionne parce que... la magie.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb