Numéro de série du disque dur Linux comme non root


15

Tout d'abord, je voudrais m'excuser pour le titre de ne pas inclure les détails du matériel. C'est parce que je recherche une commande qui fonctionnera dans toutes les distributions Linux.

Question:

Je suis très nouveau sur Linux et je ne sais pas grand-chose, cependant, est-il possible de récupérer le numéro de série du disque dur en mode non root. Je suis conscient qu'il existe des commandes disponibles pour récupérer ces informations en utilisant sudo. Cependant, j'ai besoin d'un moyen de récupérer ces informations sans exécuter en tant que sudo.

Toute suggestion serait très appréciée.

Sincères amitiés,

Mustafa

Réponses:


19

Sur la plupart des distributions actuelles, les numéros de série du disque dur sont stockés dans la base de données udev, qui peut être interrogé sans les autorisations root:

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

(cherchez ID_SERIAL, ID_SERIAL_SHORT, il y a aussi des /dev/disk/by-id/ata-*liens symboliques pour les disques ATA à partir de ces valeurs).

udisksfournit une interface de niveau supérieur à ces données et plus encore (il donne également accès aux attributs SMART sans nécessiter les privilèges root, qui seraient nécessaires pour appeler, par exemple, smartctldirectement).


Vous avez raison, juste essayé udisks --show-info.__ Mais__ il faut noter que lorsqu'il est utilisé en mode batch ou généralement dans des scripts, udisksest beaucoup plus lent que udevadm.
erreur de syntaxe

6

Une autre méthode qui fonctionne généralement est:

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

Voici une doublure qui vous donne une énumération rapide du lecteur et du numéro de modèle / 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 pour les machines distantes:

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

Vous pouvez ensuite poursuivre le traitement de cette sortie. Pour la plupart des types de lecteur, la deuxième chaîne par ligne est MODEL_SERIAL.


2

Comme l'a dit womble, sans accès root ou octroi d'autorisations de type root à certains processus, vous ne pouvez pas y parvenir. Cependant, puisque vous dites que vous êtes un débutant, permettez-moi de vous parler d'une commande pratique appelée lshw.


Merci à vous et à Womble, très appréciés. Je vais enquêter sur la commande que vous avez mentionnée.

1

À moins d'accorder des autorisations de type racine à certains processus, vous ne pouvez pas y parvenir. Même en tant que root, vous ne pouvez pas le faire sur certaines configurations matérielles.


Merci pour votre réponse rapide Womble. Je testerai.
mustafa

0

Les liens sous / dev / disk / by-id sont créés par udev. Dans /etc/udev/rules.d/50-udev.rules, ces lignes peuvent être trouvées:

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

Malheureusement, il n'est pas trivial de trouver ce by-idlien symbolique à partir du nom de l'appareil. Mais il y a au moins une voie directe:

$ 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

Une liste séparée par des espaces est renvoyée. Ainsi, le by-idchemin peut être trouvé.

Ou vous pouvez directement obtenir le numéro de série "composite":

$ 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

Dans le ID_SERIALaprès le dernier trait de soulignement Vous pouvez obtenir le numéro de série.

Comme je le vois, un numéro de série peut contenir des caractères alphanumériques et «-» (j'ai de tels disques durs SCSI). Quelqu'un connaît-il une limitation du numéro de série? Si elle peut contenir «_», cette méthode n'est pas à l'épreuve des balles.

La ID_MODELclé pourrait être utilisée pour localiser plus précisément le début du numéro de série, car (il me semble) ses 15 premiers caractères sont ajoutés aux ID_SERIAL(espaces remplacés par '_').


"udevinfo" n'a pas fonctionné pour moi ici sur Ubuntu. Cependant, le one-liner suivant a fait exactement ce que je voulais: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'bien sûr, le -q propertypeut être laissé de côté, mais je pense toujours que c'est un gaspillage de ressources de laisser udevadmsortir des lignes supplémentaires dont nous n'avons pas besoin du tout.
erreur de syntaxe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.