Ejetar unidades USB / comando ejetar

55

Sei que o ejectcomando pode ser usado para ejetar quase qualquer componente de hardware conectado, mas pode ser usado para ejetar unidades USB?

É possível ejetar unidades USB e HDs externos com o ejectcomando?

Joe Barr
fonte
3
Relacionado: o oposto de eject /dev/sdXis sg_start -s /dev/sdX(do sg3_utilspacote), ambos usam comandos SCSI para enviar para o dispositivo.
Yeti

Respostas:

15

Não. Nem precisam ser; ejecté usado para abrir unidades ópticas, nas quais não é possível puxar a mídia diretamente.

A desmontagem é suficiente para USB / eSATA / etc. dispositivos de armazenamento.

Ignacio Vazquez-Abrams
fonte
Hmm, eu vi ejetar o disco rígido como em / dev / sda em algum lugar. Acho que a referência estava errada então.
31512 Joe
Você pode fazer isso, mas geralmente não faz muito, se é que alguma coisa.
Ignacio Vazquez-Abrams
11
Isso pressupõe que o dispositivo esteja montado em primeiro lugar e que carrega outro grande conjunto de suposições (ele possui um sistema de arquivos que você pode ler, por exemplo). Imagine que você está apagando várias unidades externas - elas provavelmente nunca são montadas. ejetar é a coisa certa a usar.
James Moore
11
Se estou sempre inseguro, eu syncantes de arrancá-lo fora
EkriirkE
Grande, gordo AVISO: Isso NÃO é completamente verdade. Caso contrário eject, o driver de dispositivo USB subjacente ainda pode (tentar) escrever APÓS o umountretorno. Isso pode ser visto claramente se a unidade tiver um LED de status. Puxar o pendrive logo após o umounttérmino é RECEITA DE DESASTRE.
ZioByte 11/09
77

Sim. Por exemplo:

sudo eject /dev/sda

Outras respostas aqui que indicam que você precisa de hardware de ejeção mecânica estão incorretas.

Desmontar não é a mesma coisa que ejetar.

  1. Se você desmontar um volume, poderá montá-lo imediatamente, pois o dispositivo subjacente ainda está disponível. Em algumas situações, isso pode representar um risco de segurança. Ao ejetar o dispositivo, apenas uma redefinição do subsistema USB (por exemplo, uma reinicialização) recarregará o dispositivo.
  2. Ao ejetar o dispositivo, você efetivamente desabilita qualquer acesso adicional ao dispositivo. Somente uma redefinição do subsistema USB (por exemplo, uma reinicialização) recarregará o dispositivo. Caso contrário, você deve desconectar fisicamente o dispositivo USB e reconectá-lo para acessá-lo novamente.
  3. Antes de ejetar, este comando desmontará todos os volumes no dispositivo que foi montado.
  4. Se os volumes estiverem em uso, esse comando falhará como na desmontagem, exceto que alguns volumes podem ser desmontados e alguns volumes podem permanecer montados.
danorton
fonte
11
Eu também tive que usar sudopara concluir este comando (tudo o que faria era desmontar a unidade antes de dizer que não era possível abrir o arquivo). Fora isso, resposta útil.
GDP2 31/01
Resposta subestimada neste tópico. Basta olhar para um pen drive montado no FAT32 e observe como a desmontagem e a ejeção têm um mundo de diferença apenas no explorador de arquivos (por exemplo: nautilus). Um simples clipe de Sansa também ajudaria a demonstrar isso.
Cloud
O dispositivo ainda está presente ao executar o lsusb. Portanto, você não precisa redefinir todo o subsistema USB. Apenas o dispositivo é suficiente. Você pode usar o usbreset para fazer isso github.com/jkulesza/usbreset github.com/CWempe/usbreset Os arquivos usbreset.c estão identicamente nos dois projetos,
Hannes
Como sei que "sda" é o caminho certo? Posso mapear sda, sdb, etc. para os nomes reais dos dispositivos?
Jürgen K.
38

ejectfuncionará, mas realmente não "terminará o trabalho" em relação às unidades rotativas USB .

A melhor maneira de desconectar um disco rígido externo USB, após a desmontagem adequada , é:

udisks --detach /dev/sdb

Isso geralmente faz com que a unidade gire para baixo normalmente.

Precisamente, a implementação atual :

  • envia o comando SCSI sync-cache,
  • envia o comando de parada SCSI,
  • desata o driver do kernel de armazenamento usb,
  • suspende o dispositivo USB (energia),
  • logicamente desativa / remove da sua porta USB.

