Como faço para descobrir qual / dev é uma unidade flash USB?


160

Quero montar uma unidade USB, duas delas e preciso de dois pontos de montagem diferentes. Infelizmente, o kernel do Linux passou por uma mudança de nome e não consigo descobrir qual /devlocal é o correto. Existe uma maneira de procurar por dmesgou em /procalgum outro lugar para descobrir qual nó do dispositivo é uma unidade USB.

(Estou usando o ArchLinux, se isso ajudar alguém ... /dev/sdaé o primeiro disco rígido, /dev/sr0é uma unidade de DVD, etc.)

editar: a unidade USB está conectada a um hub USB. Eu olhei através dmesge diz que o hub estava conectado e procurou os 3 dispositivos conectados a ele. Ainda não consigo ver onde está minha unidade USB.


1
Não consegue ver? Talvez espere um pouco. Ou tente outra porta USB. Veja o que diferenças há em 'lsusb'
— Nick Devereaux

Talvez queira reformular a pergunta de alguma forma - nem todos os dispositivos USB são discos, afinal.
— Arafangion

3
O dfcomando mostra onde foi montado
— Will Sheppard

Respostas:


83

Maneira mais fácil: observe a saída dmesgapós conectar o dispositivo USB. Ele deve mostrar qual /devnó foi atribuído a ele.


2
dmesgfunciona muito bem, mas tenho um caso em dmesgque não mostra o /devnó: o [421963.864281] usb 3-6: new high-speed USB device number 32 using xhci_hcdque isso significa? Como posso montar este dispositivo? O dispositivo aparece em lsusb...
— modulitos

1
Na verdade, eu descobri. Houve uma atualização do kernel desde a minha última reinicialização que estava causando esse problema. Após uma reinicialização, meu usb monta muito bem. Espero que isso ajude alguém!
— Modulitos

54

Desde que você esteja executando o udev , você pode fazer isso facilmente referenciando / dev / disk / by-id / usb- manufacturername _ serialnumber . Eles aparecem como links simbólicos que você pode referenciar diretamente no seu fstab ou que pode ser desreferenciado usando o readlink -e para determinar o dispositivo de bloco associado.

Aqui está um exemplo do mundo real. Na minha máquina, tenho 3 discos rígidos USB conectados. Cada um deles aparece em / dev / disk / by-id com números de série exclusivos (embora compartilhem uma sequência de caracteres comum do fabricante). Criei links simbólicos para cada uma dessas três entradas exclusivas e agora posso determinar rapidamente qual unidade é qual (e qual dispositivo está associado a cada unidade) executando o readlink -e linkname . Por exemplo, a execução do readlink -e / root / disk2 na minha máquina atualmente exibe " / dev / sde ", enquanto o readlink -e / root / disk3 não produz nenhuma saída.


15
Curto e simples:for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done
— Felipe Alcacibar 25/11

54

Todas essas são boas sugestões, mas o método mais rápido e menos detalhado é digitar apenas o seguinte no terminal:

mount

que fornecerá uma lista de todos os dispositivos montados (isso pressupõe que a unidade USB esteja montada, o que geralmente acontece com as distribuições modernas do Linux).


5
Não, ele não monta magicamente o seu dispositivo. Você precisa especificá-lo com mount /dev/id /mount/point, para que não funcione.
— polym

9
Minha resposta aborda a pergunta do usuário 'Existe uma maneira de pesquisar no dmesg ou / proc ou em outro lugar para descobrir qual nó do dispositivo é uma unidade USB.' 'E não se destina a fornecer orientações sobre a praticidade de montar uma unidade no Linux .
— AnotherLongUsername

Essa resposta resolveu uma pergunta quase idêntica para mim.
— Matthew Brown aka Lord Matt

1
Eu acho que o comportamento da montagem automática depende muito do tipo de distribuição.
— Jiggunjer # 02/16

1
dftambém, suponho.
— Alexey

24

Experimente o comando udevinfo -q all -n /dev/sda, onde /dev/sdaestá o caminho para o seu disco. Isso fornece uma grande quantidade de informações sobre o disco que você está vendo - há uma entrada que informa sobre o barramento ao qual está conectado.

Obviamente, isso evita que você precise grep através do dmesg e / ou logs.

Atualizar

udevadm info --query=all -n /dev/sda 

Desde pelo menos julho de 2010 [ 1 ] udevinfo foi substituído no Debian (e derivado) por udevadm infoum pouco transitório, com o qual havia links simbólicos que foram descontinuados e removidos (você ainda pode encontrá-los em máquinas antigas e não atualizadas). Sempre de [ 1 ] podemos ler:

