Este es el comportamiento que tengo en mi sistema Ubuntu Lucid:
Cuando conecto mi flash USB/memoria USB que tiene dos particiones, el sistema informa:
$ 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
$
Entonces, solo las particiones tienen /dev/disk/by-uuid
; mientras que tanto el disco como las particiones tienen (diferentes) /dev/disk/by-id
.
Ahora, si hago clic izquierdo en cualquiera de las entradas de la partición en el subprograma Disk Mounter en el escritorio Gnome2 en Lucid, obtengo solo dos entradas:"Abrir" o "Expulsar" (como se menciona en [SOLUCIONADO] ¿Cómo se vuelve a montar? una unidad usb con nautilus en lynx?, de la respuesta de @Thomas, refiriéndose a un 16_hide_unmount.patch). Además, palimpsest
aquí muestra dos particiones para el disco.
Cuando hago clic en Expulsar en cualquiera de las particiones, ambas desaparecen; en este punto, palimpsest
muestra el disco, pero no las particiones, y en su lugar aparece el mensaje "No se encontró el medio"; también:
$ 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
Entonces, como se mencionó en el comentario de @ultrasawblade, de hecho, el disco está allí, pero no las particiones, aunque creo que necesitaría las particiones como dispositivos , para mount
.
Además, el mismo comportamiento que hacer clic con el botón izquierdo + "Expulsar" en la GUI de escritorio, puedo acceder a la terminal con sudo eject /dev/sdb
. Tenga en cuenta que también se puede abrir palimpsest
, desde allí, haga clic en cada una de las dos particiones y haga clic en "Desmontar volumen". En ese momento, los iconos de las particiones todavía se mostrará en el subprograma Disk Mounter, pero se indicará como desmontado; y luego uno puede hacer sudo udisks --detach /dev/sdb
:esto hace que los íconos desaparezcan del subprograma Disk Mounter, pero también el /dev/sdb
dispositivo ya no estará presente en el sistema (sin embargo, lsusb
seguirá mostrando el dispositivo)!
Después de buscar bastante la respuesta (probé cosas de udevadm monitor --environment
durante la conexión y desconexión, con la replicación de todas las acciones a través de udevadm trigger
, para investigar qué BLKRRPART
ioctl lo hace), sin ningún éxito. Finalmente encontré Cómo volver a montar una memoria USB sin quitarla ni reinsertarla:Ubuntu/Debian, que tiene la respuesta:
sudo eject -t /dev/sdb
Después de ejecutar este comando, las dos particiones aparecen nuevamente en el subprograma Disk Mounter, ¡sin desconectar / volver a conectar la llave USB! Todo esto es más extraño, porque si lees man eject
:
-t With this option the drive is given a CD-ROM tray close command.
Not all devices support this command.
... ¡nunca esperaría que sea aplicable a la unidad USB Flash/Thumb! (E incluso intenté buscar en sys-utils/eject.c, y no puedo ver nada obvio :)
)
Por supuesto, si sudo udisks --detach /dev/sdb
se ha ejecutado anteriormente, entonces /dev/sdb
no existirá, entonces eject -t /dev/sdb
fallará con eject: unable to find or open device for: '/dev/sdb'
. En ese caso, el ciclo de alimentación USB como se indica en #7457 ¿Cómo volver a conectar un dispositivo USB desconectado lógicamente? me ayudó a recuperar:
$ 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'
Esto hizo que los íconos de las particiones se mostraran nuevamente en el subprograma Disk Mounter, directamente como montado; para encontrar la dirección correcta, intente mientras el disco está montado:
$ 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
Según mi experiencia en Ubuntu, cuando "expulsas" una memoria USB desde Nautilus, el dispositivo desaparece del sistema. No estoy seguro de por qué es así, pero ni Nautilus ni la línea de comandos pueden recuperarlo. Supongo que la lógica es que una vez que expulsas una memoria USB no la quieres de vuelta, sino que la vas a desconectar.
La forma en que soluciono esto (cuando es necesario) es usando umount
en lugar de Nautilus. También puedes llamar al sync
para vaciar los búferes del sistema de archivos en el disco.
Acabo de encontrar un hilo que tiene más información:http://ubuntuforums.org/showthread.php?t=1477247
Así que básicamente a) Reconstruye nautilus desde la fuente sin ese parche (y mantenlo actualizado cuando actualices tu sistema...) o b) usa otro administrador de archivos (al menos al desmontarlo ^^).
En los sistemas basados en Debian, al menos, debería poder hacer esto:
- descubra cuál debería ser la letra de la unidad... Voy a decir /dev/sdb aquí como ejemplo.
- Expulse dos veces la letra de la unidad 'sería' para volver a encender el dispositivo de manera efectiva.
- ¡Beneficio!
Esto funciona porque... magia.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb