GNU/Linux >> Tutoriales Linux >  >> Linux

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

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:

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

Esto funciona porque... magia.

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb

Linux
  1. Cómo crear una memoria USB de arranque de Linux en Windows

  2. ¿Cómo quitar iso 9660 de USB?

  3. Base de datos MySql desde una memoria USB

  4. ¿Cómo escribo archivos en un USB sin ser root?

  5. No se puede iniciar desde la memoria USB de arranque múltiple de Yumi

Cómo instalar RHEL 8 desde USB

Cómo instalar Ubuntu desde USB

Cómo crear un ISO desde una unidad USB de arranque en Linux

Cómo arrancar desde una unidad USB en Virtualbox en Linux

¿Cómo puedo instalar Windows 7 sin dvd o usb, en linux?

¿Cómo evitar que la dirección MAC cambie después de desconectarse?