Número de série do disco rígido do Linux como não raiz


15

Antes de mais, gostaria de pedir desculpas pelo título por não incluir os detalhes do hardware. Isso ocorre porque estou procurando um comando que funcione em toda a distribuição Linux.

Questão:

Eu sou muito novo no Linux e não sei muito, no entanto, é possível recuperar o número de série do disco rígido em execução como não raiz. Estou ciente de que existem comandos disponíveis para recuperar essas informações em execução usando o sudo. No entanto, preciso de uma maneira de recuperar essas informações sem executar como sudo.

Todas as sugestões serão muito apreciadas.

Atenciosamente,

Mustafa

Respostas:


19

Na maioria das distribuições atuais, os números de série do HDD são armazenados no banco de dados do udev, que pode ser consultado sem permissões de root:

/sbin/udevadm info --query=property --name=sda

(olhar para ID_SERIAL, ID_SERIAL_SHORT, há também /dev/disk/by-id/ata-*links simbólicos para unidades ATA com base nesses valores).

udisksfornece uma interface de nível superior para esses dados e muito mais (também fornece acesso aos atributos SMART sem exigir privilégios de root, o que seria necessário para chamar, por exemplo, smartctldiretamente).


Você está certo, tentei udisks --show-info.__ Mas__ deve-se observar que, quando usado no modo em lote ou geralmente em scripts, udisksé MUITO MAIS LENTO que udevadm.
Syntaxerror

6

Outra maneira que geralmente funciona é:

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

Aqui está um liner que fornece uma enumeração rápida de unidade e modelo / número de série:

ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print $NF " " $(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'  

Ou para máquinas remotas:

ssh $host "ls -l /dev/disk/by-id/ | grep scsi- | grep -v part | awk '{print \$NF \" \" \$(NF-2)}' | sed 's|../../||g' | sed 's/scsi-...._//g'"

Você pode processar ainda mais essa saída. Para a maioria dos tipos de unidades, a segunda sequência por linha é MODEL_SERIAL.


2

Como o womble disse, sem acesso root ou concessão de permissões semelhantes a root em algum processo, você não pode conseguir isso. No entanto, como você diz que é um novato, deixe-me observar um comando útil chamado lshw.


Obrigado a Womble e a você mesmo, muito apreciados. Vou investigar o comando que você mencionou.

1

Com a exceção de conceder permissões semelhantes a raiz para algum processo, você não pode conseguir isso. Mesmo como root, você não pode fazer isso em algumas configurações de hardware.


Obrigado pela sua resposta rápida Womble. Vou tentar.
Mustafa

0

Os links em / dev / disk / by-id são criados pelo udev. Em /etc/udev/rules.d/50-udev.rules, essas linhas podem ser encontradas:

KERNEL=="sd*[!0-9]|sr*", SYSFS{ieee1394_id}=="*", ENV{ID_SERIAL}="$sysfs{ieee1394_id}", ENV{ID_BUS}="ieee1394"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/usb_id -x"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -s %p -d $tempnode"
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}=="", IMPORT{program}="/lib/udev/scsi_id -g -x -a -s %p -d $tempnode"
KERNEL=="nst[0-9]*|st*|sd*[!0-9]|sr*|dasd*[!0-9]|cciss?c", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}"

Infelizmente, não é trivial descobrir esse by-idlink simbólico a partir do nome do dispositivo. Mas há pelo menos uma maneira direta:

$ udevinfo -q path -n /dev/sda
/block/sda
$ udevinfo -q symlink -p /block/sda
disk/by-id/scsi-SATA_KINGSTON_SVP100_31JY100MY5SK disk/by-path/pci-0000:00:11.0-scsi-0:0:0:0

Uma lista separada por espaço é retornada. Então o by-idcaminho pode ser encontrado.

Ou você pode obter diretamente o número de série "composto":

$ udevinfo -q env -p /block/sda
ID_VENDOR=ATA
ID_MODEL=KINGSTON_SVP100S
ID_REVISION=CJR1
ID_SERIAL=SATA_KINGSTON_SVP100_31JY100MY5SK
ID_TYPE=disk
ID_BUS=scsi
ID_PATH=pci-0000:00:11.0-scsi-0:0:0:0

No ID_SERIALapós o último sublinhado Você pode obter o número de série.

Pelo que vejo, um número de série pode conter caracteres alfanuméricos e '-' (tenho HDDs SCSI). Alguém conhece alguma limitação sobre o número de série? Se pode conter '_', esse método não é à prova de balas.

A ID_MODELchave poderia ser usada para localizar com mais precisão o início do número de série, pois (me parece) seus 15 primeiros caracteres são adicionados aos ID_SERIAL(espaços substituídos por '_').


"udevinfo" não funcionou para mim aqui no Ubuntu. No entanto, a seguinte linha única fez exatamente o que eu queria: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'Claro, isso -q propertypode ser deixado de fora, mas eu sempre acho que é um desperdício de recursos permitir a udevadmsaída de linhas adicionais que não precisamos.
Syntaxerror
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.