GNU / Linux: como detectar mapeamentos de disco rígido?

3

Vamos supor que você tenha dois discos rígidos:

  • um interno (inicializa GNU / Linux (Debian));

  • um externo (USB).

fdisk -l detecta ambos, mas não informa qual é /dev/sda e qual é /dev/sdb . lsusb dirá que há um dispositivo USB externo conectado, mas não informará se ele foi mapeado para /dev/sda ou /dev/sdb .

Como você pode obter essas informações do seu sistema?

    
por Elena 28.02.2012 / 02:24

6 respostas

4
ls -l /sys/class/block/sd?

As entradas sd? são links simbólicos que mostram como o disco está conectado ao computador. Haverá um /usb para um disco USB.

udevadm info -a -n sda

Isso mostra todas as informações de identificação que o kernel pode obter diretamente para sda . Você verá como o disco está conectado em mais detalhes, por exemplo indo diretamente de SUBSYSTEMS=="scsi" para SUBSYSTEMS=="pci", DRIVERS=="ahci" para um disco SATA em um controlador Intel, ou indo de SUBSYSTEMS=="scsi" para SUBSYSTEMS=="usb", DRIVERS=="usb-storage" para um disco USB.

ls -l /dev/disk/by-*

Em /dev/disk/by-* , você pode localizar discos por anexo de hardware ( by-path ), por algum identificador exclusivo global ( by-uuid ), por rótulo escolhido pelo homem ( by-label ) ou por identificação do fabricante ( by-id ).

    
por 28.02.2012 / 21:01
3

Não tenho certeza da melhor resposta, mas aqui estão algumas ideias:

Você pode consultar /sys/class/block/sdX/device/model para obter as informações de marca / modelo relatadas pelo dispositivo. Por exemplo:

cat /sys/class/block/sda/device/model 
SAMSUNG HD161GJ

Isso por si só pode ser suficiente para identificar qual é o seu externo e qual é o seu dispositivo interno. Você pode ver a saída de dmesg , que para dispositivos USB incluirá algo como:

[ 2073.412999] scsi12 : usb-storage 2-1.8:1.0

Isto identifica o barramento SCSI 12 como um barramento de armazenamento USB. Podemos então procurar por dispositivos SCSI no barramento 12:

# dmesg | grep scsi12
[ 2074.488651] sd 12:0:0:0: Attached scsi generic sg6 type 0
[ 2076.592154] sd 12:0:0:0: [sdf] 30481152 512-byte logical blocks: (15.6 GB/14.5 GiB)
[ 2076.592639] sd 12:0:0:0: [sdf] Write Protect is off
[ 2076.592645] sd 12:0:0:0: [sdf] Mode Sense: 23 00 00 00
[ 2076.593142] sd 12:0:0:0: [sdf] No Caching mode page present
[ 2076.593147] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[ 2076.596270] sd 12:0:0:0: [sdf] No Caching mode page present
[ 2076.596276] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[ 2076.619078] sd 12:0:0:0: [sdf] No Caching mode page present
[ 2076.619084] sd 12:0:0:0: [sdf] Assuming drive cache: write through
[ 2076.619088] sd 12:0:0:0: [sdf] Attached SCSI removable disk
    
por 28.02.2012 / 02:52
3

Na minha caixa Debian (agora no Lubuntu), eu costumava usar testdisk -l (leia-se: 'minus pequeno L') para este propósito. Estou ciente de que nem todas as distro têm testdisk (uma ferramenta de recuperação bem conhecida) pré-instalada, mas a maioria deve tê-la.

Outra ótima ferramenta que aprendi há pouco tempo é lsblk :

$ lsblk -d -io KNAME,TYPE,SIZE,MODEL

ou, se você quiser que seus HDDs sejam exibidos:

$ lsblk -d -io KNAME,TYPE,SIZE,MODEL | grep 'sd\w'

(O \ w, embora não seja obrigatório, evitará saída "meia-cor" feia nas distribuições que na configuração padrão têm grep alias para grep --color=auto .)

Você também pode usar o meu script (na realidade, muito complexo), que decidi reduzir para atender apenas a esse pequeno propósito:

link

    
por 21.10.2013 / 00:23
3

Geralmente, o mais rápido é apenas para cat /proc/scsi/scsi , que terá o suficiente para mostrar a você qual é qual:

$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi2 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST95005620AS     Rev: SD23
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi4 Channel: 00 Id: 00 Lun: 00
  Vendor: 2.0      Model: USB Flash Drive  Rev: 1.00
  Type:   Direct-Access                    ANSI  SCSI revision: 02

Portanto, no meu caso, o primeiro (que seria sda) é um Seagate ST95005620AS, e o segundo (sdb) é um pendrive USB.

Para obter informações mais detalhadas e específicas, consulte /sys/block/sda e /sys/block/sdb e também /sys/class/scsi_disk .

/sys/class/scsi_disk em particular contém links simbólicos na árvore de endereços PCI que revelará hosts USB vs SATA:

$ ls -l /sys/class/scsi_disk
total 0
lrwxrwxrwx 1 root root 0 2012-02-28 23:50 2:0:0:0 -> ../../devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/scsi_disk/2:0:0:0
lrwxrwxrwx 1 root root 0 2012-02-28 23:50 4:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb1/1-8/1-8:1.0/host4/target4:0:0/4:0:0:0/scsi_disk/4:0:0:0
$ cat /sys/block/sd[ab]/device/model
ST95005620AS    
USB Flash Drive 

Para mais informações, experimente também find /sys -name 'scsi*' e find /sys/block/sd[a-z]/ .

    
por 29.02.2012 / 05:51
2

A resposta de Gilles eu acho que é a melhor, mas estou adicionando esta apenas por uma questão de completude.

hdparm -i /dev/sda

Isso mostrará algumas informações básicas do driver do controlador obtido a partir da unidade (incluindo modelo e número de série). Este comando não requer root se você tiver acesso de leitura ao dispositivo /dev (como por meio de permissões de grupo).

hdparm -I /dev/sda

Isto irá mostrar-lhe uma tonelada de informações avançadas sobre a unidade (modelo, número de série e tudo o que for possível). Este comando requer raiz.

    
por 29.02.2012 / 06:11
1

Os dois comandos que eu normalmente uso em situações como esta são lsblk e blkid . O primeiro lançará cada dispositivo de bloco de disco com uma lista de partições, seu tamanho e seu ponto de montagem (se montado) (e talvez seus rótulos de volume, se presentes, embora eu não tenha nenhum dispositivo com rótulos de volume conectados no momento) verifique isso com). Este último irá imprimir cada partição com seu tipo de sistema de arquivos, UUID e rótulo de volume (se presente).

mount também informará onde cada dispositivo está montado, portanto, o dispositivo montado na raiz do sistema de arquivos é o dispositivo de inicialização. Eu acredito que discos rígidos internos também são enumerados antes de discos rígidos externos, então /dev/sda deve ser o disco rígido interno.

    
por 12.03.2016 / 21:58