2008-09-16 03:51:40 +0000 2008-09-16 03:51:40 +0000
161
161

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

Eu quero montar uma unidade USB, duas delas e preciso de dois pontos de montagem diferentes. Infelizmente, o kernel Linux sofreu uma mudança de nome e não consigo descobrir qual é a localização correcta do /dev. Existe uma maneira de olhar através do dmesg ou /proc ou noutro sítio qualquer para descobrir qual o nó de dispositivo que é uma drive USB.

(Estou a usar o ArchLinux se isso ajudar algum…/dev/sda é o primeiro disco rígido, /dev/sr0 é uma drive dvd, etc.)

edit: A drive USB está ligada a um hub USB. Eu olhei através do dmesg e ele diz que o hub estava ligado e digitalizou para os 3 dispositivos ligados a ele. Mas ainda não consigo ver onde está a minha unidade USB.

Respostas (11)

83
83
83
2008-09-16 03:53:52 +0000

A forma mais fácil: Veja a saída do dmesg depois de ligar o dispositivo USB. Deve mostrar-lhe o nó /dev que lhe foi atribuído.

54
54
54
2012-09-04 18:51:43 +0000

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

mount

que dará uma lista de todos os dispositivos montados (isto assume que a unidade USB está montada, o que é normalmente o caso das distros Linux modernas).

25
25
25
2008-09-16 03:59:28 +0000

Experimente o comando udevinfo -q all -n /dev/sda, onde /dev/sda é o caminho para o seu disco. Isto dá-lhe uma quantidade enorme de informação sobre o disco que está a ver - há uma entrada que lhe informa sobre o autocarro a que está ligado.

Isto, claro, poupa-lhe de ter de passar pelo dmesg e/ou logs.

Update

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

A partir de pelo menos Jul 2010 [ 1 ] udevinfo foi substituído em Debian (e derivado) por udevadm info com um pouco de transiente com o qual houve symlinks logo depreciados e removidos (você ainda pode encontrá-los em máquina antiga não atualizada). Sempre de [ 1 ] podemos ler:

Em udev 117, udevadm foi introduzido e udevinfo e outros programas transformaram-se em symlinks de compatibilidade. Os symlinks foram depreciados em udev 128 e removidos para sempre em udev 147.

23
23
23
2013-01-02 08:37:01 +0000

o método mais simples para ver o que se passa é apenas digitar (como raiz, claro):

blkid -c /dev/null

isto dá-lhe uma visão completa sobre todos os dispositivos de bloco, mesmo que não estejam montados

11
11
11
2009-09-24 22:36:40 +0000

/dev/disk/by-* é a forma mais fácil neste caso, se por alguma razão quiser tornar a vida mais interessante pode usar o HAL.

Para listar todos os dispositivos que usa:

hal-device

Para obter uma propriedade específica que usa (isto irá devolver /dev/sd* num dispositivo de armazenamento USB):

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

Há também:

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

Se quiser tornar as coisas ainda mais complicadas pode escrever um montador automático baseado em HAL , que pode ser bastante útil se quiser automatizar as coisas completamente.

E só para completar, há também:

lsusb -v
lshw

que fornece alguma informação geral sobre USB e o seu hardware em geral.

10
10
10
2015-11-10 02:47:28 +0000
sudo fdisk -l

E basta analisar o resultado.

8
8
8
2008-09-16 04:18:39 +0000

Use

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

Sob as regras padrão do udev, que lhe mostrará a maioria dos dispositivos usb e lhe mostrará a ligação simbólica ao nome do seu dispositivo-bloco no sistema.

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

7
7
7
2012-08-24 17:37:56 +0000

Para dispositivos USB 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"
2
2
2
2008-09-16 03:55:24 +0000

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

0
0
0
2008-09-16 03:53:27 +0000

Se desligar a unidade USB e voltar a ligá-la, deverá vê-la inicializar a partir do kernel (dmesg)

0
0
0
2018-11-29 19:02:45 +0000

Com base na excelente resposta da tempestade e com uma dependência do udev para povoar a árvore de dispositivos “/dev/disk/by-id/usb”, poderia definir um predicado (Bash) da seguinte forma:

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 depois utilizá-lo:

if is_usb_device "/dev/sdg"; then
    echo "/dev/sdg is a usb device"
else
    echo "/dev/sdg is not a usb device"
fi