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

15

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

Pergunta:

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 que está sendo executado 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, eu preciso de uma maneira de recuperar essas informações sem correr como sudo.

Qualquer sugestão seria muito apreciada.

Atenciosamente,

Mustafa

    
por mustafa 26.08.2011 / 10:59

5 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

(procure por ID_SERIAL , ID_SERIAL_SHORT ; há também /dev/disk/by-id/ata-* links simbólicos para drives ATA baseados nesses valores).

udisks fornece uma interface de nível superior para esses dados e mais (também dá acesso a atributos SMART sem exigir privilégios de root, que seriam necessários para chamadas, por exemplo, smartctl diretamente).

    
por 28.08.2011 / 13:01
6

Outra maneira que normalmente funciona é:

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

Aqui está um folheto 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 drive, a segunda string por linha é MODEL_SERIAL.

    
por 28.09.2011 / 22:53
2

Como o womble disse, sem acesso root ou concedendo permissões de tipo raiz a algum processo, você não pode conseguir isso. No entanto, desde que você diz que é um novato, deixe-me observá-lo sobre um comando prático chamado lshw .

    
por 26.08.2011 / 12:57
1

Além de conceder permissões parecidas com raízes para algum processo, você não pode conseguir isso. Mesmo como root, você não pode fazer isso em algumas configurações de hardware.

    
por 26.08.2011 / 11:22
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 link simbólico by-id do nome do dispositivo. Mas há pelo menos um caminho direto:

$ 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ços é retornada. Então, o caminho by-id 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_SERIAL após o último sublinhado Você pode obter o número de série.

Como eu vejo um número de série pode conter caracteres alfanuméricos e '-' (eu tenho esses HDDs SCSI). Alguém sabe alguma limitação sobre o número de série? Se ele puder conter '_', este método não é à prova de balas.

A chave ID_MODEL pode ser usada para localizar com mais precisão o início do número de série, pois (parece-me) seus primeiros 15 caracteres são adicionados ao ID_SERIAL (espaços substituídos por '_'). / p>     

por 11.04.2013 / 13:13