No udev 117, udevadmfoi introduzido udevinfoe outros programas transformados em links simbólicos de compatibilidade. Os links simbólicos foram descontinuados no udev 128 e removidos definitivamente no udev 147 .


8
No Debian, udevinfoé renomeado udevadm.
— 22611 Steve Pomeroy #

8
No Ubuntu, o comando parece ser "udevadm info --query = all -n / dev / sda"
— machineghost

Suponho que eles renomeado o comando em algum momento - quando eu escrevi as respostas (há muito tempo) o comando trabalhou no sistema ubuntu que eu postei isso de;)
— Eltariel

Comando ainda funciona no ubuntu,udevadm info --query=all -n /dev/ttyUSB1
— Siddharth

1
udevadm info --query=all -n /dev/ttyUSBno Fedora também.
— SLM

22

o método mais simples de ver o que está acontecendo é apenas digitar (como raiz, é claro):

blkid -c /dev/null

Isso fornece uma visão geral completa de todos os dispositivos de bloco, mesmo que não estejam montados


Nem todas as distros têm isso. Qual você estava usando?
— New Alexandria

Isso não gera nada na minha distro Raspbian.
— IgorGanapolsky 8/08/16

Comando não encontrado: blkid
— IgorGanapolsky 28/09

Nenhuma saída deste comando no Ubuntu 14.04 de 64 bits.
— Gbmhunter 17/04

11

/dev/disk/by-* é a maneira mais fácil nesse caso, se por algum motivo você quiser tornar a vida mais interessante, pode usar o HAL.

Para listar todos os dispositivos que você usa:

hal-device

Para obter uma propriedade específica que você usa (isso retornará /dev/sd*em um dispositivo de armazenamento USB):

hal-get-property --udi $UDI --key block.device

Há também:

hal-find-by-capability
hal-find-by-property

Se você quiser torná-lo ainda mais complicado, pode escrever com facilidade um montador automático baseado em HAL , o que pode ser bastante útil se você quiser automatizar as coisas completamente.

E apenas para completar, também existem:

lsusb -v
lshw

O que fornece algumas informações gerais sobre USB e seu hardware em geral.


2
/ dev / disk / by-id / * usb * é muito útil.
— 12117 Rob

/ dev / disk / por etiqueta ftw. Obrigado :)
— Triptych

10
sudo fdisk -l

E apenas analise o resultado.


1
Página man fdisk "Se nenhum dispositivo for fornecido, os mencionados em / proc / partitions (se houver) serão usados." Executar o fdisk pode não ser uma opção ... Baseado em um sistema Debian que eu sei que não o tem instalado, meu palpite é que alguns sistemas GPT podem não instalar o software desnecessário. Ainda assim, a verificação de / proc / partitions deve ser uma opção.
— TOOGAM

Esta foi a única opção que funcionou bem para mim. Lamento se não funcionou para você!
— Felipe

8

Usar

ls -l /dev/disk/by-id/usb*

Sob as regras padrão do udev, isso mostrará a maioria dos dispositivos USB e mostrará o link simbólico para o nome do dispositivo de bloco no sistema.

Se isso não funcionar, olhe /dev/disk/by-id/diretamente.


6

Para dispositivos USB, você pode simplesmente fazer

REMOVABLE_DRIVES=""
for _device in /sys/block/*/device; do
    if echo $(readlink -f "$_device")|egrep -q "usb"; then
        _disk=$(echo "$_device" | cut -f4 -d/)
        REMOVABLE_DRIVES="$REMOVABLE_DRIVES $_disk"
    fi
done
echo Removable drives found: "$REMOVABLE_DRIVES"

1
+1. Script simples e conciso para executar a tarefa automaticamente.
— Leesei

2

Dê uma olhada na árvore embaixo /dev/disk. Ele lista os discos e suas partições (sistemas de arquivos) por vários esquemas.


2

/ var / log / message se o dmesg não tiver mais as informações.


0

Se você desconectar a unidade USB e conectá-la novamente, deverá vê-la inicializada no kernel (dmesg)


0

Com base na excelente resposta do stormlash e com a dependência do udev para preencher a árvore de dispositivos "/ dev / disk / by-id / usb", você pode definir um predicado (Bash) da seguinte maneira:

is_usb_device() {
    local device_path=$1        # such as /dev/sdc
    for devlink in /dev/disk/by-id/usb*; do
        if [ "$(readlink -f "$devlink")" = "$device_path" ]; then
            return 0
        fi
    done
    return 1
}

E então use-o:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.