Creo que para volver a montar una memoria USB, tengo que desconectarla físicamente y luego volver a conectarla. ¿Cómo puedo hacer esto sin una acción física tan agotadora?
Creo que para volver a montar una memoria USB, tengo que desconectarla físicamente y luego volver a conectarla. ¿Cómo puedo hacer esto sin una acción física tan agotadora?
Respuestas:
Según mi experiencia en Ubuntu, cuando "expulsa" una memoria USB desde Nautilus, el dispositivo realmente desaparece del sistema. No estoy seguro de por qué esto es así, pero ni Nautilus ni la línea de comando pueden recuperarlo. Supongo que la lógica es que una vez que expulsa una memoria USB no la quiere recuperar, pero la va a desconectar.
La forma en que soluciono esto (cuando es necesario), es mediante el uso umount
de Nautilus. También puede llamar 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
Entonces, básicamente, a) Reconstruir nautilus desde la fuente sin ese parche (y mantenerlo actualizado cuando actualice su sistema ...) ob) use otro administrador de archivos (al menos al desmontar ^^).
/dev/disk/by-id
y vea si el dispositivo realmente se ha ido. Apuesto a que no lo es, y se puede volver a montar desde allí con un mount
comando.
/dev/disk/by-id
contiene enlaces simbólicos a archivos de dispositivos /dev
, por ejemplo /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb
. Cuando el dispositivo desaparece udisks --eject
(lo que supongo que sucede aquí), el enlace simbólico está obsoleto y no se puede usar para volver a montarlo.
Este es el comportamiento que tengo en mi sistema Ubuntu Lucid:
Cuando conecto mi memoria USB / unidad flash 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 con el botón izquierdo en cualquiera de las entradas de partición en el applet Disk Mounter en el escritorio de Gnome2 en Lucid, solo obtengo 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í se muestran 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"; además:
$ 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 poder hacerlo mount
.
Además, con el mismo comportamiento que hago clic con el botón izquierdo + "Expulsar" en la GUI del escritorio, puedo acceder al terminal sudo eject /dev/sdb
. Tenga en cuenta que también se puede abrir palimpsest
, a partir de ahí, haga clic en cada una de las dos particiones y haga clic en "Desmontar volumen"; en ese punto, los iconos de las particiones se seguirán mostrando en el applet Disk Mounter, pero se anotarán como desmontados; y luego se puede hacer sudo udisks --detach /dev/sdb
: esto hace que los iconos desaparezcan del applet Disk Mounter, ¡pero también el /dev/sdb
dispositivo ya no estará presente en el sistema (sin embargo, lsusb
todavía mostrará el dispositivo)!
Después de buscar bastante la respuesta (probé cosas desde udevadm monitor --environment
conectar y desconectar, con la replicación de todas las acciones a través udevadm trigger
, hasta investigar lo que hace el BLKRRPART
ioctl), sin ningún éxito: finalmente me topé con Cómo volver a montar un dispositivo USB sin quitar y volver a insertar - Ubuntu / Debian , que tiene la respuesta:
sudo eject -t /dev/sdb
Después de ejecutar este comando, las dos particiones aparecen nuevamente en el applet de Disk Mounter, ¡sin desconectar / volver a enchufar la llave USB! Esto es todo lo 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ías 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á, por eject -t /dev/sdb
lo que fallará eject: unable to find or open device for: '/dev/sdb'
. En ese caso, el ciclo de alimentación del USB como se indica en # 7457 ¿Cómo reconectar un dispositivo USB desconectado lógicamente? me ayudó a recuperarme:
$ 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 iconos de las particiones se mostraran nuevamente en el applet Disk Mounter, directamente como montados; 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
eject -t /dev/<DEVICE>
.
En los sistemas basados en Debian, al menos, debería poder hacer esto:
Esto funciona porque ... magia.
# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
/dev
entrada, y el IIRC tampoco aparecerálsusb
. No sé si hay una manera de volver a conectarlo.