गैर-रूट के रूप में लिनक्स हार्ड ड्राइव सीरियल नंबर


15

सबसे पहले, मैं हार्डवेयर विवरणों को शामिल नहीं करने के लिए शीर्षक के लिए माफी चाहता हूं। ऐसा इसलिए है क्योंकि मैं एक कमांड की तलाश कर रहा हूं जो सभी लिनक्स वितरण में काम करेगा।

सवाल:

मैं लिनक्स के लिए बहुत नया हूं और बहुत कुछ नहीं जानता, हालांकि, क्या हार्ड ड्राइव सीरियल नंबर को गैर-रूट के रूप में फिर से प्राप्त करना संभव है। मुझे पता है कि sudo का उपयोग करके चल रही इस जानकारी को पुनः प्राप्त करने के लिए कमांड उपलब्ध हैं। हालाँकि, मुझे sudo के रूप में चलने के बिना इस जानकारी को पुनः प्राप्त करने का एक तरीका चाहिए।

किसी भी सुझाव बहुत सराहना की जाएगी।

सधन्यवाद,

मुस्तफा

जवाबों:


19

अधिकांश वर्तमान वितरणों पर HDD सीरियल नंबर udev डेटाबेस में संग्रहीत किए जाते हैं, जिन्हें रूट अनुमति के बिना क्वेर किया जा सकता है:

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

(देखने के लिए ID_SERIAL, ID_SERIAL_SHORT, वहाँ भी कर रहे हैं/dev/disk/by-id/ata-* एटीए ड्राइव उन मूल्यों पर आधारित के लिए सिमलिंक)।

udisksउन डेटा और अधिक के लिए एक उच्च-स्तरीय इंटरफ़ेस प्रदान करता है (यह रूट विशेषाधिकारों की आवश्यकता के बिना स्मार्ट विशेषताओं तक पहुंच प्रदान करता है, जिन्हें कॉल करने के लिए आवश्यक होगा, जैसे, smartctlसीधे)।


आप सही हैं, बस कोशिश की udisks --show-info।__ लेकिन__ यह ध्यान दिया जाना चाहिए कि जब बैच मोड में या आम तौर पर लिपियों में उपयोग किया जाता है, तो udisksक्या तुलना में धीमी है udevadm
वाक्यविन्यास

6

एक और तरीका है जो आमतौर पर काम करता है:

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

यहाँ एक लाइनर है जो आपको ड्राइव और मॉडल / सीरियल नंबर का त्वरित ज्ञान देता है:

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

या दूरस्थ मशीनों के लिए:

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

फिर आप इस आउटपुट को आगे प्रोसेस कर सकते हैं। अधिकांश ड्राइव प्रकारों के लिए, प्रति पंक्ति दूसरा स्ट्रिंग MODEL_SERIAL है।


2

जैसे वोमबले ने कहा, बिना रूट एक्सेस या रूट-परमिट के किसी भी प्रक्रिया को अनुमति दिए बिना, आप इसे हासिल नहीं कर सकते। हालाँकि, जब से आप कहते हैं कि आप एक नौसिखिया हैं, मुझे आपको एक आसान कमांड के बारे में ध्यान दें lshw


Womble और खुद दोनों को धन्यवाद, बहुत सराहना की। मैं आपके द्वारा बताई गई कमांड की जांच करूंगा।

1

कुछ प्रक्रिया के लिए रूट जैसी अनुमतियाँ देने से कम, आप इसे प्राप्त नहीं कर सकते। यहां तक ​​कि रूट के रूप में आप इसे कुछ हार्डवेयर कॉन्फ़िगरेशन पर नहीं कर सकते।


आपकी त्वरित प्रतिक्रिया के लिए धन्यवाद Womble। मैं उसे जाने दूंगा।
मुस्तफा

0

Udv द्वारा / dev / डिस्क / बाय-आईडी के तहत लिंक बनाया गया है। /Etc/udev/rules.d/50-udev.rules में ऐसी लाइनें पाई जा सकती हैं:

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

दुर्भाग्य by-idसे डिवाइस के नाम से इस सिमिलिंक का पता लगाना तुच्छ नहीं है। लेकिन कम से कम एक सीधा रास्ता है:

$ 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

एक अंतरिक्ष अलग सूची वापस आ गई है। तो by-idरास्ता मिल सकता है।

या आप सीधे "समग्र" सीरियल नंबर प्राप्त कर सकते हैं:

$ 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

ID_SERIALअंतिम अंडरस्कोर के बाद आप सीरियल नंबर प्राप्त कर सकते हैं।

जैसा कि मैं देख रहा हूं कि एक सीरियल नंबर में अल्फ़ान्यूमेरिकल कैरेक्टर और '-' (मेरे पास ऐसे SCSI HDD हैं) हो सकते हैं। क्या किसी को सीरियल नंबर के बारे में कोई सीमा पता है? यदि इसमें '_' हो सकता है तो यह विधि बुलेट प्रूफ नहीं है।

ID_MODELके रूप में (मुझे लगता है) इसके पहले 15 वर्णों से जुड़ जाते हैं कुंजी, और अधिक स्पष्ट सीरियल नंबर की शुरुआत स्थानीय बनाना करने के लिए इस्तेमाल किया जा सकता है ID_SERIAL(द्वारा '_' की जगह रिक्त स्थान)।


उबुन्टु पर "इदेविनोफो" ने मेरे लिए यहां काम नहीं किया। हालांकि, निम्नलिखित एक-लाइनर ने ठीक वही किया जो मैं चाहता था: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'बेशक, -q propertyछोड़ा जा सकता है, लेकिन मुझे हमेशा लगता है कि udevadmआउटपुट को अतिरिक्त लाइनों के लिए बर्बाद करने के लिए संसाधनों की बर्बादी है जो हमें बिल्कुल भी ज़रूरत नहीं है।
वाक्य रचना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.