หมายเลขซีเรียลฮาร์ดไดรฟ์ Linux ที่ไม่ใช่รูท


15

ก่อนอื่นฉันต้องขออภัยสำหรับชื่อที่ไม่รวมถึงรายละเอียดฮาร์ดแวร์ นี่เป็นเพราะฉันกำลังมองหาคำสั่งที่จะทำงานในการกระจาย Linux ทั้งหมด

คำถาม:

ฉันยังใหม่กับ Linux และไม่ทราบมาก แต่เป็นไปได้หรือไม่ที่จะเรียกคืนหมายเลขซีเรียลของฮาร์ดไดรฟ์ที่ทำงานแบบไม่ใช้รูท ฉันรู้ว่ามีคำสั่งให้เรียกใช้ข้อมูลนี้โดยใช้ sudo อย่างไรก็ตามฉันต้องการวิธีในการดึงข้อมูลนี้โดยไม่เรียกใช้เป็น sudo

ข้อเสนอแนะใด ๆ จะได้รับการชื่นชมอย่างมาก

ขอแสดงความนับถือ,

มุสตาฟา

คำตอบ:


19

ในการกระจายปัจจุบันหมายเลขซีเรียล HDD ส่วนใหญ่จะถูกเก็บไว้ในฐานข้อมูล udev ซึ่งสามารถสอบถามได้โดยไม่ต้องมีการอนุญาตรูท:

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

(มองหาID_SERIAL, ID_SERIAL_SHORT; ยังมี/dev/disk/by-id/ata-*symlinks สำหรับไดรฟ์ ATA ขึ้นอยู่กับค่าเหล่านั้น)

udisksมอบอินเทอร์เฟซระดับสูงให้กับข้อมูลเหล่านั้นและอื่น ๆ อีกมากมาย (นอกจากนี้ยังให้การเข้าถึงแอตทริบิวต์ SMART โดยไม่ต้องใช้สิทธิ์รูทซึ่งจำเป็นสำหรับการโทรเช่นsmartctlโดยตรง)


คุณขวาเพียงแค่พยายามudisks --show-info.__ But__ จะต้องมีการตั้งข้อสังเกตว่าเมื่อใช้ในโหมดแบทช์หรือโดยทั่วไปในสคริปต์เป็นวิธีที่ช้ากว่าudisks udevadm
SyntaxError

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

เช่นเดียวกับ womble ที่กล่าวว่าหากไม่มีการเข้าถึงรูทหรือให้สิทธิ์แบบรูทในบางกระบวนการคุณจะไม่สามารถทำสิ่งนี้ได้ lshwแต่เนื่องจากคุณบอกว่าคุณเป็นมือใหม่ให้ฉันทราบคุณเกี่ยวกับคำสั่งที่มีประโยชน์ที่เรียกว่า


ขอบคุณทั้ง Womble และตัวคุณเองชื่นชมเป็นอย่างมาก ฉันจะตรวจสอบคำสั่งที่คุณพูดถึง

1

ขาดสิทธิ์ในการรูทเช่นเดียวกับกระบวนการคุณไม่สามารถทำสิ่งนี้ได้ แม้ในขณะที่รูทคุณไม่สามารถทำได้ในการกำหนดค่าฮาร์ดแวร์บางอย่าง


ขอบคุณสำหรับการตอบสนองที่รวดเร็วของคุณ Womble ฉันจะปล่อยมันไป
มุสตาฟา

0

ลิงก์ภายใต้ / dev / disk / by-id ถูกสร้างโดย udev ใน /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-idsymlink นี้มาจากชื่อของอุปกรณ์ แต่มีทางตรงอย่างน้อยหนึ่งทาง:

$ 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 HDDs) ไม่มีใครรู้ข้อ จำกัด เกี่ยวกับหมายเลขซีเรียลหรือไม่ หากสามารถมี '_' ได้วิธีการนี้จะไม่ใช้ระบบกันกระสุน

ID_MODELที่สำคัญสามารถนำมาใช้เพื่อ จำกัด อย่างแม่นยำมากขึ้นจุดเริ่มต้นของหมายเลขที่เป็น (มันดูเหมือนว่าฉัน) 15 ตัวอักษรแรกของมีเพิ่มID_SERIAL(พื้นที่แทนที่ด้วย '_')


"udevinfo" ไม่ทำงานสำหรับฉันที่นี่บน Ubuntu อย่างไรก็ตามหนึ่งซับต่อไปนี้ทำในสิ่งที่ฉันต้องการ: udevadm info -q property -xn sda | awk -F\' '/ID_SERIAL_SHORT/{print $2}'แน่นอน-q propertyสามารถทิ้งไว้ได้ แต่ฉันคิดเสมอว่ามันเป็นทรัพยากรที่เสียเปล่าเพื่อให้สามารถudevadmเพิ่มบรรทัดเพิ่มเติมที่เราไม่ต้องการเลย
SyntaxError
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.