¿Cómo volver a montar una memoria USB después de desmontar de Nautilus sin desconectarla?

25

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?

tshepang
fuente
3
El dispositivo USB está desconectado lógicamente (debe haber un mensaje para ese efecto en los registros de su núcleo). Ya no tendrá una /deventrada, y el IIRC tampoco aparecerá lsusb. No sé si hay una manera de volver a conectarlo.
Gilles 'SO- deja de ser malvado'
Esta pregunta es muy similar a: superuser.com/questions/1163375/...
Dennis Benzinger

Respuestas:

8

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 umountde Nautilus. También puede llamar syncpara 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 ^^).

Thomas
fuente
2
Compruebe /dev/disk/by-idy vea si el dispositivo realmente se ha ido. Apuesto a que no lo es, y se puede volver a montar desde allí con un mountcomando.
LawrenceC
1
@ultrasawblade /dev/disk/by-idcontiene 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.
PointedEars
16

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, palimpsestaquí se muestran dos particiones para el disco.

Cuando hago clic en Expulsar en cualquiera de las particiones, ambas desaparecen; en este punto, palimpsestmuestra 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/sdbdispositivo ya no estará presente en el sistema (sin embargo, lsusbtodavía mostrará el dispositivo)!

Después de buscar bastante la respuesta (probé cosas desde udevadm monitor --environmentconectar y desconectar, con la replicación de todas las acciones a través udevadm trigger, hasta investigar lo que hace el BLKRRPARTioctl), 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/sdbse ha ejecutado anteriormente, entonces /dev/sdbno existirá, por eject -t /dev/sdblo 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
sdaau
fuente
1
tl; dr: El comando para "insertar" una unidad USB expulsada nuevamente es eject -t /dev/<DEVICE>.
Dennis Benzinger
4

En los sistemas basados ​​en Debian, al menos, debería poder hacer esto:

  1. averiguar cuál debería ser la letra de unidad ... Tengo que decir / dev / sdb aquí para el ejemplo.
  2. Expulse dos veces la letra de la unidad 'sería' para volver a encender el dispositivo de manera efectiva.
  3. ¡Lucro!

Esto funciona porque ... magia.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
Karl N. Redman
fuente