Como montar novamente um dispositivo USB após desmontar do Nautilus sem desconectá-lo?

25

Acho que, para montar novamente um pendrive, eu tenho que desconectá-lo fisicamente e reconectá-lo. Como posso fazer isso sem uma ação física tão cansativa?

tshepang
fonte
3
O dispositivo USB é desconectado logicamente (deve haver uma mensagem para esse efeito nos logs do kernel). Ele não terá /devmais entrada e o IIRC também não aparecerá lsusb. Não sei se há uma maneira de reconectá-lo.
Gilles 'SO- stop be evil'
Esta questão é muito semelhante a: superuser.com/questions/1163375/...
Dennis Benzinger

Respostas:

8

Da minha experiência no Ubuntu, quando você "ejeta" um pendrive do Nautilus, o dispositivo realmente desaparece do sistema. Não sei por que, mas nem o Nautilus nem a linha de comando podem recuperá-lo. Acho que a lógica é que, uma vez que você ejeta um pendrive, você não o quer de volta, mas vai desconectá-lo.

A maneira como resolvo isso (quando necessário) é usando em umountvez do Nautilus. Você também pode simplesmente ligar syncpara liberar os buffers do sistema de arquivos no disco.

Acabei de encontrar um tópico com mais informações: http://ubuntuforums.org/showthread.php?t=1477247

Portanto, basicamente a) Reconstrua o nautilus a partir da fonte sem esse patch (e mantenha-o atualizado quando você atualizar seu sistema ...) ou b) use outro gerenciador de arquivos (pelo menos ao desmontar ^^).

Thomas
fonte
2
Verifique /dev/disk/by-ide veja se o dispositivo realmente se foi. Aposto que não, e pode ser remontado a partir daí com um mountcomando.
21430 LawrenceC
11
@ultrasawblade /dev/disk/by-idcontém links simbólicos para arquivos de dispositivos /dev, por exemplo /dev/disk/by-id/usb-Kingston_DT_100_G2_001CC0C60DBDFC90D32923CE-0:0 -> ../../sdb. Quando o dispositivo sai atrás udisks --eject(o que suponho que aconteça aqui), o link simbólico fica obsoleto e não pode ser usado para remontar.
PointedEars
16

Este é o comportamento que tenho no meu sistema Ubuntu Lucid:

Quando conecto meu flash / pen drive USB com duas partições, o 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
$

Então, apenas partições têm /dev/disk/by-uuid ; enquanto o disco e as partições têm (diferente) /dev/disk/by-id.

Agora, se eu clicar com o botão esquerdo do mouse em uma das entradas da partição no miniaplicativo Disk Mounter na área de trabalho Gnome2 no Lucid, receberei apenas duas entradas: "Abrir" ou "Ejetar" (como mencionado em [RESOLVIDO] Como remontar uma unidade USB com nautilus no lynx?, da resposta de @Thomas , referindo-se a 16_hide_unmount.patch ). Além disso, palimpsestaqui mostra duas partições para o disco.

Quando clico no botão Ejetar em uma das partições - elas desaparecem; neste momento, palimpsestmostra o disco, mas nenhuma partição e uma mensagem "Nenhum meio encontrado"; Além disso:

$ 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

Então, como mencionado no comentário de @ultrasawblade , de fato o disco está lá, mas não as partições - embora, eu acho que precisaria das partições como dispositivos , para isso mount.

Além disso, o mesmo comportamento que clique com o botão esquerdo do mouse + "Ejetar" na GUI da área de trabalho, posso entrar no terminal com sudo eject /dev/sdb. Observe que também é possível abrir palimpsest, a partir daí, clique em cada uma das duas partições e clique em "Desmontar volume" - nesse ponto, os ícones para as partições ainda serão mostrados no applet Disk Mounter, mas serão anotados como desmontados; e então pode-se fazer sudo udisks --detach /dev/sdb: isso faz com que os ícones desapareçam do applet Disk Mounter - mas também o /dev/sdbdispositivo não estará mais presente no sistema (no entanto, lsusbainda mostrará o dispositivo)!

Depois de procurar um pouco pela resposta (tentei udevadm monitor --environmentvárias coisas durante o processo de conectar e desconectar, com a replicação de todas as ações udevadm trigger, para verificar o que o BLKRRPARTioctl faz), sem nenhum sucesso - eu finalmente me deparei com Como remontar um pendrive sem remover e reinserir - Ubuntu / Debian , que tem a resposta:

sudo eject -t /dev/sdb

Após a execução deste comando - as duas partições aparecem novamente no applet Disk Mounter - sem desconectar / reconectar a chave USB !! Isso é tudo estranho, porque se você ler man eject:

   -t   With  this  option the drive is given a CD-ROM tray close command.
        Not all devices support this command.

... você nunca esperaria que fosse aplicável à unidade USB Flash / Thumb! (E eu até tentei olhar para sys-utils / eject.c , e não consigo ver nada óbvio :))

É claro que, se sudo udisks --detach /dev/sdbjá foi executado anteriormente, /dev/sdbnão existirá, então eject -t /dev/sdbfalhará eject: unable to find or open device for: '/dev/sdb'. Nesse caso, o ciclo de energia USB, conforme observado em # 7457 Como reconectar um dispositivo USB logicamente desconectado?me ajudou 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'

Isso fez com que os ícones das partições fossem exibidos novamente no applet Disk Mounter, diretamente como montados; para encontrar o endereço certo, tente enquanto o 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
fonte
11
tl; dr: O comando para "inserir" uma unidade USB ejetada novamente é eject -t /dev/<DEVICE>.
Dennis Benzinger
4

Em sistemas baseados no Debian, pelo menos, você deve ser capaz de fazer isso:

  1. descobrir qual deve ser a letra da unidade ... Estou disposto a dizer / dev / sdb aqui para o exemplo.
  2. Ejete duas vezes a letra da unidade 'seria' para ligar efetivamente o dispositivo.
  3. Lucro!

Isso funciona porque ... mágica.

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