Esse processo está próximo ao procedimento manual sugerido aqui . A resposta inicial foi no askubuntu .

EDIT: Além disso, como aponta g.rocket , este comando pode ser equivalente:

udisksctl power-off -b /dev/sdb
Totor
fonte
No meu ubuntu onyl udisksctlque não tem --detachotion está disponível. O que fazer neste caso? obrigado.
Wakan Tanka 11/01
@WakanTanka que você instala udisks.
21816 Totor
Como posso instalar udisks? Não está no meu sistema. Eu encontrei o pacote udisks2, mas que não fez udisksou udisks2 disponível.
Martin Thoma 14/05
5
@WakanTanka udisksctl power-off -b /dev/sdwhateverparece fazer a mesma coisa.
precisa saber é o seguinte
@ g.rocket resposta atualizada de acordo. Obrigado.
Totor
8

Etapas manuais para desmontar o disco / dev / sdb (requer sudo):

echo 'offline' > /sys/block/sdb/device/state
echo '1' > /sys/block/sdb/device/delete

Isso desligará completamente o dispositivo e o desconectará do sistema. Ele não será detectado novamente até que seja desconectado e reconectado.

Tony George
fonte
2
FWIW, esta é a única coisa que funciona para mim em um Xen dom0 com um suporte USB externo - os comandos eject e udisks deram erros.
GS - Peça desculpas a Monica
11
Eu estava procurando por isso, estou no modo de emergência dracut e não tenho acesso a nenhuma das outras funções. Obrigado!
Nassiel 25/10
hdparm -Ytambém é útil para unidades SATA / IDE.
Walf
6

Se você ler atentamente a página do manual ejetar (1) , poderá ver que existem 4 métodos de ejeção:

   -r   This  option specifies that the drive should be ejected using a CDROM
        eject command.

   -s   This option specifies that the drive should  be  ejected  using  SCSI
        commands.

   -f   This option specifies that the drive should be ejected using a remov‐
        able floppy disk eject command.

   -q   This option specifies that the drive should be ejected using  a  tape
        drive offline command.

Quando você chama ejetar no HDD / SCSI, emite um ioctl(fd, SG_IO, (void *)&io_hdr);comando (copiar das eject.cfontes).

Isso é equivalente à remoção segura do dispositivo no MS Windows ou no MaxOSX.

Para alguns dispositivos, isso tem uma média especial. Por exemplo, o Kindle 3 após o comando de ejeção ter sido movido para o modo de carregamento e permitir a navegação no dispositivo, enquanto antes da tela ser bloqueada.

Outros utilitários fazem a mesma coisa, assim

scsi-spin --force --down /dev/sda
gavenkoa
fonte
3

"Ejetar" não tem significado para hardware sem uma bandeja ou outro mecanismo de carregamento (presumo que ele também funcione com unidades de fita).

No entanto, o teste com uma unidade flash USB externa informa que ejectfunciona da mesma maneira umount- com o efeito colateral de fazer os nós do dispositivo desaparecerem, por exemplo,

% ls  /dev/sdc*
/dev/sdc  /dev/sdc1
% sudo eject /dev/sdc
% ls  /dev/sdc*
/dev/sdc

Note que /dev/sdc1desapareceu.

Renan
fonte
11
Nunca tentei com fitas ( mt rewofflé mais conveniente porque também rebobina), mas faz o trabalho com drives de disquetes motorizados, como os encontrados em Macs antigos e estações de trabalho Sun.
Alexs #
@Alexios interessante.
Renan
3

Na linha de comando osx, você deve usar diskutil, onde LABEL é a etiqueta da sua unidade USB.

diskutil eject /Volumes/<LABEL>
efesaid
fonte
2

udisks --detach /dev/sdXonde (X) é a última letra do seu dispositivo USB. Funciona bem em qualquer sistema Linux.

victorx66
fonte
Sua resposta é boa, embora talvez seja um pouco curta. Eu sugeriria elaborar mais: o que esse comando faz, como, por que isso é o que você sugere etc.
user259412 4/15/15
0

OK, vou tentar explicar isso melhor:

O comando udisks remove e desliga completamente qualquer dispositivo USB montado ou conectado ao comando system unmount, basta desmontar a partição, ou seja: dev / sdb1 ou qualquer outra coisa, mas o usb ainda está presente no sistema.

Portanto, não é o mesmo desmontar, ejetar e desanexar

udisks = desligar o usb

umount = apenas desmonte a partição e não o pendrive inteiro

ejetar = o mesmo ou muito próximo do comando umount

victorx66
fonte