Numero di serie del disco rigido Linux come non root


15

Prima di tutto, vorrei scusarmi per il titolo per non aver incluso i dettagli hardware. Questo perché sto cercando un comando che funzionerà in tutta la distribuzione Linux.

Domanda:

Sono molto nuovo di Linux e non so molto, tuttavia, è possibile recuperare il numero di serie del disco rigido in esecuzione come non root. Sono consapevole che ci sono comandi disponibili per recuperare queste informazioni in esecuzione con sudo. Tuttavia, ho bisogno di un modo per recuperare queste informazioni senza eseguire come sudo.

Ogni suggerimento sarà molto apprezzato.

Cordiali saluti,

Mustafa

Risposte:


19

Nella maggior parte delle distribuzioni attuali i numeri di serie dell'HDD sono memorizzati nel database udev, che può essere interrogato senza i permessi di root:

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

(cercare ID_SERIAL, ID_SERIAL_SHORT, ci sono anche /dev/disk/by-id/ata-*link simbolici per le unità ATA sulla base di quei valori).

udisksfornisce un'interfaccia di livello superiore a tali dati e altro (fornisce anche l'accesso agli attributi SMART senza richiedere i privilegi di root, che sarebbero necessari per chiamare, ad esempio, smartctldirettamente).


Hai ragione, appena provato udisks --show-info.__ Ma__ va notato che se usato in modalità batch o generalmente in script, udisksè molto più lento di udevadm.
syntaxerror

6

Un altro modo che di solito funziona è:

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

Ecco una riga che fornisce una rapida enumerazione di unità e numero di modello / seriale:

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

O per macchine remote:

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'"

È quindi possibile elaborare ulteriormente questo output. Per la maggior parte dei tipi di unità, la seconda stringa per riga è MODEL_SERIAL.


2

Come ha detto Womble, senza l'accesso root o la concessione di autorizzazioni simili a root per alcuni processi, non è possibile ottenere questo. Tuttavia, poiché dici di essere un principiante, fammi notare un pratico comando chiamato lshw.


Grazie sia a Womble che a te stesso, molto apprezzato. Esaminerò il comando che hai citato.

1

A meno di concedere autorizzazioni simili a root per alcuni processi, non è possibile raggiungere questo obiettivo. Anche come root non puoi farlo su alcune configurazioni hardware.


Grazie per la tua rapida risposta Womble. Ci proverò.
mustafa,

0

I collegamenti in / dev / disk / by-id sono creati da udev. In /etc/udev/rules.d/50-udev.rules è possibile trovare tali righe:

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}"

Sfortunatamente non è banale scoprire questo by-idlink simbolico dal nome del dispositivo. Ma c'è almeno un modo diretto:

$ 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

Viene restituito un elenco separato da spazi. Quindi il by-idpercorso può essere trovato.

Oppure puoi ottenere direttamente il numero seriale "composito":

$ 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

Nel ID_SERIALdopo l'ultimo carattere di sottolineatura È possibile ottenere il numero di serie.

Come vedo, un numero seriale può contenere caratteri alfanumerici e '-' (ho tali HDD SCSI). Qualcuno conosce qualche limitazione sul numero di serie? Se può contenere '_', questo metodo non è a prova di proiettile.

La ID_MODELchiave potrebbe essere utilizzata per localizzare più precisamente l'inizio del numero seriale, poiché (mi sembra) i suoi primi 15 caratteri vengono aggiunti agli ID_SERIAL(spazi sostituiti da '_').


"udevinfo" non ha funzionato per me qui su Ubuntu. Tuttavia, il seguente one-liner ha fatto esattamente quello che volevo: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'ovviamente, si -q propertypuò tralasciare, ma penso sempre che sia uno spreco di risorse consentire l' udevadmoutput di linee aggiuntive che non ci servono affatto.
syntaxerror
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.